web: Handle project/version details in invalid URL

Examples:
/musl/v1.2.5/sourc
/musl/v1.2.5/sourc/
/musl/v1.2.5/sourc/asd
/musl/v1.2.5/sourc/asd/
/musl/v1.2.5/sourc/asd/zxc
/musl/v1.2.5/sourc/asd/zxc/
/musl/v1.2.5/sourc/asd/zxc/...

Falcon requires field names on one level to be the same on all
(matching?) paths.
This commit is contained in:
Franciszek Stachura 2025-02-06 11:16:54 +01:00 committed by Théo Lebrun
parent f6b2d46a0c
commit 6edaafb2f3

View file

@ -359,6 +359,17 @@ class IncompleteURLRedirectResource:
resp.status = falcon.HTTP_FOUND
resp.location = stringify_source_path(project, version, '/')
# Handles /{project}/{version}/... URLs with unknown "command"
class UnknownPathResource:
def on_get(self, req, resp, project: str, version: str, family: str = "", subcmd: str = "", path: str = ""):
project, version, query = validate_project_and_version(req.context, project, version)
raise ElixirProjectError('Error', 'Invalid path',
project=project, version=version, query=query,
extra_template_args={
'current_family': 'A',
})
# File families available in the dropdown next to search input in the topbar
TOPBAR_FAMILIES = {
@ -808,6 +819,9 @@ def get_application():
app.add_route('/{project}', IncompleteURLRedirectResource())
app.add_route('/{project}/{version}', IncompleteURLRedirectResource())
app.add_route('/{project}/{version}/', IncompleteURLRedirectResource())
app.add_route('/{project}/{version}/{family}', UnknownPathResource())
app.add_route('/{project}/{version}/{family}/{subcmd}', UnknownPathResource())
app.add_route('/{project}/{version}/{family}/{subcmd}/{path:path}', UnknownPathResource())
return app