From 0c38c3bada91ad49f3a2af92e32c82b2b6d901be Mon Sep 17 00:00:00 2001 From: rekushi <1+rekushi@noreply.flipnote.world> Date: Thu, 29 Oct 2026 04:22:23 +0000 Subject: [PATCH] feat(web): integrate creator and administrator controls Connect the new management pages, protect POST forms, paginate comments and enforce hidden-content access rules. --- webapp.py | 158 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 88 insertions(+), 70 deletions(-) diff --git a/webapp.py b/webapp.py index a9d2dc8..a1e5c7c 100644 --- a/webapp.py +++ b/webapp.py @@ -8,11 +8,18 @@ from twisted.web import resource from DB import Database from hatena import client_ip, request_args from reximemo import ppm_thumbnail_png +from server_config import load_config +from web_ui import page_number, pagination, protect_forms, valid_csrf +from web_features import WebFeatures, staff def _fields(request): + if request.args and any(key in request.args for key in (b"csrf", "csrf")): + return {(key.decode("utf-8", "replace") if isinstance(key, bytes) else key): + (values[-1].decode("utf-8", "replace") if isinstance(values[-1], bytes) else values[-1]) + for key, values in request.args.items() if values and key not in {b"logo", "logo"}} try: - raw = request.content.read().decode("utf-8", "replace") + raw = request.content.read(131073).decode("utf-8", "replace") except Exception: raw = "" return {k: v[-1] if v else "" for k, v in parse_qs(raw, keep_blank_values=True).items()} @@ -32,7 +39,7 @@ def _fmt_time(ts): return "" -class WebRoot(resource.Resource): +class WebRoot(WebFeatures, resource.Resource): isLeaf = True def __init__(self, docs_enabled=False): @@ -43,6 +50,7 @@ class WebRoot(resource.Resource): return Database.account_for_ip(client_ip(request)) def _page(self, request, title, body, *, account=None, active=""): + config = load_config() account = account if account is not None else self._account(request) browse_class = " active" if active == "browse" else "" home_class = " active" if active == "home" else "" @@ -53,6 +61,7 @@ class WebRoot(resource.Resource): nav_html = ( f'Home' f'Browse' + 'ChannelsSearch' f'About' ) if self.docs_enabled: @@ -62,24 +71,29 @@ class WebRoot(resource.Resource): if int(account.get("is_admin") or 0): actions += f'Admin' else: - actions = 'Sign inCreate account' + actions = 'Sign in' + if config["registration_enabled"]: + actions += 'Create account' - full_title = "RexiMemo OSE" if title == "Home" else f"{html.escape(title)} · RexiMemo OSE" + site_name = html.escape(config["site_name"]) + full_title = site_name if title == "Home" else f"{html.escape(title)} · {site_name}" docs_footer = 'Docs' if self.docs_enabled else "" page = f"""
-