Skip to content

Instantly share code, notes, and snippets.

@shivamMg
Last active November 22, 2016 13:42
Show Gist options
  • Select an option

  • Save shivamMg/4e643d94bebea8a69ac3fa7fa45b0f24 to your computer and use it in GitHub Desktop.

Select an option

Save shivamMg/4e643d94bebea8a69ac3fa7fa45b0f24 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
show_help() {
cat << EOF
Usage: ${0##*/} [-hegpsa] PROXYURL
Change Proxy for app and env. If PROXYURL parameter is not passed, the proxy is unset for that app or env.
-h Display help
-e Change env proxy variables
-g Change git proxy
-p Change package manager proxy
-s Change system proxy
-a Change proxy for all
EOF
}
change_env_proxy() {
if [ -z "$1" ]; then
# Unset Env Vars
echo unset http_proxy
echo unset https_proxy
echo unset ftp_proxy
echo unset rsync_proxy
echo unset no_proxy
echo '# Use: eval $(!!);'
else
# Set Env Vars
echo export http_proxy="$1"
echo export https_proxy="$1"
echo export ftp_proxy="$1"
echo export rsync_proxy="$1"
echo export no_proxy="localhost,127.0.0.1"
echo '# Use: eval $(!!);'
fi
}
change_git_proxy() {
if [ -z "$1" ]; then
# Unset Git Proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
else
# Set Git Proxy
git config --global http.proxy $1
git config --global https.proxy $1
fi
}
change_pkg_mgr_proxy() {
if [ -z "$1" ]; then
sudo rm /etc/apt/apt.conf.d/01proxy
else
cmd="Acquire::http::Proxy \"$1\";"
echo $cmd | sudo tee --append /etc/apt/apt.conf.d/01proxy > /dev/null
fi
}
change_sys_proxy() {
# Expects argument in the form:
# http://user:pwd@host:port
if [ -z "$1" ]; then
gsettings set org.gnome.system.proxy mode 'none'
exit 0
fi
url=$1
# Split with @ as separator
arr=(${url//@/ })
addr=${arr[1]}
# addr="host:port"
tmp=(${addr//:/ })
host=${tmp[0]}
port=${tmp[1]}
gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.http host $host
gsettings set org.gnome.system.proxy.http port $port
gsettings set org.gnome.system.proxy.https host $host
gsettings set org.gnome.system.proxy.https port $port
gsettings set org.gnome.system.proxy.ftp host $host
gsettings set org.gnome.system.proxy.ftp port $port
gsettings set org.gnome.system.proxy.socks host $host
gsettings set org.gnome.system.proxy.socks port $port
}
# Default all cases to 1
env_proxy=1
git_proxy=1
pkg_mgr_proxy=1
sys_proxy=1
all_proxy=1
OPTIND=1
while getopts "hegpsa" opt; do
case "$opt" in
# Show help
h) show_help
exit 0
;;
# Env Proxy
e) env_proxy=0
;;
# Git Proxy
g) git_proxy=0
;;
# Package Manager Proxy
p) pkg_mgr_proxy=0
;;
# System Proxy
s) sys_proxy=0
;;
# All
a) all_proxy=0
;;
'?')
show_help >&2
exit 1
;;
esac
done
shift "$((OPTIND-1))"
proxy_url="$*"
if [ $all_proxy -eq 0 ]; then
change_env_proxy $proxy_url
change_git_proxy $proxy_url
change_sys_proxy $proxy_url
change_pkg_mgr_proxy $proxy_url
elif [ $env_proxy -eq 0 ]; then
change_env_proxy $proxy_url
elif [ $git_proxy -eq 0 ]; then
change_git_proxy $proxy_url
elif [ $pkg_mgr_proxy -eq 0 ]; then
change_pkg_mgr_proxy $proxy_url
elif [ $sys_proxy -eq 0 ]; then
change_sys_proxy $proxy_url
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment