fix some location-rproxy bugs

This commit is contained in:
ed 2023-01-19 22:26:24 +00:00
parent f4f362b7a4
commit 664665b86b
2 changed files with 15 additions and 9 deletions

View file

@ -125,6 +125,7 @@ class HttpCli(object):
self.mode = " " self.mode = " "
self.req = " " self.req = " "
self.http_ver = " " self.http_ver = " "
self.host = " "
self.ua = " " self.ua = " "
self.is_rclone = False self.is_rclone = False
self.is_ancient = False self.is_ancient = False
@ -261,6 +262,9 @@ class HttpCli(object):
self.is_https = ( self.is_https = (
self.headers.get("x-forwarded-proto", "").lower() == "https" or self.tls self.headers.get("x-forwarded-proto", "").lower() == "https" or self.tls
) )
self.host = self.headers.get("host") or "{}:{}".format(
*list(self.s.getsockname()[:2])
)
n = self.args.rproxy n = self.args.rproxy
if n: if n:
@ -279,6 +283,7 @@ class HttpCli(object):
self.log_src = self.conn.set_rproxy(self.ip) self.log_src = self.conn.set_rproxy(self.ip)
self.is_vproxied = bool(self.args.R) self.is_vproxied = bool(self.args.R)
self.host = self.headers.get("x-forwarded-host") or self.host
if self.is_banned(): if self.is_banned():
return False return False
@ -835,7 +840,7 @@ class HttpCli(object):
raise Pebkac(404) raise Pebkac(404)
fgen = itertools.chain([topdir], fgen) # type: ignore fgen = itertools.chain([topdir], fgen) # type: ignore
vtop = vjoin(vn.vpath, rem) vtop = vjoin(self.args.R, vjoin(vn.vpath, rem))
chunksz = 0x7FF8 # preferred by nginx or cf (dunno which) chunksz = 0x7FF8 # preferred by nginx or cf (dunno which)
@ -935,7 +940,7 @@ class HttpCli(object):
el = xroot.find(r"./{DAV:}response") el = xroot.find(r"./{DAV:}response")
assert el assert el
e2 = mktnod("D:href", quotep("/" + self.vpath)) e2 = mktnod("D:href", quotep(self.args.SRS + self.vpath))
el.insert(0, e2) el.insert(0, e2)
el = xroot.find(r"./{DAV:}response/{DAV:}propstat") el = xroot.find(r"./{DAV:}response/{DAV:}propstat")
@ -990,7 +995,9 @@ class HttpCli(object):
lk.append(mkenod("D:timeout", mktnod("D:href", "Second-3310"))) lk.append(mkenod("D:timeout", mktnod("D:href", "Second-3310")))
lk.append(mkenod("D:locktoken", mktnod("D:href", uuid.uuid4().urn))) lk.append(mkenod("D:locktoken", mktnod("D:href", uuid.uuid4().urn)))
lk.append(mkenod("D:lockroot", mktnod("D:href", "/" + quotep(self.vpath)))) lk.append(
mkenod("D:lockroot", mktnod("D:href", quotep(self.args.SRS + self.vpath)))
)
lk2 = mkenod("D:activelock") lk2 = mkenod("D:activelock")
xroot = mkenod("D:prop", mkenod("D:lockdiscovery", lk2)) xroot = mkenod("D:prop", mkenod("D:lockdiscovery", lk2))
@ -1389,7 +1396,7 @@ class HttpCli(object):
url = "{}://{}/{}".format( url = "{}://{}/{}".format(
"https" if self.is_https else "http", "https" if self.is_https else "http",
self.headers.get("host") or "{}:{}".format(*list(self.s.getsockname()[:2])), self.host,
self.args.RS + vpath + vsuf, self.args.RS + vpath + vsuf,
) )
@ -2069,8 +2076,7 @@ class HttpCli(object):
jpart = { jpart = {
"url": "{}://{}/{}".format( "url": "{}://{}/{}".format(
"https" if self.is_https else "http", "https" if self.is_https else "http",
self.headers.get("host") self.host,
or "{}:{}".format(*list(self.s.getsockname()[:2])),
rel_url, rel_url,
), ),
"sha512": sha_hex[:56], "sha512": sha_hex[:56],
@ -2451,7 +2457,7 @@ class HttpCli(object):
if fn: if fn:
fn = fn.rstrip("/").split("/")[-1] fn = fn.rstrip("/").split("/")[-1]
else: else:
fn = self.headers.get("host", "hey") fn = self.host.split(":")[0]
safe = (string.ascii_letters + string.digits).replace("%", "") safe = (string.ascii_letters + string.digits).replace("%", "")
afn = "".join([x if x in safe.replace('"', "") else "_" for x in fn]) afn = "".join([x if x in safe.replace('"', "") else "_" for x in fn])
@ -2606,7 +2612,7 @@ class HttpCli(object):
def tx_svcs(self) -> bool: def tx_svcs(self) -> bool:
aname = re.sub("[^0-9a-zA-Z]+", "", self.args.name) or "a" aname = re.sub("[^0-9a-zA-Z]+", "", self.args.name) or "a"
ep = self.headers["host"] ep = self.host
host = ep.split(":")[0] host = ep.split(":")[0]
hport = ep[ep.find(":") :] if ":" in ep else "" hport = ep[ep.find(":") :] if ":" in ep else ""
rip = ( rip = (

View file

@ -15,7 +15,7 @@
<body> <body>
<div id="wrap" class="w"> <div id="wrap" class="w">
<div class="cn"> <div class="cn">
<p class="btns"><a href="{{ rvp }}">browse files</a> // <a href="{{ r }}/?h">control panel</a></p> <p class="btns"><a href="/{{ rvp }}">browse files</a> // <a href="{{ r }}/?h">control panel</a></p>
<p>or choose your OS for cooler alternatives:</p> <p>or choose your OS for cooler alternatives:</p>
<div class="ossel"> <div class="ossel">
<a id="swin" href="#">Windows</a> <a id="swin" href="#">Windows</a>