Continuing previous commit: --ui_site_port

This commit is contained in:
caryoscelus 2023-12-07 09:56:01 +00:00
parent a4cc2eeb9f
commit f37ab4ee5d
No known key found for this signature in database
GPG key ID: 254EDDB85B66CB1F
3 changed files with 22 additions and 6 deletions

View file

@ -230,6 +230,7 @@ class Config(object):
self.parser.add_argument('--language', help='Web interface language', default=language, metavar='language') self.parser.add_argument('--language', help='Web interface language', default=language, metavar='language')
self.parser.add_argument('--ui_ip', help='Web interface bind address', default="127.0.0.1", metavar='ip') self.parser.add_argument('--ui_ip', help='Web interface bind address', default="127.0.0.1", metavar='ip')
self.parser.add_argument('--ui_port', help='Web interface bind port', default=43110, type=int, metavar='port') self.parser.add_argument('--ui_port', help='Web interface bind port', default=43110, type=int, metavar='port')
self.parser.add_argument('--ui_site_port', help='Port for serving site content, defaults to ui_port+1', default=None, metavar='port')
self.parser.add_argument('--ui_restrict', help='Restrict web access', default=False, metavar='ip', nargs='*') self.parser.add_argument('--ui_restrict', help='Restrict web access', default=False, metavar='ip', nargs='*')
self.parser.add_argument('--ui_host', help='Allow access using this hosts', metavar='host', nargs='*') self.parser.add_argument('--ui_host', help='Allow access using this hosts', metavar='host', nargs='*')
self.parser.add_argument('--ui_trans_proxy', help='Allow access using a transparent proxy', action='store_true') self.parser.add_argument('--ui_trans_proxy', help='Allow access using a transparent proxy', action='store_true')
@ -430,6 +431,8 @@ class Config(object):
self.arguments = {} self.arguments = {}
else: else:
self.arguments = self.parser.parse_args(argv[1:]) self.arguments = self.parser.parse_args(argv[1:])
if self.arguments.ui_site_port is None:
self.arguments.ui_site_port = self.arguments.ui_port + 1
# Parse config file # Parse config file
def parseConfig(self, argv): def parseConfig(self, argv):

View file

@ -147,12 +147,11 @@ class UiRequest:
is_iframe = self.env.get('HTTP_SEC_FETCH_DEST') == 'iframe' is_iframe = self.env.get('HTTP_SEC_FETCH_DEST') == 'iframe'
if is_navigate and not is_iframe and self.is_data_request: if is_navigate and not is_iframe and self.is_data_request:
# remove port from host host = self.getHostWithoutPort()
host = ':'.join(self.env['HTTP_HOST'].split(':')[:-1])
path_info = self.env['PATH_INFO'] path_info = self.env['PATH_INFO']
query_string = self.env['QUERY_STRING'] query_string = self.env['QUERY_STRING']
protocol = self.env['wsgi.url_scheme'] protocol = self.env['wsgi.url_scheme']
return self.actionRedirect(f'{protocol}://{host}:43110{path_info}?{query_string}') return self.actionRedirect(f'{protocol}://{host}:{config.ui_port}{path_info}?{query_string}')
if self.isCrossOriginRequest(): if self.isCrossOriginRequest():
# we are still exposed by answering on port # we are still exposed by answering on port
@ -360,7 +359,14 @@ class UiRequest:
if noscript: if noscript:
headers["Content-Security-Policy"] = "default-src 'none'; sandbox allow-top-navigation allow-forms; img-src *; font-src * data:; media-src *; style-src * 'unsafe-inline';" headers["Content-Security-Policy"] = "default-src 'none'; sandbox allow-top-navigation allow-forms; img-src *; font-src * data:; media-src *; style-src * 'unsafe-inline';"
elif script_nonce: elif script_nonce:
headers["Content-Security-Policy"] = f"default-src 'none'; script-src 'nonce-{script_nonce}'; img-src 'self' blob: data:; style-src 'self' blob: 'unsafe-inline'; connect-src *; frame-src 'self' blob: http://127.0.0.1:43111" host = self.getHostWithoutPort()
port = int(self.env['SERVER_PORT'])
if port == config.ui_port:
other_port = config.ui_site_port
else:
other_port = config.ui_port
site_server = f'{host}:{other_port}'
headers["Content-Security-Policy"] = f"default-src 'none'; script-src 'nonce-{script_nonce}'; img-src 'self' blob: data:; style-src 'self' blob: 'unsafe-inline'; connect-src *; frame-src {site_server}"
if allow_ajax: if allow_ajax:
headers["Access-Control-Allow-Origin"] = "null" headers["Access-Control-Allow-Origin"] = "null"
@ -518,6 +524,9 @@ class UiRequest:
server_url = "" server_url = ""
return server_url return server_url
def getHostWithoutPort(self):
return ':'.join(self.env['HTTP_HOST'].split(':')[:-1])
def processQueryString(self, site, query_string): def processQueryString(self, site, query_string):
match = re.search("zeronet_peers=(.*?)(&|$)", query_string) match = re.search("zeronet_peers=(.*?)(&|$)", query_string)
if match: if match:
@ -629,9 +638,12 @@ class UiRequest:
repl.update(html_chars) repl.update(html_chars)
return s.translate(repl) return s.translate(repl)
scheme = self.env['wsgi.url_scheme']
host = self.getHostWithoutPort()
return self.render( return self.render(
"src/Ui/template/wrapper.html", "src/Ui/template/wrapper.html",
site_file_server='http://127.0.0.1:43111', site_file_server=f'{scheme}://{host}:{config.ui_site_port}',
server_url=server_url, server_url=server_url,
inner_path=inner_path, inner_path=inner_path,
file_url=xescape(file_url), file_url=xescape(file_url),

View file

@ -55,6 +55,7 @@ class UiServer:
def __init__(self): def __init__(self):
self.ip = config.ui_ip self.ip = config.ui_ip
self.port = config.ui_port self.port = config.ui_port
self.site_port = config.ui_site_port
self.running = False self.running = False
if self.ip == "*": if self.ip == "*":
self.ip = "0.0.0.0" # Bind all self.ip = "0.0.0.0" # Bind all
@ -164,7 +165,7 @@ class UiServer:
return ui_request.error500('Error while trying to server site data') return ui_request.error500('Error while trying to server site data')
def startSiteServer(self): def startSiteServer(self):
self.site_server = WSGIServer((self.ip, 43111), self.handleSiteRequest, log=self.log) self.site_server = WSGIServer((self.ip, self.site_port), self.handleSiteRequest, log=self.log)
self.site_server.serve_forever() self.site_server.serve_forever()
def stop(self): def stop(self):