Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Oh My Zsh
Commits
5ea25e67
Unverified
Commit
5ea25e67
authored
May 25, 2020
by
Septs
Committed by
GitHub
May 24, 2020
Browse files
Add `shell-proxy` plugin (#8692)
parent
aada4d62
Changes
5
Hide whitespace changes
Inline
Side-by-side
plugins/shell-proxy/README.md
0 → 100644
View file @
5ea25e67
# Shell Proxy oh-my-zsh plugin
This a pure user-space program, shell-proxy setter, written Python3 and Bash.
100% only no side-effects, only effect
**environment variables**
and
**aliases**
## Key feature
-
Support Ubuntu, Archlinux, etc (Linux)
-
Support macOS
-
Support git via based-
`$GIT_SSH`
-
Support ssh, sftp, scp, slogin and ssh-copy-id via based-
`alias`
-
Built-in Auto-complete
## Usage
Method 1:
`$DEFAULT_PROXY`
is the proxy URL you will set
Method 2:
Write a program to
`$HOME/.config/proxy`
in the file.
Example program:
```
bash
#!/bin/bash
# The file path: $HOME/.config/proxy
if
[[
"
$OSTYPE
"
==
"darwin"
*
]]
;
then
echo
"http://127.0.0.1:6152"
# Surge Mac
else
echo
"http://127.0.0.1:8123"
# polipo
fi
```
Method 3:
The working path of
**Method 2**
can be changed via
`$CONFIG_PROXY`
## Reference
-
`$GIT_SSH`
:
<https://www.git-scm.com/docs/git#Documentation/git.txt-codeGITSSHcode>
-
OpenSSH manual:
<https://man.openbsd.org/ssh>
## Maintainer
-
<https://github.com/septs>
## The oh-my-zsh plugin (shell-proxy)
Public Domain
plugins/shell-proxy/proxy.py
0 → 100755
View file @
5ea25e67
#!/usr/bin/env python3
import
os
import
sys
from
subprocess
import
check_output
,
list2cmdline
cwd
=
os
.
path
.
dirname
(
__file__
)
ssh_agent
=
os
.
path
.
join
(
cwd
,
"ssh-agent.py"
)
user_proxy
=
os
.
environ
.
get
(
"CONFIG_PROXY"
,
os
.
path
.
expandvars
(
"$HOME/.config/proxy"
))
def
get_http_proxy
():
if
"DEFAULT_PROXY"
in
os
.
environ
:
return
os
.
environ
[
"DEFAULT_PROXY"
]
if
os
.
path
.
isfile
(
user_proxy
):
return
check_output
(
user_proxy
).
decode
(
"utf-8"
).
strip
()
raise
Exception
(
"Not found, Proxy configuration"
)
def
make_proxies
(
url
:
str
):
proxies
=
{
"%s_PROXY"
%
_
:
url
for
_
in
(
"HTTP"
,
"HTTPS"
,
"FTP"
,
"RSYNC"
,
"ALL"
)}
proxies
.
update
({
name
.
lower
():
value
for
(
name
,
value
)
in
proxies
.
items
()})
proxies
[
"GIT_SSH"
]
=
ssh_agent
return
proxies
def
merge
(
mapping
:
dict
):
return
(
"%s=%s"
%
_
for
_
in
mapping
.
items
())
class
CommandSet
:
proxies
=
make_proxies
(
get_http_proxy
())
aliases
=
{
_
:
"env NAME=%s %s"
%
(
_
,
ssh_agent
)
for
_
in
(
"ssh"
,
"sftp"
,
"scp"
,
"slogin"
,
"ssh-copy-id"
)
}
def
enable
(
self
):
cmdline
(
"export"
,
*
merge
(
self
.
proxies
))
cmdline
(
"alias"
,
*
merge
(
self
.
aliases
))
def
disable
(
self
):
cmdline
(
"unset"
,
*
self
.
proxies
.
keys
())
cmdline
(
"unalias"
,
*
self
.
aliases
.
keys
())
def
status
(
self
):
proxies
=
(
"%11s = %s"
%
(
name
,
os
.
environ
[
name
])
for
name
in
self
.
proxies
.
keys
()
if
name
in
os
.
environ
)
for
_
in
proxies
:
cmdline
(
"echo"
,
_
)
def
usage
(
self
):
cmdline
(
"echo"
,
"usage: proxy {enable,disable,status}"
)
self
.
status
()
def
cmdline
(
*
items
):
print
(
list2cmdline
(
items
))
def
main
():
command
=
CommandSet
()
if
len
(
sys
.
argv
)
==
1
:
command
.
usage
()
sys
.
exit
(
-
1
)
getattr
(
command
,
sys
.
argv
[
1
],
command
.
usage
)()
if
__name__
==
"__main__"
:
main
()
plugins/shell-proxy/shell-proxy.plugin.zsh
0 → 100644
View file @
5ea25e67
#!/usr/bin/bash
# shellcheck disable=SC1090
__PROXY__
=
"
${
0
:A:h
}
/proxy.py"
proxy
()
{
source
<
(
"
$__PROXY__
"
"
$1
"
)
}
_proxy
()
{
local
-r
commands
=(
'enable'
'disable'
'status'
)
compset
-P
'*,'
compadd
-S
''
"
${
commands
[@]
}
"
}
compdef
'_proxy'
'proxy'
plugins/shell-proxy/ssh-agent.py
0 → 100755
View file @
5ea25e67
#!/usr/bin/env python3
import
os
import
subprocess
import
sys
ssh_proxy
=
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
"ssh-proxy.py"
)
argv
=
[
os
.
environ
.
get
(
"NAME"
,
"ssh"
),
"-o"
,
"ProxyCommand={} %h %p"
.
format
(
ssh_proxy
),
"-o"
,
"Compression=yes"
,
]
subprocess
.
call
(
argv
+
sys
.
argv
[
1
:],
env
=
os
.
environ
)
plugins/shell-proxy/ssh-proxy.py
0 → 100755
View file @
5ea25e67
#!/usr/bin/env python3
import
os
import
subprocess
import
sys
import
urllib.parse
proxy
=
next
(
os
.
environ
[
_
]
for
_
in
(
"HTTP_PROXY"
,
"HTTPS_PROXY"
)
if
_
in
os
.
environ
)
argv
=
[
"nc"
,
"-X"
,
"connect"
,
"-x"
,
urllib
.
parse
.
urlparse
(
proxy
).
netloc
,
# proxy-host:proxy-port
sys
.
argv
[
1
],
# host
sys
.
argv
[
2
],
# port
]
subprocess
.
call
(
argv
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment