diff --git a/copyparty/__main__.py b/copyparty/__main__.py index 5c85a5b2..16c345d2 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -1216,7 +1216,7 @@ def add_general(ap, nc, srvname): ap2.add_argument("--name-url", metavar="TXT", type=u, help="URL for server name hyperlink (displayed topleft in browser)") ap2.add_argument("--name-html", type=u, help=argparse.SUPPRESS) ap2.add_argument("--site", metavar="URL", type=u, default="", help="public URL to assume when creating links; example: [\033[32mhttps://example.com/\033[0m]") - ap2.add_argument("--env-expand", metavar="N", type=int, default=-1, help="syntax to expect for environment-variables to expand in config-files; [\033[32m0\033[0m]=disable, [\033[32m1\033[0m]=$VAR (old syntax (scary)), [\033[32m2\033[0m]=${VAR} (new syntax (recommended))") + ap2.add_argument("--env-expand", metavar="N", type=int, default=-1, help="expand environment-variables in config-files? [\033[32m0\033[0m]=no, [\033[32m1\033[0m]=$VAR (old scary syntax), [\033[32m2\033[0m]=${VAR} (new recommended syntax); default is new-syntax with panic if old-syntax is seen") ap2.add_argument("--mime", metavar="EXT=MIME", type=u, action="append", help="\033[34mREPEATABLE:\033[0m map file \033[33mEXT\033[0mension to \033[33mMIME\033[0mtype, for example [\033[32mjpg=image/jpeg\033[0m]") ap2.add_argument("--mimes", action="store_true", help="list default mimetype mapping and exit") ap2.add_argument("--rmagic", action="store_true", help="do expensive analysis to improve accuracy of returned mimetypes; will make file-downloads, rss, and webdav slower (volflag=rmagic)") @@ -1588,10 +1588,10 @@ def add_stats(ap): def add_yolo(ap): ap2 = ap.add_argument_group("yolo options") - ap2.add_argument("--allow-csrf", action="store_true", help="disable csrf protections; let other domains/sites impersonate you through cross-site requests") + ap2.add_argument("--allow-csrf", action="store_true", help="disable csrf protections; let other domains/sites impersonate you through cross-site requests; \033[1;31mDANGEROUS\033[0m / LAN-only") ap2.add_argument("--cookie-lax", action="store_true", help="allow cookies from other domains (if you follow a link from another website into your server, you will arrive logged-in); this reduces protection against CSRF") ap2.add_argument("--no-fnugg", action="store_true", help="disable the smoketest for caching-related issues in the web-UI") - ap2.add_argument("--getmod", action="store_true", help="permit ?move=[...] and ?delete as GET") + ap2.add_argument("--getmod", action="store_true", help="permit ?move=[...] and ?delete as GET -- \033[1;31mDANGEROUS\033[0m, removes csrf protection") ap2.add_argument("--wo-up-readme", action="store_true", help="allow users with write-only access to upload logues and readmes without adding the _wo_ filename prefix (volflag=wo_up_readme)") ap2.add_argument("--unsafe-state", action="store_true", help="when one of the emergency fallback locations are used for runtime state ($TMPDIR, /tmp), certain features will be force-disabled for security reasons by default. This option overrides that safeguard and allows unsafe storage of secrets") diff --git a/copyparty/svchub.py b/copyparty/svchub.py index 5f7441c3..c23faa33 100644 --- a/copyparty/svchub.py +++ b/copyparty/svchub.py @@ -57,6 +57,7 @@ from .util import ( HAVE_PSUTIL, HAVE_SQLITE3, HAVE_ZMQ, + LOG, RE_ANSI, URL_BUG, UTC, @@ -216,6 +217,8 @@ class SvcHub(object): lg.handlers = [lh] lg.setLevel(logging.DEBUG) + LOG[:] = [self.log] + self._check_env() if args.stackmon: diff --git a/copyparty/util.py b/copyparty/util.py index c8a8dfc1..c10f8d82 100644 --- a/copyparty/util.py +++ b/copyparty/util.py @@ -62,6 +62,9 @@ def noop(*a, **ka): pass +LOG = [print] + + try: from datetime import datetime, timezone @@ -788,7 +791,7 @@ def read_utf8(log: Optional["NamedLogger"], ap: Union[str, bytes], strict: bool) if log: log(t, 3) else: - print(t) + LOG[0]("#", t) return buf.decode("utf-8", "replace") t = "ERROR: The file [%s] is not using the UTF-8 character encoding, and cannot be loaded. The first unreadable character was byte %r at offset %d. Please convert this file to UTF-8 by opening the file in your text-editor and saving it as UTF-8." @@ -796,7 +799,7 @@ def read_utf8(log: Optional["NamedLogger"], ap: Union[str, bytes], strict: bool) if log: log(t, 3) else: - print(t) + LOG[0]("#", t) raise NotUTF8(t) @@ -1573,12 +1576,18 @@ def _expand_osenv_c(txt) -> str: ret = zsl[0] for v in zsl[1:]: if "}" not in v: - raise Exception("missing '}' after %r in config-value %r" % (v, txt)) + t = "missing '}' after %r in config-value %r" % (v, txt) + LOG[0]("ERROR:", t) + raise Exception(t) a, b = v.split("}", 1) try: ret += os.environ[a] + b + continue except: - raise Exception("env-var %r not defined; config-value %r" % (a, txt)) + pass + t = "env-var %r not defined; config-value %r" % (a, txt) + LOG[0]("ERROR:", t) + raise Exception(t) return ret