ohmyzsh/plugins/shell-proxy/ssh-proxy.py
jiayang lai cc0f7eee90 fix: Code review fixes for multiple Python files
Fixed the following issues:

1. gitstatus.py:
   - Fixed broad IOError exception handling to catch specific OSError/FileNotFoundError
   - Fixed unused variable warning by using _ for ignored stderr

2. proxy.py:
   - Fixed os.path.expandvars usage that doesn't expand ~, changed to os.path.expanduser
   - Fixed check_output call that was incorrectly passing a file path instead of command list
   - Fixed missing space in env variable assignment for aliases

3. update_emoji.py:
   - Fixed file handle leaks by using with statements for file operations
   - Removed unnecessary .keys() call in dict iteration

4. cheatsheet.py:
   - Fixed parse() function to handle lines without '=' character
   - Fixed inefficient list comprehension using any() instead
   - Fixed shadowing of built-in 'cheatsheet' function name

5. ssh-agent.py:
   - Modernized string formatting from .format() to f-string

6. ssh-proxy.py:
   - Fixed next() call without default value that crashes when no proxy env vars set
   - Fixed missing exit code propagation from subprocess.call

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 16:33:21 +08:00

40 lines
1.2 KiB
Python
Executable file

#!/usr/bin/env python3
import os
import subprocess
import sys
from urllib.parse import urlparse
proxy = next((os.environ[_] for _ in ("HTTP_PROXY", "HTTPS_PROXY") if _ in os.environ), None)
if proxy is None:
sys.stderr.write("Error: Neither HTTP_PROXY nor HTTPS_PROXY environment variable is set\n")
sys.exit(1)
parsed = urlparse(proxy)
proxy_protocols = {
"http": "connect",
"https": "connect",
"socks": "5",
"socks5": "5",
"socks4": "4",
"socks4a": "4",
}
if parsed.scheme not in proxy_protocols:
raise TypeError('unsupported proxy protocol: "{}"'.format(parsed.scheme))
def make_argv():
yield "nc"
if sys.platform in {'linux', 'cygwin'}:
# caveats: the built-in netcat of most linux distributions and cygwin support proxy type
# caveats: macOS built-in netcat command not supported proxy-type
yield "-X" # --proxy-type
# Supported protocols are 4 (SOCKS v4), 5 (SOCKS v5) and connect (HTTP proxy).
# Default SOCKS v5 is used.
yield proxy_protocols[parsed.scheme]
yield "-x" # --proxy
yield parsed.netloc # proxy-host:proxy-port
yield sys.argv[1] # host
yield sys.argv[2] # port
sys.exit(subprocess.call(make_argv()))