import socket
import sys
from argparse import ArgumentParser
+from base64 import urlsafe_b64encode
+from hashlib import pbkdf2_hmac
from itertools import chain
from pathlib import Path
from secrets import token_urlsafe
self.base_dir = Path(__file__).parents[1] / "webroot"
self.env = Environment(
loader=FileSystemLoader(self.base_dir),
- autoescape=select_autoescape,
+ autoescape=select_autoescape(),
extensions=["hub.utils.StaticTag"],
)
self.secret = secret or token_urlsafe(64)
HubApp(self, base_dir)
self.add_error_handler(Exception, self.print_exception)
- def get_hubapp_by_name(self, name):
- if name == "root":
- name = ""
- return self.hubapps[name]
+ def scramble(self, value):
+ if isinstance(value, str):
+ value = value.encode()
+ secret = self.secret
+ if isinstance(secret, str):
+ secret = secret.encode()
+ return urlsafe_b64encode(
+ pbkdf2_hmac("sha512", value, secret, 221100)
+ ).rstrip(b"=").decode("ascii")
async def print_exception(self, req, resp, ex, params):
print_exception(*sys.exc_info())
host = f"{host}:{port}"
app = config.loaded_app.app
print("Secret:", app.secret)
- for key, value in app.root_app.files_per_uris.items():
+ for key, value in app.hubapps["root"].files_per_uris.items():
if Path(value.path.name).stem == "index.html":
url = urlunsplit((protocol_name, host, key, "", ""))
print("URL:", url)