diff --git a/copyparty/__main__.py b/copyparty/__main__.py index 1cf04745..efc8ecb4 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -1173,6 +1173,7 @@ def add_general(ap, nc, srvname): ap2.add_argument("--name", metavar="TXT", type=u, default=srvname, help="server name (displayed topleft in browser and in mDNS)") 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("--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)") @@ -1220,6 +1221,7 @@ def add_share(ap): ap2.add_argument("--shr-who", metavar="TXT", type=u, default="auth", help="who can create a share? [\033[32mno\033[0m]=nobody, [\033[32ma\033[0m]=admin-permission, [\033[32mauth\033[0m]=authenticated (volflag=shr_who)") ap2.add_argument("--shr-adm", metavar="U,U", type=u, default="", help="comma-separated list of users allowed to view/delete any share") ap2.add_argument("--shr-rt", metavar="MIN", type=int, default=1440, help="shares can be revived by their owner if they expired less than MIN minutes ago; [\033[32m60\033[0m]=hour, [\033[32m1440\033[0m]=day, [\033[32m10080\033[0m]=week") + ap2.add_argument("--shr-site", metavar="URL", type=u, default="--site", help="public URL to assume when creating share-links; example: [\033[32mhttps://example.com/\033[0m]") ap2.add_argument("--shr-v", action="store_true", help="debug") diff --git a/copyparty/authsrv.py b/copyparty/authsrv.py index 7088682f..3975f675 100644 --- a/copyparty/authsrv.py +++ b/copyparty/authsrv.py @@ -3181,6 +3181,11 @@ class AuthSrv(object): for zs in zs.split(): if getattr(self.args, zs, False): js_htm[zs] = 1 + zs = "up_site" + for zs in zs.split(): + zs2 = getattr(self.args, zs, "") + if zs2: + js_htm[zs] = zs2 vn.js_htm = json_hesc(json.dumps(js_htm)) vols = list(vfs.all_nodes.values()) diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index 01a073f8..b5098830 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -6170,8 +6170,20 @@ class HttpCli(object): zsl = [html_escape(zst[0]) for zst in zstl] r[4] = "
".join(zsl) + if self.args.shr_site: + site = self.args.shr_site[:-1] + elif self.is_vproxied: + site = self.args.SR + else: + site = "" + html = self.j2s( - "shares", this=self, shr=self.args.shr, rows=rows, now=int(time.time()) + "shares", + this=self, + shr=self.args.shr, + site=site, + rows=rows, + now=int(time.time()), ) self.reply(html.encode("utf-8"), status=200) return True @@ -6326,14 +6338,22 @@ class HttpCli(object): fn = quotep(fns[0]) if len(fns) == 1 else "" # NOTE: several clients (frontend, party-up) expect url at response[15:] - surl = "created share: %s://%s%s%s%s/%s" % ( - "https" if self.is_https else "http", - self.host, - self.args.SR, - self.args.shr, - skey, - fn, - ) + if self.args.shr_site: + surl = "created share: %s%s%s/%s" % ( + self.args.shr_site, + self.args.shr[1:], + skey, + fn, + ) + else: + surl = "created share: %s://%s%s%s%s/%s" % ( + "https" if self.is_https else "http", + self.host, + self.args.SR, + self.args.shr, + skey, + fn, + ) self.loud_reply(surl, status=201) return True diff --git a/copyparty/svchub.py b/copyparty/svchub.py index a66848b1..d919d9f2 100644 --- a/copyparty/svchub.py +++ b/copyparty/svchub.py @@ -315,6 +315,10 @@ class SvcHub(object): args.doctitle = args.doctitle.replace("--name", args.vname) args.bname = args.bname.replace("--name", args.vname) or args.vname + for zs in ("shr_site",): + if getattr(args, zs) == "--site": + setattr(args, zs, args.site) + if args.log_fk: args.log_fk = re.compile(args.log_fk) diff --git a/copyparty/web/shares.html b/copyparty/web/shares.html index c7da235e..551a3281 100644 --- a/copyparty/web/shares.html +++ b/copyparty/web/shares.html @@ -40,7 +40,7 @@ {%- for k, pw, vp, pr, st, un, t0, t1 in rows %} - qr + qr {{ k }} delete