Browse Source

optimize shell (#173)

dev
John 8 years ago
committed by 破娃酱
parent
commit
2750af4a2e
  1. 88
      shadowsocks/shell.py

88
shadowsocks/shell.py

@ -52,8 +52,7 @@ def print_exception(e):
import traceback import traceback
traceback.print_exc() traceback.print_exc()
def __version():
def print_shadowsocks():
version_str = '' version_str = ''
try: try:
import pkg_resources import pkg_resources
@ -64,37 +63,26 @@ def print_shadowsocks():
version_str = version.version() version_str = version.version()
except Exception: except Exception:
pass pass
print('ShadowsocksR %s' % version_str) return version_str
def print_shadowsocks():
print('ShadowsocksR %s' % __version())
def log_shadowsocks_version(): def log_shadowsocks_version():
version_str = '' logging.info('ShadowsocksR %s' % __version())
try:
import pkg_resources
version_str = pkg_resources.get_distribution('shadowsocks').version
except Exception:
try:
from shadowsocks import version
version_str = version.version()
except Exception:
pass
logging.info('ShadowsocksR %s' % version_str)
def find_config():
config_path = 'user-config.json'
if os.path.exists(config_path):
return config_path
config_path = os.path.join(os.path.dirname(__file__), '../', 'user-config.json')
if os.path.exists(config_path):
return config_path
def find_config():
user_config_path = 'user-config.json'
config_path = 'config.json' config_path = 'config.json'
if os.path.exists(config_path):
return config_path
config_path = os.path.join(os.path.dirname(__file__), '../', 'config.json')
if os.path.exists(config_path):
return config_path
return None
def sub_find(file_name):
if os.path.exists(file_name):
return file_name
file_name = os.path.join(os.path.abspath('..'), file_name)
return file_name if os.path.exists(file_name) else None
return sub_find(user_config_path) or sub_find(config_path)
def check_config(config, is_local): def check_config(config, is_local):
if config.get('daemon', None) == 'stop': if config.get('daemon', None) == 'stop':
@ -119,21 +107,21 @@ def check_config(config, is_local):
config['server_port'] = int(config['server_port']) config['server_port'] = int(config['server_port'])
if config.get('local_address', '') in [b'0.0.0.0']: if config.get('local_address', '') in [b'0.0.0.0']:
logging.warn('warning: local set to listen on 0.0.0.0, it\'s not safe') logging.warning('warning: local set to listen on 0.0.0.0, it\'s not safe')
if config.get('server', '') in ['127.0.0.1', 'localhost']: if config.get('server', '') in ['127.0.0.1', 'localhost']:
logging.warn('warning: server set to listen on %s:%s, are you sure?' % logging.warning('warning: server set to listen on %s:%s, are you sure?' %
(to_str(config['server']), config['server_port'])) (to_str(config['server']), config['server_port']))
if (config.get('method', '') or '').lower() == 'table': if (config.get('method', '') or '').lower() == 'table':
logging.warn('warning: table is not safe; please use a safer cipher, ' logging.warning('warning: table is not safe; please use a safer cipher, '
'like AES-256-CFB') 'like AES-256-CFB')
if (config.get('method', '') or '').lower() == 'rc4': if (config.get('method', '') or '').lower() == 'rc4':
logging.warn('warning: RC4 is not safe; please use a safer cipher, ' logging.warning('warning: RC4 is not safe; please use a safer cipher, '
'like AES-256-CFB') 'like AES-256-CFB')
if config.get('timeout', 300) < 100: if config.get('timeout', 300) < 100:
logging.warn('warning: your timeout %d seems too short' % logging.warning('warning: your timeout %d seems too short' %
int(config.get('timeout'))) int(config.get('timeout')))
if config.get('timeout', 300) > 600: if config.get('timeout', 300) > 600:
logging.warn('warning: your timeout %d seems too long' % logging.warning('warning: your timeout %d seems too long' %
int(config.get('timeout'))) int(config.get('timeout')))
if config.get('password') in [b'mypassword']: if config.get('password') in [b'mypassword']:
logging.error('DON\'T USE DEFAULT PASSWORD! Please change it in your ' logging.error('DON\'T USE DEFAULT PASSWORD! Please change it in your '
@ -149,7 +137,8 @@ def check_config(config, is_local):
def get_config(is_local): def get_config(is_local):
global verbose global verbose
config = {}
config_path = None
logging.basicConfig(level=logging.INFO, logging.basicConfig(level=logging.INFO,
format='%(levelname)-s: %(message)s') format='%(levelname)-s: %(message)s')
if is_local: if is_local:
@ -161,11 +150,22 @@ def get_config(is_local):
longopts = ['help', 'fast-open', 'pid-file=', 'log-file=', 'workers=', longopts = ['help', 'fast-open', 'pid-file=', 'log-file=', 'workers=',
'forbidden-ip=', 'user=', 'manager-address=', 'version'] 'forbidden-ip=', 'user=', 'manager-address=', 'version']
try: try:
config_path = find_config()
optlist, args = getopt.getopt(sys.argv[1:], shortopts, longopts) optlist, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
for key, value in optlist: for key, value in optlist:
if key == '-c': if key == '-c':
config_path = value config_path = value
elif key in ('-h', '--help'):
print_help(is_local)
sys.exit(0)
elif key == '--version':
print_shadowsocks()
sys.exit(0)
else:
continue
if config_path is None:
config_path = find_config()
if config_path: if config_path:
logging.info('loading config from %s' % config_path) logging.info('loading config from %s' % config_path)
@ -173,11 +173,9 @@ def get_config(is_local):
try: try:
config = parse_json_in_str(remove_comment(f.read().decode('utf8'))) config = parse_json_in_str(remove_comment(f.read().decode('utf8')))
except ValueError as e: except ValueError as e:
logging.error('found an error in config.json: %s', logging.error('found an error in config.json: %s', str(e))
e.message)
sys.exit(1) sys.exit(1)
else:
config = {}
v_count = 0 v_count = 0
for key, value in optlist: for key, value in optlist:
@ -217,15 +215,7 @@ def get_config(is_local):
config['user'] = to_str(value) config['user'] = to_str(value)
elif key == '--forbidden-ip': elif key == '--forbidden-ip':
config['forbidden_ip'] = to_str(value) config['forbidden_ip'] = to_str(value)
elif key in ('-h', '--help'):
if is_local:
print_local_help()
else:
print_server_help()
sys.exit(0)
elif key == '--version':
print_shadowsocks()
sys.exit(0)
elif key == '-d': elif key == '-d':
config['daemon'] = to_str(value) config['daemon'] = to_str(value)
elif key == '--pid-file': elif key == '--pid-file':
@ -235,6 +225,8 @@ def get_config(is_local):
elif key == '-q': elif key == '-q':
v_count -= 1 v_count -= 1
config['verbose'] = v_count config['verbose'] = v_count
else:
continue
except getopt.GetoptError as e: except getopt.GetoptError as e:
print(e, file=sys.stderr) print(e, file=sys.stderr)
print_help(is_local) print_help(is_local)

Loading…
Cancel
Save