home · contact · privacy
Handle 404 cases and again re-direct / to /ledger_structured.
authorChristian Heller <c.heller@plomlompom.de>
Thu, 22 Jan 2026 17:30:47 +0000 (18:30 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 22 Jan 2026 17:30:47 +0000 (18:30 +0100)
src/ledgplom/http.py

index 59da03821712cbec07989357d8b25adbc9e7e8c8..b3e9b518549f4655bf484b66333493e746fdbf1e 100644 (file)
@@ -115,12 +115,21 @@ class _Handler(PlomHttpHandler):
 
     def do_GET(self) -> None:  # pylint: disable=invalid-name
         'Route GET requests to respective handlers.'
+        def send_404() -> None:
+            self.send_http(bytes('page not found', encoding='utf8'), code=404)
+
+        if not self.pagename:
+            return self.redirect(
+                    Path(f'/{_PREFIX_LEDGER}_{_SUFFIX_STRUCTURED}'))
         if self.pagename == 'blocks':
-            self.redirect(
-                Path('/', _PAGENAME_EDIT_STRUCTURED, self.path_toks[2]))
-            return
+            return self.redirect(
+                    Path(f'/{_PAGENAME_EDIT_STRUCTURED}', self.path_toks[2]))
         ctx: dict[str, Any] = {}
+        template_names = tuple(str(path.parts[-1])
+                               for path in PATH_TEMPLATES.iterdir())
         if self.pagename.endswith(SUFFIX_JS):
+            if self.pagename not in template_names:
+                return send_404()
             if self.pagename.startswith(_PAGENAME_EDIT_STRUCTURED):
                 block = self.server.ledger.blocks[int(self.path_toks[2])]
                 ctx['raw_gap_lines'] = [dl.raw for dl in block.gap.lines]
@@ -135,6 +144,9 @@ class _Handler(PlomHttpHandler):
                           encoding='utf8'),
                     [('Content-Type', 'text/javascript')])
             return
+        template_name = f'{self.pagename}{SUFFIX_HTML}'
+        if template_name not in template_names:
+            return send_404()
         ctx['path'] = self.path
         ctx['unsaved_changes'] = self.server.ledger.tainted
         ctx |= render_ctx_on_path(self.server.ledger, self.path_toks[1:])