#!/bin/sh
# Cache settings
# 2007-2008 Joel Bryan Juliano <joelbryan.juliano@gmail.com>

REPLACE="/usr/bin/rpl"
SUPERUSER="/usr/bin/sudo"

DIALOG_WARNING="/usr/bin/zenity --warning --text"
DIALOG_INFO="/usr/bin/zenity --info"
DIALOG_PROGRESS="/usr/bin/zenity --window-icon $DIALOG_ICON --progress --pulsate --auto-close"
GUI=/usr/lib/internet-cache-setup/internet-cache-gui
REPLACE=/usr/bin/rpl

 SWITCH_ROOT () {

 IS_ROOT=$(exec /usr/bin/gksudo -u root -k -m \
 	 "The software requires permission to modify the system. Please enter the system password" \
	 /bin/echo "IS_ROOT")

 if [ ! -z "$IS_ROOT" ]; then
 echo "SUDO Succesfull"; else
 echo "SUDO is not executed properly";
 fi

 if [ -z "$IS_ROOT" ]; then
 $DIALOG_WARNING 'You do not have necessary permission to change the system.';
  exit 0;
 fi

}

# Firefox Settings
FIREFOX_INI="$HOME/.mozilla/firefox/profiles.ini";
FIREFOX_PROFILE_DIR=$(cat $FIREFOX_INI | grep Path | cut -d= -f2);
FIREFOX_PREFS="$HOME/.mozilla/firefox/$FIREFOX_PROFILE_DIR/prefs.js"
FIREFOX_CHECK_PROXY=$(cat $FIREFOX_PREFS | grep "network.proxy.type" | cut -d, -f2 | sed 's/);//g' | sed 's/^ //g');
FIREFOX_CHECK_HTTP_SETTINGS=$(cat $FIREFOX_PREFS | grep "network.proxy.http");
FIREFOX_HTTP_ADDRESS=$(echo $FIREFOX_CHECK_HTTP_SETTINGS | cut -d";" -f1 | cut -d , -f2| sed 's/"//g' | sed 's/)//g' | sed 's/^ //g');
FIREFOX_HTTP_PORT=$(echo $FIREFOX_CHECK_HTTP_SETTINGS | cut -d";" -f2 | cut -d , -f2| sed 's/)//g');

if [ "$FIREFOX_CHECK_PROXY" = "1" ]; then
 if [ ! "$FIREFOX_HTTP_ADDRESS" = "127.0.0.1" ]; then
 OPT_CACHE="DISABLED"
 echo "PERSONAL CACHE $OPT_CACHE"
 else
 OPT_CACHE="ENABLED"
 echo "PERSONAL CACHE $OPT_CACHE"
 fi
else
 OPT_CACHE="DISABLED"
 echo "PERSONAL CACHE $OPT_CACHE"
fi

# Gnome Settings

GNOME_PROXY_HTTP=$(gconftool-2 --get /system/http_proxy/host);
GNOME_PROXY_HTTP_PORT=$(gconftool-2 --get /system/http_proxy/port);
GNOME_PROXY_SETTINGS=$(gconftool-2 --get /system/http_proxy/use_http_proxy);
GNOME_PROXY_MODE=$(gconftool-2 --get /system/proxy/mode);

# Squid Settings
SWITCH_ROOT;
$SUPERUSER cp /etc/squid/squid.conf "/tmp/squid.internet-cache-setup.conf"
$SUPERUSER chmod a+rw "/tmp/squid.internet-cache-setup.conf"
$SUPERUSER chown $USERNAME "/tmp/squid.internet-cache-setup.conf"
SQUID_CONF="/tmp/squid.internet-cache-setup.conf"
SQUID_CONF_DIR=/etc/squid
SQUID_VISIBLE_HOSTNAME=$(cat $SQUID_CONF | grep ^visible_hostname | cut -d " " -f2 | sed 's/^ //g');
echo "visible_hostname is set to $SQUID_VISIBLE_HOSTNAME"
SQUID_EXTERNAL_HOSTNAME=$(cat $SQUID_CONF | grep ^cache_peer | grep parent | cut -d " " -f2 | sed 's/^ //g');
echo "external proxy is set to $SQUID_EXTERNAL_HOSTNAME";
SQUID_EXTERNAL_METHOD=$(cat $SQUID_CONF | grep "7 no-query default");
echo "external method is set to $SQUID_EXTERNAL_METHOD";
SQUID_EXTERNAL_PORT=$(cat $SQUID_CONF | grep "^cache_peer [0-9a-zA-Z].*" |grep parent | cut -d " " -f4 | sed 's/^ //g');
echo "external port is set to $SQUID_EXTERNAL_PORT";
SQUID_SHARING_CHECK=$(cat $SQUID_CONF | grep ^cache_peer | grep multicast);
echo "ICP is set to $SQUID_SHARING_CHECK;"
SQUID_SHARING_ADDRESS=$(cat $SQUID_CONF | grep ^cache_peer | grep multicast | cut -d " " -f2 | sed 's/^ //g');
echo "ICP address is set to $SQUID_SHARING_ADDRESS";
ICP_MULTICAST_DEFAULT="224.224.224.224";
echo "ICP MULTICAST DEFAULT is $ICP_MULTICAST_DEFAULT";

