diff --git a/gateway.py b/gateway.py
index 02a2d95..fa4b076 100644
--- a/gateway.py
+++ b/gateway.py
@@ -165,12 +165,15 @@ class GatewayHandler(BaseHTTPRequestHandler):
"style-src 'self' 'unsafe-inline'; "
"script-src 'self' 'unsafe-inline'; "
"img-src 'self' data:")
+ resp_body = resp.get("body", "")
+ encoded = resp_body.encode() if isinstance(resp_body, str) else resp_body
+ if encoded:
+ self.send_header("Content-Length", str(len(encoded)))
for k, v in resp.get("headers", {}).items():
self.send_header(k, v)
self.end_headers()
- resp_body = resp.get("body", "")
- if resp_body:
- self.wfile.write(resp_body.encode() if isinstance(resp_body, str) else resp_body)
+ if encoded:
+ self.wfile.write(encoded)
except ConnectionError as e:
GatewayState.link = None
diff --git a/handlers/__init__.py b/handlers/__init__.py
index e7eda3e..228508e 100644
--- a/handlers/__init__.py
+++ b/handlers/__init__.py
@@ -32,7 +32,7 @@ from .subscriptions import (
handle_subscription_delete, handle_subscription_syncall,
_sync_threads,
)
-from .customize import handle_style_form, handle_style_submit, handle_style_template_submit, handle_field_save, handle_about
+from .customize import handle_style_form, handle_style_submit, handle_style_template_submit, handle_field_save, handle_about, _set_flash
from .tags import handle_tags, handle_tag_browse
from .data import (
handle_export, handle_import_form, handle_import_submit,
@@ -66,7 +66,7 @@ def _dispatch_inner(data):
return handle_pages(query)
elif path.startswith("/edit/"):
pid = extract_id("/edit/")
- return handle_edit_form(pid) if pid is not None else _error(400)
+ return handle_edit_form(pid, page=query.get("p", [""])[0]) if pid is not None else _error(400)
elif path.startswith("/delete/"):
pid = extract_id("/delete/")
return handle_delete_confirm(pid) if pid is not None else _error(400)
@@ -129,11 +129,13 @@ def _dispatch_inner(data):
return handle_field_save(body)
elif path == "/style/reset":
set_setting("custom_template", "")
- return handle_style_form("Template reset to default.", gateway_host=gateway_host, scheme=scheme)
+ _set_flash("Template reset to default.")
+ return _redirect("/style")
elif path == "/style/vacuum":
from db import vacuum_db
vacuum_db()
- return handle_style_form("Database vacuumed.", gateway_host=gateway_host, scheme=scheme)
+ _set_flash("Database vacuumed.")
+ return _redirect("/style")
elif path == "/import":
return handle_import_submit(body)
elif path == "/reindex":
diff --git a/handlers/_helpers.py b/handlers/_helpers.py
index 3fecb71..2611ce7 100644
--- a/handlers/_helpers.py
+++ b/handlers/_helpers.py
@@ -65,11 +65,11 @@ def _get_bookmark_token():
return token
-def _respond(body_html, status=200, use_default=False):
+def _respond(body_html, status=200, use_default=False, head_html=""):
return {
"status": status,
"content_type": "text/html; charset=utf-8",
- "body": wrap_page(body_html, use_default=use_default),
+ "body": wrap_page(body_html, use_default=use_default, head_html=head_html),
"headers": {},
}
diff --git a/handlers/customize.py b/handlers/customize.py
index 6808046..6b3786d 100644
--- a/handlers/customize.py
+++ b/handlers/customize.py
@@ -1,9 +1,19 @@
from db import get_db, return_db, get_setting, set_setting, get_site_name
import templates as templates_mod
from templates import esc, DEFAULT_TEMPLATE
-from ._helpers import _respond, _json_response, _csrf_field, _get_bookmark_token
+from ._helpers import _respond, _redirect, _json_response, _csrf_field, _get_bookmark_token, _request_local
from .subscriptions import _count_shared_pages
+_flash = {}
+
+
+def _set_flash(msg):
+ _flash[_request_local.csrf_token] = msg
+
+
+def _get_flash():
+ return _flash.pop(_request_local.csrf_token, "")
+
def handle_style_form(msg="", gateway_host="", scheme="http"):
template = get_setting("custom_template") or DEFAULT_TEMPLATE
@@ -21,7 +31,6 @@ def handle_style_form(msg="", gateway_host="", scheme="http"):
reranker = get_setting("use_reranker", "0")
reranker_checked = " checked" if reranker == "1" else ""
disabled = "" if semantic == "1" else " disabled"
- dimmed = ' style="opacity:0.4"' if semantic != "1" else ""
tcp_enabled = get_setting("tcp_enabled", "1")
tcp_checked = " checked" if tcp_enabled == "1" else ""
tcp_disabled = "" if tcp_enabled == "1" else " disabled"
@@ -32,31 +41,65 @@ def handle_style_form(msg="", gateway_host="", scheme="http"):
lora_enabled = get_setting("lora_enabled", "0")
lora_checked = " checked" if lora_enabled == "1" else ""
lora_disabled = "" if lora_enabled == "1" else " disabled"
- lora_dimmed = ' style="opacity:0.4"' if lora_enabled != "1" else ""
lora_port = get_setting("lora_port", "")
lora_frequency = get_setting("lora_frequency", "867200000")
lora_bandwidth = get_setting("lora_bandwidth", "125000")
lora_txpower = get_setting("lora_txpower", "7")
lora_sf = get_setting("lora_sf", "8")
lora_cr = get_setting("lora_cr", "5")
+ csrf = _csrf_field()
from handlers import forum_plugin as _fp
if _fp is not None:
- forum_section = (
+ forum_body = (
+ f"
{msg}
'.format(msg=esc(msg)) + return _respond( f"{msg}
" - f'back' + f'back' ) @@ -335,7 +338,11 @@ def handle_edit_submit(page_id, body): finally: return_db(db) - return _redirect("/pages") + page = body.get("_page", [""])[0].strip() + target = "/pages" + if page: + target += "?p=" + page + return _redirect(target) def handle_delete_confirm(page_id): diff --git a/handlers/subscriptions.py b/handlers/subscriptions.py index e0ecf68..97f20b2 100644 --- a/handlers/subscriptions.py +++ b/handlers/subscriptions.py @@ -162,7 +162,7 @@ def handle_subscriptions(msg=""): sync_btn = '' else: sync_btn = ( - f'{msg}
' f'