mirror of
https://github.com/9001/copyparty.git
synced 2026-02-26 13:33:09 -07:00
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:
parent
ffb2560322
commit
41d3bae929
|
|
@ -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", 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-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("--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("--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("--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)")
|
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-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-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-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")
|
ap2.add_argument("--shr-v", action="store_true", help="debug")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3181,6 +3181,11 @@ class AuthSrv(object):
|
||||||
for zs in zs.split():
|
for zs in zs.split():
|
||||||
if getattr(self.args, zs, False):
|
if getattr(self.args, zs, False):
|
||||||
js_htm[zs] = 1
|
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))
|
vn.js_htm = json_hesc(json.dumps(js_htm))
|
||||||
|
|
||||||
vols = list(vfs.all_nodes.values())
|
vols = list(vfs.all_nodes.values())
|
||||||
|
|
|
||||||
|
|
@ -6170,8 +6170,20 @@ class HttpCli(object):
|
||||||
zsl = [html_escape(zst[0]) for zst in zstl]
|
zsl = [html_escape(zst[0]) for zst in zstl]
|
||||||
r[4] = "<br />".join(zsl)
|
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(
|
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)
|
self.reply(html.encode("utf-8"), status=200)
|
||||||
return True
|
return True
|
||||||
|
|
@ -6326,14 +6338,22 @@ class HttpCli(object):
|
||||||
fn = quotep(fns[0]) if len(fns) == 1 else ""
|
fn = quotep(fns[0]) if len(fns) == 1 else ""
|
||||||
|
|
||||||
# NOTE: several clients (frontend, party-up) expect url at response[15:]
|
# NOTE: several clients (frontend, party-up) expect url at response[15:]
|
||||||
surl = "created share: %s://%s%s%s%s/%s" % (
|
if self.args.shr_site:
|
||||||
"https" if self.is_https else "http",
|
surl = "created share: %s%s%s/%s" % (
|
||||||
self.host,
|
self.args.shr_site,
|
||||||
self.args.SR,
|
self.args.shr[1:],
|
||||||
self.args.shr,
|
skey,
|
||||||
skey,
|
fn,
|
||||||
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)
|
self.loud_reply(surl, status=201)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -315,6 +315,10 @@ class SvcHub(object):
|
||||||
args.doctitle = args.doctitle.replace("--name", args.vname)
|
args.doctitle = args.doctitle.replace("--name", args.vname)
|
||||||
args.bname = args.bname.replace("--name", args.vname) or 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:
|
if args.log_fk:
|
||||||
args.log_fk = re.compile(args.log_fk)
|
args.log_fk = re.compile(args.log_fk)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
{%- for k, pw, vp, pr, st, un, t0, t1 in rows %}
|
{%- for k, pw, vp, pr, st, un, t0, t1 in rows %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ r }}{{ shr }}{{ k }}?qr">qr</a>
|
<a href="{{ site }}{{ shr }}{{ k }}?qr">qr</a>
|
||||||
<a href="{{ r }}{{ shr }}{{ k }}">{{ k }}</a>
|
<a href="{{ r }}{{ shr }}{{ k }}">{{ k }}</a>
|
||||||
</td>
|
</td>
|
||||||
<td><a href="#" k="{{ k }}">delete</a></td>
|
<td><a href="#" k="{{ k }}">delete</a></td>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue