From 0c310005937acdf77a6cb5536c270fe576637d64 Mon Sep 17 00:00:00 2001 From: caryoscelus Date: Thu, 21 Dec 2023 10:18:57 +0000 Subject: [PATCH] Use dashes in command line options instead of underscore - using underscore is deprecated but still works - also don't override commandline --open-browser option --- src/Config.py | 169 ++++++++++++++++++++++++++------------------------ 1 file changed, 89 insertions(+), 80 deletions(-) diff --git a/src/Config.py b/src/Config.py index e9cd03a2..fee378d0 100644 --- a/src/Config.py +++ b/src/Config.py @@ -15,7 +15,7 @@ class Config(object): self.version = "0.7.10+" self.user_agent = "conservancy" # DEPRECATED ; replace with git-generated commit - self.rev = 5130 + self.rev = 5140 self.user_agent_rev = 8192 self.argv = argv self.action = None @@ -58,8 +58,8 @@ class Config(object): def getStartDir(self): this_file = os.path.abspath(__file__).replace("\\", "/").rstrip("cd") - if "--start_dir" in self.argv: - start_dir = self.argv[self.argv.index("--start_dir") + 1] + if "--start-dir" in self.argv: + start_dir = self.argv[self.argv.index("--start-dir") + 1] elif this_file.endswith("/Contents/Resources/core/src/Config.py"): # Running as ZeroNet.app if this_file.startswith("/Application") or this_file.startswith("/private") or this_file.startswith(os.path.expanduser("~/Library")): @@ -108,7 +108,7 @@ class Config(object): # SiteCreate action = self.subparsers.add_parser("siteCreate", help='Create a new site') action.register('type', 'bool', self.strToBool) - action.add_argument('--use_master_seed', help="Allow created site's private key to be recovered using the master seed in users.json (default: True)", type="bool", choices=[True, False], default=True) + action.add_argument('--use-master_seed', help="Allow created site's private key to be recovered using the master seed in users.json (default: True)", type="bool", choices=[True, False], default=True) # SiteNeedFile action = self.subparsers.add_parser("siteNeedFile", help='Get a file from site') @@ -123,9 +123,9 @@ class Config(object): action = self.subparsers.add_parser("siteSign", help='Update and sign content.json: address [privatekey]') action.add_argument('address', help='Site to sign') action.add_argument('privatekey', help='Private key (default: ask on execute)', nargs='?') - action.add_argument('--inner_path', help='File you want to sign (default: content.json)', + action.add_argument('--inner-path', help='File you want to sign (default: content.json)', default="content.json", metavar="inner_path") - action.add_argument('--remove_missing_optional', help='Remove optional files that is not present in the directory', action='store_true') + action.add_argument('--remove-missing_optional', help='Remove optional files that is not present in the directory', action='store_true') action.add_argument('--publish', help='Publish site after the signing', action='store_true') # SitePublish @@ -135,10 +135,10 @@ class Config(object): default=None, nargs='?') action.add_argument('peer_port', help='Peer port to publish (default: random peer port from tracker)', default=15441, nargs='?') - action.add_argument('--inner_path', help='Content.json you want to publish (default: content.json)', + action.add_argument('--inner-path', help='Content.json you want to publish (default: content.json)', default="content.json", metavar="inner_path") action.add_argument('--recursive', help="Whether to publish all of site's content.json. " - "Overrides --inner_path. (default: false)", action='store_true', dest='recursive') + "Overrides --inner-path. (default: false)", action='store_true', dest='recursive') # SiteVerify action = self.subparsers.add_parser("siteVerify", help='Verify site files using sha512: address') @@ -211,99 +211,99 @@ class Config(object): self.parser.add_argument('--verbose', help='More detailed logging', action='store_true') self.parser.add_argument('--debug', help='Debug mode', action='store_true') self.parser.add_argument('--silent', help='Only log errors to terminal output', action='store_true') - self.parser.add_argument('--debug_socket', help='Debug socket connections', action='store_true') - self.parser.add_argument('--merge_media', help='Merge all.js and all.css', action='store_true') + self.parser.add_argument('--debug-socket', help='Debug socket connections', action='store_true') + self.parser.add_argument('--merge-media', help='Merge all.js and all.css', action='store_true') self.parser.add_argument('--batch', help="Batch mode (No interactive input for commands)", action='store_true') - self.parser.add_argument('--start_dir', help='Path of working dir for variable content (data, log, .conf)', default=self.start_dir, metavar="path") - self.parser.add_argument('--config_file', help='Path of config file', default=config_file, metavar="path") - self.parser.add_argument('--data_dir', help='Path of data directory', default=data_dir, metavar="path") + self.parser.add_argument('--start-dir', help='Path of working dir for variable content (data, log, .conf)', default=self.start_dir, metavar="path") + self.parser.add_argument('--config-file', help='Path of config file', default=config_file, metavar="path") + self.parser.add_argument('--data-dir', help='Path of data directory', default=data_dir, metavar="path") - self.parser.add_argument('--console_log_level', help='Level of logging to console', default="default", choices=["default", "DEBUG", "INFO", "ERROR", "off"]) + self.parser.add_argument('--console-log-level', help='Level of logging to console', default="default", choices=["default", "DEBUG", "INFO", "ERROR", "off"]) - self.parser.add_argument('--log_dir', help='Path of logging directory', default=log_dir, metavar="path") - self.parser.add_argument('--log_level', help='Level of logging to file', default="DEBUG", choices=["DEBUG", "INFO", "ERROR", "off"]) - self.parser.add_argument('--log_rotate', help='Log rotate interval', default="daily", choices=["hourly", "daily", "weekly", "off"]) - self.parser.add_argument('--log_rotate_backup_count', help='Log rotate backup count', default=5, type=int) + self.parser.add_argument('--log-dir', help='Path of logging directory', default=log_dir, metavar="path") + self.parser.add_argument('--log-level', help='Level of logging to file', default="DEBUG", choices=["DEBUG", "INFO", "ERROR", "off"]) + self.parser.add_argument('--log-rotate', help='Log rotate interval', default="daily", choices=["hourly", "daily", "weekly", "off"]) + self.parser.add_argument('--log-rotate-backup-count', help='Log rotate backup count', default=5, type=int) self.parser.add_argument('--language', help='Web interface language', default=language, metavar='language') - self.parser.add_argument('--ui_ip', help='Web interface bind address', default="127.0.0.1", metavar='ip') - self.parser.add_argument('--ui_port', help='Web interface bind port', default=43110, type=int, metavar='port') - self.parser.add_argument('--ui_site_port', help='Port for serving site content, defaults to ui_port+1', default=None, metavar='port') - self.parser.add_argument('--ui_restrict', help='Restrict web access', default=False, metavar='ip', nargs='*') - self.parser.add_argument('--ui_host', help='Allow access using this hosts', metavar='host', nargs='*') - self.parser.add_argument('--ui_trans_proxy', help='Allow access using a transparent proxy', action='store_true') + self.parser.add_argument('--ui-ip', help='Web interface bind address', default="127.0.0.1", metavar='ip') + self.parser.add_argument('--ui-port', help='Web interface bind port', default=43110, type=int, metavar='port') + self.parser.add_argument('--ui-site-port', help='Port for serving site content, defaults to ui_port+1', default=None, metavar='port') + self.parser.add_argument('--ui-restrict', help='Restrict web access', default=False, metavar='ip', nargs='*') + self.parser.add_argument('--ui-host', help='Allow access using this hosts', metavar='host', nargs='*') + self.parser.add_argument('--ui-trans-proxy', help='Allow access using a transparent proxy', action='store_true') - self.parser.add_argument('--open_browser', help='Open homepage in web browser automatically', + self.parser.add_argument('--open-browser', help='Open homepage in web browser automatically', nargs='?', const="default_browser", metavar='browser_name') self.parser.add_argument('--homepage', help='Web interface Homepage', default='191CazMVNaAcT9Y1zhkxd9ixMBPs59g2um', metavar='address') # self.parser.add_argument('--updatesite', help='Source code update site', default='1uPDaT3uSyWAPdCv1WkMb5hBQjWSNNACf', # metavar='address') - self.parser.add_argument('--admin_pages', help='Pages with admin privileges', default=[], metavar='address', nargs='*') - self.parser.add_argument('--dist_type', help='Type of installed distribution', default='source') + self.parser.add_argument('--admin-pages', help='Pages with admin privileges', default=[], metavar='address', nargs='*') + self.parser.add_argument('--dist-type', help='Type of installed distribution', default='source') - self.parser.add_argument('--size_limit', help='Default site size limit in MB', default=10, type=int, metavar='limit') - self.parser.add_argument('--file_size_limit', help='Maximum per file size limit in MB', default=10, type=int, metavar='limit') - self.parser.add_argument('--connected_limit', help='Max connected peer per site', default=8, type=int, metavar='connected_limit') - self.parser.add_argument('--global_connected_limit', help='Max connections', default=512, type=int, metavar='global_connected_limit') + self.parser.add_argument('--size-limit', help='Default site size limit in MB', default=10, type=int, metavar='limit') + self.parser.add_argument('--file-size-limit', help='Maximum per file size limit in MB', default=10, type=int, metavar='limit') + self.parser.add_argument('--connected-limit', help='Max connected peer per site', default=8, type=int, metavar='connected_limit') + self.parser.add_argument('--global-connected-limit', help='Max connections', default=512, type=int, metavar='global_connected_limit') self.parser.add_argument('--workers', help='Download workers per site', default=5, type=int, metavar='workers') - self.parser.add_argument('--fileserver_ip', help='FileServer bind address', default="*", metavar='ip') - self.parser.add_argument('--fileserver_port', help='FileServer bind port (0: randomize)', default=0, type=int, metavar='port') - self.parser.add_argument('--fileserver_port_range', help='FileServer randomization range', default="10000-40000", metavar='port') - self.parser.add_argument('--fileserver_ip_type', help='FileServer ip type', default="dual", choices=["ipv4", "ipv6", "dual"]) - self.parser.add_argument('--ip_local', help='My local ips', default=ip_local, type=int, metavar='ip', nargs='*') - self.parser.add_argument('--ip_external', help='Set reported external ip (tested on start if None)', metavar='ip', nargs='*') + self.parser.add_argument('--fileserver-ip', help='FileServer bind address', default="*", metavar='ip') + self.parser.add_argument('--fileserver-port', help='FileServer bind port (0: randomize)', default=0, type=int, metavar='port') + self.parser.add_argument('--fileserver-port-range', help='FileServer randomization range', default="10000-40000", metavar='port') + self.parser.add_argument('--fileserver-ip-type', help='FileServer ip type', default="dual", choices=["ipv4", "ipv6", "dual"]) + self.parser.add_argument('--ip-local', help='My local ips', default=ip_local, type=int, metavar='ip', nargs='*') + self.parser.add_argument('--ip-external', help='Set reported external ip (tested on start if None)', metavar='ip', nargs='*') self.parser.add_argument('--offline', help='Disable network communication', action='store_true') - self.parser.add_argument('--disable_port_check', help='Disable checking port', action='store_true') + self.parser.add_argument('--disable-port-check', help='Disable checking port', action='store_true') - self.parser.add_argument('--disable_udp', help='Disable UDP connections', action='store_true') + self.parser.add_argument('--disable-udp', help='Disable UDP connections', action='store_true') self.parser.add_argument('--proxy', help='Socks proxy address', metavar='ip:port') self.parser.add_argument('--bind', help='Bind outgoing sockets to this address', metavar='ip') - self.parser.add_argument('--bootstrap_url', help='URL of file with link to bootstrap bundle', default='https://raw.githubusercontent.com/zeronet-conservancy/zeronet-conservancy/master/bootstrap.url', type=str) - self.parser.add_argument('--disable_bootstrap', help='Disable downloading bootstrap information from clearnet', action='store_true') + self.parser.add_argument('--bootstrap-url', help='URL of file with link to bootstrap bundle', default='https://raw.githubusercontent.com/zeronet-conservancy/zeronet-conservancy/master/bootstrap.url', type=str) + self.parser.add_argument('--disable-bootstrap', help='Disable downloading bootstrap information from clearnet', action='store_true') self.parser.add_argument('--trackers', help='Bootstraping torrent trackers', default=[], metavar='protocol://address', nargs='*') - self.parser.add_argument('--trackers_file', help='Load torrent trackers dynamically from a file', default=['{data_dir}/15CEFKBRHFfAP9rmL6hhLmHoXrrgmw4B5o/cache/1/Syncronite.html'], metavar='path', nargs='*') - self.parser.add_argument('--trackers_proxy', help='Force use proxy to connect to trackers (disable, tor, ip:port)', default="disable") - self.parser.add_argument('--use_libsecp256k1', help='Use Libsecp256k1 liblary for speedup', type='bool', choices=[True, False], default=True) - self.parser.add_argument('--use_openssl', help='Use OpenSSL liblary for speedup', type='bool', choices=[True, False], default=True) - self.parser.add_argument('--openssl_lib_file', help='Path for OpenSSL library file (default: detect)', default=argparse.SUPPRESS, metavar="path") - self.parser.add_argument('--openssl_bin_file', help='Path for OpenSSL binary file (default: detect)', default=argparse.SUPPRESS, metavar="path") - self.parser.add_argument('--disable_db', help='Disable database updating', action='store_true') - self.parser.add_argument('--disable_encryption', help='Disable connection encryption', action='store_true') - self.parser.add_argument('--force_encryption', help="Enforce encryption to all peer connections", action='store_true') - self.parser.add_argument('--disable_sslcompression', help='Disable SSL compression to save memory', + self.parser.add_argument('--trackers-file', help='Load torrent trackers dynamically from a file (using Syncronite by default)', default=['{data_dir}/15CEFKBRHFfAP9rmL6hhLmHoXrrgmw4B5o/cache/1/Syncronite.html'], metavar='path', nargs='*') + self.parser.add_argument('--trackers-proxy', help='Force use proxy to connect to trackers (disable, tor, ip:port)', default="disable") + self.parser.add_argument('--use-libsecp256k1', help='Use Libsecp256k1 liblary for speedup', type='bool', choices=[True, False], default=True) + self.parser.add_argument('--use-openssl', help='Use OpenSSL liblary for speedup', type='bool', choices=[True, False], default=True) + self.parser.add_argument('--openssl-lib-file', help='Path for OpenSSL library file (default: detect)', default=argparse.SUPPRESS, metavar="path") + self.parser.add_argument('--openssl-bin-file', help='Path for OpenSSL binary file (default: detect)', default=argparse.SUPPRESS, metavar="path") + self.parser.add_argument('--disable-db', help='Disable database updating', action='store_true') + self.parser.add_argument('--disable-encryption', help='Disable connection encryption', action='store_true') + self.parser.add_argument('--force-encryption', help="Enforce encryption to all peer connections", action='store_true') + self.parser.add_argument('--disable-sslcompression', help='Disable SSL compression to save memory', type='bool', choices=[True, False], default=True) - self.parser.add_argument('--keep_ssl_cert', help='Disable new SSL cert generation on startup', action='store_true') - self.parser.add_argument('--max_files_opened', help='Change maximum opened files allowed by OS to this value on startup', + self.parser.add_argument('--keep-ssl-cert', help='Disable new SSL cert generation on startup', action='store_true') + self.parser.add_argument('--max-files-opened', help='Change maximum opened files allowed by OS to this value on startup', default=2048, type=int, metavar='limit') - self.parser.add_argument('--stack_size', help='Change thread stack size', default=None, type=int, metavar='thread_stack_size') - self.parser.add_argument('--use_tempfiles', help='Use temporary files when downloading (experimental)', + self.parser.add_argument('--stack-size', help='Change thread stack size', default=None, type=int, metavar='thread_stack_size') + self.parser.add_argument('--use-tempfiles', help='Use temporary files when downloading (experimental)', type='bool', choices=[True, False], default=False) - self.parser.add_argument('--stream_downloads', help='Stream download directly to files (experimental)', + self.parser.add_argument('--stream-downloads', help='Stream download directly to files (experimental)', type='bool', choices=[True, False], default=False) - self.parser.add_argument("--msgpack_purepython", help='Use less memory, but a bit more CPU power', + self.parser.add_argument('--msgpack-purepython', help='Use less memory, but a bit more CPU power', type='bool', choices=[True, False], default=False) - self.parser.add_argument("--fix_float_decimals", help='Fix content.json modification date float precision on verification', + self.parser.add_argument('--fix-float-decimals', help='Fix content.json modification date float precision on verification', type='bool', choices=[True, False], default=fix_float_decimals) - self.parser.add_argument("--db_mode", choices=["speed", "security"], default="speed") + self.parser.add_argument('--db-mode', choices=["speed", "security"], default="speed") - self.parser.add_argument('--threads_fs_read', help='Number of threads for file read operations', default=1, type=int) - self.parser.add_argument('--threads_fs_write', help='Number of threads for file write operations', default=1, type=int) - self.parser.add_argument('--threads_crypt', help='Number of threads for cryptographic operations', default=2, type=int) - self.parser.add_argument('--threads_db', help='Number of threads for database operations', default=1, type=int) + self.parser.add_argument('--threads-fs-read', help='Number of threads for file read operations', default=1, type=int) + self.parser.add_argument('--threads-fs-write', help='Number of threads for file write operations', default=1, type=int) + self.parser.add_argument('--threads-crypt', help='Number of threads for cryptographic operations', default=2, type=int) + self.parser.add_argument('--threads-db', help='Number of threads for database operations', default=1, type=int) - self.parser.add_argument("--download_optional", choices=["manual", "auto"], default="manual") + self.parser.add_argument('--download-optional', choices=["manual", "auto"], default="manual") self.parser.add_argument('--tor', help='enable: Use only for Tor peers, always: Use Tor for every connection', choices=["disable", "enable", "always"], default='enable') - self.parser.add_argument('--tor_controller', help='Tor controller address', metavar='ip:port', default='127.0.0.1:9051') - self.parser.add_argument('--tor_proxy', help='Tor proxy address', metavar='ip:port', default='127.0.0.1:9050') - self.parser.add_argument('--tor_password', help='Tor controller password', metavar='password') - self.parser.add_argument('--tor_use_bridges', help='Use obfuscated bridge relays to avoid Tor block', action='store_true') - self.parser.add_argument('--tor_hs_limit', help='Maximum number of hidden services in Tor always mode', metavar='limit', type=int, default=10) - self.parser.add_argument('--tor_hs_port', help='Hidden service port in Tor always mode', metavar='limit', type=int, default=15441) + self.parser.add_argument('--tor-controller', help='Tor controller address', metavar='ip:port', default='127.0.0.1:9051') + self.parser.add_argument('--tor-proxy', help='Tor proxy address', metavar='ip:port', default='127.0.0.1:9050') + self.parser.add_argument('--tor-password', help='Tor controller password', metavar='password') + self.parser.add_argument('--tor-use-bridges', help='Use obfuscated bridge relays to avoid Tor block', action='store_true') + self.parser.add_argument('--tor-hs-limit', help='Maximum number of hidden services in Tor always mode', metavar='limit', type=int, default=10) + self.parser.add_argument('--tor-hs-port', help='Hidden service port in Tor always mode', metavar='limit', type=int, default=15441) self.parser.add_argument('--repl', help='Instead of printing logs in console, drop into REPL after initialization', action='store_true') self.parser.add_argument('--version', action='version', version=f'zeronet-conservancy {self.version} r{self.rev}') @@ -414,8 +414,21 @@ class Config(object): self.loadTrackersFile() - # Parse command line arguments + def fixArgs(self, args): + "Fix old-style flags and issue a warning" + res = [] + for arg in args: + if arg.startswith('--') and '_' in arg: + farg = arg.replace('_', '-') + print(f'WARNING: using deprecated flag in command line: {arg} should be {farg}') + print('Support for deprecated flags might be removed in the future') + else: + farg = arg + res.append(farg) + return res + def parseCommandline(self, argv, silent=False): + argv = self.fixArgs(argv) # Find out if action is specificed on start action = self.getAction(argv) if not action: @@ -434,11 +447,11 @@ class Config(object): if self.arguments.ui_site_port is None: self.arguments.ui_site_port = self.arguments.ui_port + 1 - # Parse config file def parseConfig(self, argv): + argv = self.fixArgs(argv) # Find config file path from parameters - if "--config_file" in argv: - self.config_file = argv[argv.index("--config_file") + 1] + if "--config-file" in argv: + self.config_file = argv[argv.index("--config-file") + 1] # Load config file if os.path.isfile(self.config_file): config = configparser.RawConfigParser(allow_no_value=True, strict=False) @@ -449,13 +462,9 @@ class Config(object): val = None if section != "global": # If not global prefix key with section key = section + "_" + key + key = key.replace('_', '-') - if key == "open_browser": # Prefer config file value over cli argument - while "--%s" % key in argv: - pos = argv.index("--open_browser") - del argv[pos:pos + 2] - - argv_extend = ["--%s" % key] + argv_extend = [f'--{key}'] if val: for line in val.strip().split("\n"): # Allow multi-line values argv_extend.append(line)