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 %}