#!/bin/bash
#Author: Nishchal Siddharth Pandey

echo "Created by Nishchal Siddharth [GitHub: nisiddharth]"
echo ""
echo "This is for MNNIT campus proxy only, adds 'edcguest' as Username and Password and uses 3128 as Port number"

# don't let script run as root
if (( $EUID == 0 )); then
    echo "\n\nPlease DON'T run as root!\n"
    exit
fi

read -p "Please enter the proxy host you want to apply (eg, 172.31.100.29) : " proxy
echo ""
echo "Setting up $proxy"

# Removing #####################################################################

# Removing proxies from environment variables
echo "Removing proxies from environment variables"
sudo sed -i '/http_proxy/d' /etc/environment
sudo sed -i '/https_proxy/d' /etc/environment
sudo sed -i '/ftp_proxy/d' /etc/environment
sudo sed -i '/socks_proxy/d' /etc/environment
sudo sed -i '/all_proxy/d' /etc/environment
sudo sed -i '/HTTP_PROXY/d' /etc/environment
sudo sed -i '/HTTPS_PROXY/d' /etc/environment
sudo sed -i '/FTP_PROXY/d' /etc/environment
sudo sed -i '/SOCKS_PROXY/d' /etc/environment
sudo sed -i '/ALL_PROXY/d' /etc/environment
# these are to remove the trailing newlines
sudo perl -i -pe 'chomp if eof' /etc/environment
sudo perl -i -pe 'chomp if eof' /etc/environment
echo "done."

# Removing proxies from apt package manager
echo "Removing proxies from apt package manager"
sudo sed -i '/Acquire::http::proxy/d' /etc/apt/apt.conf
sudo sed -i '/Acquire::https::proxy/d' /etc/apt/apt.conf
sudo sed -i '/Acquire::ftp::proxy/d' /etc/apt/apt.conf
sudo sed -i '/Acquire::socks::proxy/d' /etc/apt/apt.conf
# these are to remove the trailing newlines
sudo perl -i -pe 'chomp if eof' /etc/apt/apt.conf
sudo perl -i -pe 'chomp if eof' /etc/apt/apt.conf
echo "done."

# Adding #######################################################################

# Adding proxies to environment variables
echo "Adding proxies to environment variables"
# these are to remove the trailing newlines
sudo perl -i -pe 'chomp if eof' /etc/environment
sudo perl -i -pe 'chomp if eof' /etc/environment
# adding
sudo sh -c "echo '\nhttp_proxy=http://edcguest:edcguest@$proxy:3128/\nhttps_proxy=http://edcguest:edcguest@$proxy:3128/\nftp_proxy=http://edcguest:edcguest@$proxy:3128/\n' >> /etc/environment"
sudo sh -c "echo '\nHTTP_PROXY=http://edcguest:edcguest@$proxy:3128/\nHTTPS_PROXY=http://edcguest:edcguest@$proxy:3128/\nFTP_PROXY=http://edcguest:edcguest@$proxy:3128/\n' >> /etc/environment"
echo "done."

# Adding proxies to apt package manager
echo "Adding proxies to apt package manager"
# these are to remove the trailing newlines
sudo perl -i -pe 'chomp if eof' /etc/apt/apt.conf
sudo perl -i -pe 'chomp if eof' /etc/apt/apt.conf
# adding
sudo sh -c "echo '\nAcquire::http::proxy \"http://edcguest:edcguest@$proxy:3128/\";\nAcquire::https::proxy \"http://edcguest:edcguest@$proxy:3128/\";\nAcquire::ftp::proxy \"http://edcguest:edcguest@$proxy:3128/\";\n' >> /etc/apt/apt.conf"
echo "done."

# Applying proxies to snap package manager
echo "Applying proxies to snap package manager"
sudo snap set system proxy.http=http://edcguest:edcguest@$proxy:3128/
sudo snap set system proxy.https=http://edcguest:edcguest@$proxy:3128/
echo "done."

# Applying proxy settings in dconf
echo "Applying proxy settings in dconf"
/usr/bin/gsettings set org.gnome.system.proxy mode 'manual' 
/usr/bin/gsettings set org.gnome.system.proxy.http host "edcguest:edcguest@$proxy"
/usr/bin/gsettings set org.gnome.system.proxy.http port 3128
/usr/bin/gsettings set org.gnome.system.proxy.https host "edcguest:edcguest@$proxy"
/usr/bin/gsettings set org.gnome.system.proxy.https port 3128
/usr/bin/gsettings set org.gnome.system.proxy.ftp host "edcguest:edcguest@$proxy"
/usr/bin/gsettings set org.gnome.system.proxy.ftp port 3128
echo "done."

# Applying proxy settings to git
echo "Applying proxy settings to git"
git config --global http.proxy http://edcguest:edcguest@$proxy:3128
git config --global https.proxy http://edcguest:edcguest@$proxy:3128
echo "done."

# Applying proxy settings to npm
echo "Applying proxy settings to npm"
npm config set proxy http://edcguest:edcguest@$proxy:3128
npm config set https-proxy http://edcguest:edcguest@$proxy:3128
echo "done."

# All done!
echo ""
echo "All done! $proxy successfully applied, if connectivity problem still persists please consider logging out then in or rebooting your system."
