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]
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:])