diff --git a/plugins/proxy/README.md b/plugins/proxy/README.md new file mode 100644 index 0000000..819d032 --- /dev/null +++ b/plugins/proxy/README.md @@ -0,0 +1,45 @@ +proxy plugin +============ + +The proxy plugin provides a couple helper functions to those of us who are +stuck behind HTTP/HTTPS/FTP proxies that require authentication. + +## Usage + +In all cases you will need to add 'proxy' to your fish_plugins list in +config.fish + +### No authentication + +If you just want to have the proxy plugin configure all the environment +variables, you may set proxy_host: + + set proxy_host myproxy.example.com:8000 + +The proxy plugin will prepend `http://` for you. Here's the result: + + ~> set -x |grep proxy + ALL_PROXY http://myproxy.example.com:8000 + FTP_PROXY http://myproxy.example.com:8000 + HTTPS_PROXY http://myproxy.example.com:8000 + HTTP_PROXY http://myproxy.example.com:8000 + NO_PROXY http://myproxy.example.com:8000 + all_proxy http://myproxy.example.com:8000 + ftp_proxy http://myproxy.example.com:8000 + http_proxy http://myproxy.example.com:8000 + https_proxy http://myproxy.example.com:8000 + no_proxy http://myproxy.example.com:8000 + +### With authentication + +Set your proxy host and username: + + set proxy_host myproxy.example.com:8000 + set proxy_user mylogin + +When you need to make use of the proxy, just run `proxy`. It will prompt you +for a password and setup your environment. + +If you didn't setup a proxy_user variable, you will be prompted for a username. + +If you wish to clear your proxy variables, run `noproxy`. diff --git a/plugins/proxy/_proxy_set.fish b/plugins/proxy/_proxy_set.fish new file mode 100644 index 0000000..b692bf0 --- /dev/null +++ b/plugins/proxy/_proxy_set.fish @@ -0,0 +1,13 @@ +function _proxy_set -a proxy \ + -d "Set all proxy vars to specified value" + + set -l envars http_proxy ftp_proxy https_proxy all_proxy no_proxy \ + HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY ALL_PROXY + for envar in $envars + if test $proxy = '-e' + set -e $envar + else + set -gx $envar $proxy + end + end +end diff --git a/plugins/proxy/noproxy.fish b/plugins/proxy/noproxy.fish new file mode 100644 index 0000000..a1d631e --- /dev/null +++ b/plugins/proxy/noproxy.fish @@ -0,0 +1,3 @@ +function noproxy -d "Clear all proxy environment variables" + _proxy_set -e +end diff --git a/plugins/proxy/proxy.fish b/plugins/proxy/proxy.fish new file mode 100644 index 0000000..5a8a75d --- /dev/null +++ b/plugins/proxy/proxy.fish @@ -0,0 +1,25 @@ +function proxy -d "Setup proxy environment variables" + if not set -q proxy_host + echo "Error: You must set proxy_host to your proxy hostname:port in config.fish" + echo "You may also set proxy_user to your username" + return + end + + # Get user & password + set -l user $proxy_user + if not set -q proxy_user + read -p "echo -n 'Proxy User: '" user + end + # Hacky way to read password in fish + echo -n 'Proxy Password: ' + stty -echo + head -n 1 - | read -l pass + stty echo + echo + # URL encode password + set -l chars (echo $pass | sed -E -e 's/./\n\\0/g;/^$/d;s/\n//') + printf '%%%02x' "'"$chars"'" | read -l encpass + + _proxy_set "http://$user:$encpass@$proxy_host" +end + diff --git a/plugins/proxy/proxy.load b/plugins/proxy/proxy.load new file mode 100644 index 0000000..584caec --- /dev/null +++ b/plugins/proxy/proxy.load @@ -0,0 +1,2 @@ +# Initial proxy setup (no username/password) +_proxy_set "http://$proxy_host"