override domain for shares (closes #1211);

`shr-site` will override the scheme and domain (https://example.com/)
in the link to a newly created share, making it possible to create a
share from a LAN IP while obtaining an external URL in return

---------

Co-authored-by: mechabubba <stevenvanniisprettycool@gmail.com>
This commit is contained in:
ed 2026-01-17 23:58:57 +00:00
parent ffb2560322
commit 41d3bae929
5 changed files with 41 additions and 10 deletions

View file

@ -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")

View file

@ -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())

View file

@ -6170,8 +6170,20 @@ class HttpCli(object):
zsl = [html_escape(zst[0]) for zst in zstl]
r[4] = "<br />".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

View file

@ -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)

View file

@ -40,7 +40,7 @@
{%- for k, pw, vp, pr, st, un, t0, t1 in rows %}
<tr>
<td>
<a href="{{ r }}{{ shr }}{{ k }}?qr">qr</a>
<a href="{{ site }}{{ shr }}{{ k }}?qr">qr</a>
<a href="{{ r }}{{ shr }}{{ k }}">{{ k }}</a>
</td>
<td><a href="#" k="{{ k }}">delete</a></td>