Last active
November 22, 2016 13:42
-
-
Save shivamMg/4e643d94bebea8a69ac3fa7fa45b0f24 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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