if [ -z "$SQUID_SHARING_CHECK" ]; then
OPT_SHARING="DISABLED";
echo "PARAM1 is $OPT_SHARING";
else
OPT_SHARING="ENABLED";
echo "PARAM1 is $OPT_SHARING";
fi

if [ -z "$SQUID_SHARING_ADDRESS" ]; then
OPT_SHARING_ADDRESS="$ICP_MULTICAST_DEFAULT";
echo "PARAM2 is $OPT_SHARING_ADDRESS";
else
OPT_SHARING_ADDRESS="$SQUID_SHARING_ADDRESS";
echo "PARAM2 is $OPT_SHARING_ADDRESS";
fi

if [ -z "$SQUID_EXTERNAL_HOSTNAME" ]; then
OPT_EXTERNAL="DISABLED";
echo "PARAM3 is $OPT_EXTERNAL";
OPT_EXTERNAL_ADDRESS="NULL";
echo "PARAM4 is $OPT_EXTERNAL_ADDRESS";
else
OPT_EXTERNAL="ENABLED";
echo "PARAM3 is $OPT_EXTERNAL";
OPT_EXTERNAL_ADDRESS="$SQUID_EXTERNAL_HOSTNAME";
echo "PARAM4 is $OPT_EXTERNAL_ADDRESS";
fi

if [ -z "$SQUID_EXTERNAL_PORT" ]; then
OPT_EXTERNAL_PORT="NULL";
echo "PARAM5 is $OPT_EXTERNAL_PORT";
else
OPT_EXTERNAL_PORT="$SQUID_EXTERNAL_PORT";
echo "PARAM5 is $OPT_EXTERNAL_PORT";
fi

if [ -z "$SQUID_EXTERNAL_METHOD" ]; then
OPT_EXTERNAL_NO_ICP="DISABLED";
echo "PARAM6 is $OPT_EXTERNAL_NO_ICP";
else
OPT_EXTERNAL_NO_ICP="ENABLED";
echo "PARAM6 is $OPT_EXTERNAL_NO_ICP";
fi

INSTALL_PROXY_URL () {
gconftool-2 --type string --set /system/http_proxy/host "127.0.0.1";
gconftool-2 --type integer --set /system/http_proxy/port 3128;
gconftool-2 --type boolean --set /system/http_proxy/use_http_proxy "true";
gconftool-2 --type string --set /system/proxy/mode "manual";

if [ -z "$FIREFOX_CHECK_HTTP_SETTINGS" ]; then
echo \
"
user_pref(\"network.proxy.http\", \"127.0.0.1\");
user_pref(\"network.proxy.http_port\", 3128);
" >> "$FIREFOX_PREFS";
else
$REPLACE "user_pref(\"network.proxy.http\", \"$FIREFOX_HTTP_ADDRESS\");" "user_pref(\"network.proxy.http\", \"127.0.0.1\");" $FIREFOX_PREFS;
$REPLACE "user_pref(\"network.proxy.http_port\",$FIREFOX_HTTP_PORT);" "user_pref(\"network.proxy.http_port\", 3128);" $FIREFOX_PREFS;
fi

if [ -z "$FIREFOX_CHECK_PROXY" ]; then
echo \
"
user_pref(\"network.proxy.type\", 1);
" >> "$FIREFOX_PREFS";
else
$REPLACE "user_pref(\"network.proxy.type\", $FIREFOX_CHECK_PROXY);" "user_pref(\"network.proxy.type\", 1);" $FIREFOX_PREFS;
fi
};

UNINSTALL_PROXY_URL () {
gconftool-2 --type boolean --set /system/http_proxy/use_http_proxy "false";
gconftool-2 --type string --set /system/proxy/mode "none";
yes | $REPLACE "user_pref(\"network.proxy.type\", 1);" "" $FIREFOX_PREFS;
};

MAKE_CHANGES () {
SWITCH_ROOT;
$SUPERUSER cp $SQUID_CONF $SQUID_CONF_DIR/squid.conf;
$SUPERUSER update-rc.d squid defaults;
$SUPERUSER update-rc.d squid-prefetch defaults;
$SUPERUSER /etc/init.d/squid restart;
$SUPERUSER /etc/init.d/squid-prefetch restart;
}

$GUI $OPT_CACHE $OPT_SHARING $OPT_SHARING_ADDRESS $OPT_EXTERNAL $OPT_EXTERNAL_ADDRESS \
$OPT_EXTERNAL_PORT $OPT_EXTERNAL_NO_ICP | (
{ read CACHE_GET; read SHARING_GET; read SHARING_ADDRESS_GET; read EXTERNAL_GET; read EXTERNAL_ADDRESS_GET; \
  read EXTERNAL_PORT_GET; read EXTERNAL_NO_ICP_GET; }
echo $CACHE_GET; echo $SHARING_GET; echo $SHARING_ADDRESS_GET; echo $EXTERNAL_GET; echo $EXTERNAL_ADDRESS_GET; \
echo $EXTERNAL_PORT_GET; echo $EXTERNAL_NO_ICP_GET;

if [ ! "$CACHE_GET" = "EXIT" ]; then

GET_SHARING () {
SWITCH_ROOT;
if [ "$SHARING_GET" = "ENABLE_SHARING" ]; then
echo "PHASE2: SETTING UP SHARING";
        if [ -z "$SQUID_SHARING_CHECK" ]; then
        echo "SHARING IS NOT SET";
        $SUPERUSER echo "cache_peer $SHARING_ADDRESS_GET multicast 3128 3130 ttl=64" >> $SQUID_CONF;
        $SUPERUSER echo "mcast_groups $SHARING_ADDRESS_GET" >> $SQUID_CONF;
        else
        echo "SHARING IS SET";
        $SUPERUSER $REPLACE "cache_peer $SQUID_SHARING_ADDRESS multicast 3128 3130 ttl=64" "cache_peer $SHARING_ADDRESS_GET multicast 3128 3130 ttl=64" $SQUID_CONF;
        $SUPERUSER $REPLACE "mcast_groups $SQUID_SHARING_ADDRESS" "mcast_groups $SHARING_ADDRESS_GET" $SQUID_CONF;
        fi
echo "SHARING NOW IS ENABLED";
fi

if [ "$SHARING_GET" = "DISABLE_SHARING" ]; then
echo "PHASE2: DISABLING SHARING";
$SUPERUSER yes | $REPLACE "cache_peer $SQUID_SHARING_ADDRESS multicast 3128 3130 ttl=64" "" $SQUID_CONF;
$SUPERUSER yes | $REPLACE "mcast_groups $SQUID_SHARING_ADDRESS" "" $SQUID_CONF;
echo "PHASE2: SHARING DISABLED";
fi
};

GET_EXTERNAL () {
SWITCH_ROOT;
if [ "$EXTERNAL_GET" = "ENABLE_EXTERNAL" ]; then
echo "PHASE3: ENABLING EXTERNAL";
        if [ -z "$SQUID_EXTERNAL_HOSTNAME" ]; then
        echo "EXTERNAL IS NOT SET";
                if [ "$EXTERNAL_NO_ICP_GET" = "DISABLE_NO_ICP_EXTERNAL" ]; then
                echo "USING NORMAL EXTERNAL METHOD WITH ICP";
                        if [ ! "$EXTERNAL_ADDRESS_GET" = "NULL" ]; then
                        echo "EXTERNAL HOSTNAME IS NOT NULL";
                        $SUPERUSER echo "cache_peer $EXTERNAL_ADDRESS_GET parent $EXTERNAL_PORT_GET 3130" >> $SQUID_CONF;
                        $SUPERUSER echo "prefer_direct off" >> $SQUID_CONF;
                        echo "EXTERNAL HOSTNAME IS NOW SET";
                        fi
                else
                echo "USING NO ICP FOR EXTERNAL";
                        if [ ! "$EXTERNAL_ADDRESS_GET" = "NULL" ]; then
                        echo "EXTERNAL HOSTNAME IS NOT NULL";
                        $SUPERUSER echo "cache_peer $EXTERNAL_ADDRESS_GET parent $EXTERNAL_PORT_GET 7 no-query default" >> $SQUID_CONF;
                        $SUPERUSER echo "prefer_direct off" >> $SQUID_CONF;
                        echo "EXTERNAL HOSTNAME IS NOW SET";
                        fi
                fi
        else
        echo "EXTERNAL PROXY IS SET";
                if [ "$EXTERNAL_NO_ICP_GET" = "DISABLE_NO_ICP_EXTERNAL" ]; then
                        if [ -z "$SQUID_EXTERNAL_METHOD" ]; then
                        echo "CONFIG IS USING NORMAL EXTERNAL METHOD WITH ICP";
                                if [ ! "$EXTERNAL_ADDRESS_GET" = "NULL" ]; then
                                echo "THERE IS A EXTERNAL PROXY IN CONFIG";
                                echo "AND IT IS SET TO USE ICP";
                                echo "WILL RETAIN ORIGINAL CONFIGURATIONS";
                                $SUPERUSER $REPLACE "cache_peer $SQUID_EXTERNAL_HOSTNAME parent $SQUID_EXTERNAL_PORT 3130" "cache_peer $EXTERNAL_ADDRESS_GET parent $EXTERNAL_PORT_GET 3130" $SQUID_CONF;
                                echo "EXTERNAL IS NOW SET"
                                fi
                        else
                        echo "CONFIG IS USING NORMAL EXTERNAL METHOD WITHOUT ICP";
                                if [ ! "$EXTERNAL_ADDRESS_GET" = "NULL" ]; then
                                echo "THERE IS A EXTERNAL PROXY IN CONFIG";
                                echo "AND IT IS SET TO NOT USE ICP";
                                $SUPERUSER $REPLACE "cache_peer $SQUID_EXTERNAL_HOSTNAME parent $SQUID_EXTERNAL_PORT 7 no-query default" "cache_peer $EXTERNAL_ADDRESS_GET parent $EXTERNAL_PORT_GET 3130" $SQUID_CONF;
                                echo "EXTERNAL IS NOW SET";
                                fi
                        fi
                else
                echo "USING NO ICP METHOD";
                        if [ -z "$SQUID_EXTERNAL_METHOD" ]; then
                        echo "CONFIG IS SET TO USE NORMAL ICP EXTERNAL"
                                if [ ! "$EXTERNAL_ADDRESS_GET" = "NULL" ]; then
                                echo "EXTERNAL HOSTNAME IS NOT NULL";
                                $SUPERUSER $REPLACE "cache_peer $SQUID_EXTERNAL_HOSTNAME parent $SQUID_EXTERNAL_PORT 3130" "cache_peer $EXTERNAL_ADDRESS_GET parent $EXTERNAL_PORT_GET 7 no-query default" $SQUID_CONF;
                                echo "EXTERNAL IS NOW SET";
                                fi
                        else
                        echo "CONFIG IS SET NOT TO USE ICP"
                                if [ ! "$EXTERNAL_ADDRESS_GET" = "NULL" ]; then
                                echo "EXTERNAL HOSTNAME IS NOT NULL";
                                $SUPERUSER $REPLACE "cache_peer $SQUID_EXTERNAL_HOSTNAME parent $SQUID_EXTERNAL_PORT 7 no-query default" "cache_peer $EXTERNAL_ADDRESS_GET parent $EXTERNAL_PORT_GET 3130" $SQUID_CONF;
                                echo "EXTERNAL IS NOW SET";
                                fi
                        fi
                fi
        fi
fi

if [ "$EXTERNAL_GET" = "DISABLE_EXTERNAL" ]; then
echo "DISABLING EXTERNAL";
        if [ -z "$SQUID_EXTERNAL_METHOD" ]; then
        echo "USING NORMAL METHOD"
                if [ ! "$OPT_EXTERNAL_ADDRESS" = "NULL" ]; then
                echo "EXTERNAL HOSTNAME IS NOT NULL"
                $SUPERUSER yes | $REPLACE "cache_peer $SQUID_EXTERNAL_HOSTNAME parent $SQUID_EXTERNAL_PORT 3130" "" $SQUID_CONF;
                $SUPERUSER yes | $REPLACE "prefer_direct off" "" $SQUID_CONF;
                echo "EXTERNAL NOW DISABLED"
                fi
        else
                if [ ! "$OPT_EXTERNAL_ADDRESS" = "NULL" ]; then
                echo "EXTERNAL HOSTNAME IS NOT NULL"
                $SUPERUSER yes | $REPLACE "cache_peer $SQUID_EXTERNAL_HOSTNAME parent $SQUID_EXTERNAL_PORT 7 no-query default" "" $SQUID_CONF;
                $SUPERUSER yes | $REPLACE "prefer_direct off" "" $SQUID_CONF;
                echo "EXTERNAL NOW DISABLED"
                fi
        fi
fi
};

CHECK_VISIBLE_HOSTNAME () {
if [ -z "$SQUID_VISIBLE_HOSTNAME" ]; then
echo "visible_hostname $HOSTNAME" >> $SQUID_CONF;
fi
}


if [ "$CACHE_GET" = "ENABLE_CACHE" ]; then

INSTALL_PROXY_URL;
SWITCH_ROOT;
CHECK_VISIBLE_HOSTNAME;
GET_SHARING;
GET_EXTERNAL;
MAKE_CHANGES;
$DIALOG_INFO --text "Please restart any running web browers to take effect";
else
UNINSTALL_PROXY_URL;
SWITCH_ROOT;
$SUPERUSER /etc/init.d/squid stop;
$SUPERUSER /etc/init.d/squid-prefetch stop;
$SUPERUSER update-rc.d -f squid remove;
$SUPERUSER update-rc.d -f squid-prefetch remove;
$DIALOG_INFO --text "Please restart any running web browers to take effect";
fi

else
exit 0;
fi
)
