feat: better error page and headers handling
This commit is contained in:
@@ -82,6 +82,7 @@ curl -X DELETE \
|
||||
- [ ] proper doc
|
||||
- [ ] log visits (and store accross sessions)
|
||||
- [ ] deliver visits in /page/visits
|
||||
- [x] better error page
|
||||
|
||||
### Makefile targets
|
||||
|
||||
|
||||
+23
-1
@@ -51,6 +51,9 @@ class StaplerRequestHandler(http.server.SimpleHTTPRequestHandler):
|
||||
return self.send_error(http.HTTPStatus.UNAUTHORIZED, "Invalid token")
|
||||
if (sub_path := self.get_subpath()) is None:
|
||||
return self.send_error(http.HTTPStatus.BAD_REQUEST, "Invalid path")
|
||||
if not self.headers["Content-Length"]:
|
||||
content_length = 0
|
||||
else:
|
||||
content_length = int(self.headers["Content-Length"])
|
||||
if content_length == 0:
|
||||
return self.send_error(http.HTTPStatus.LENGTH_REQUIRED, "No body found")
|
||||
@@ -66,7 +69,7 @@ class StaplerRequestHandler(http.server.SimpleHTTPRequestHandler):
|
||||
except Exception as e:
|
||||
return self.send_error(http.HTTPStatus.INTERNAL_SERVER_ERROR, str(e))
|
||||
self.send_status_only(http.HTTPStatus.CREATED, f"Resource /{sub_path}/ updated")
|
||||
if self.headers["X-Host"]:
|
||||
if self.headers["X-Host"] is not None:
|
||||
self.registry.set_host(sub_path, self.headers["X-Host"])
|
||||
self.registry.add(sub_path)
|
||||
|
||||
@@ -96,6 +99,8 @@ class StaplerRequestHandler(http.server.SimpleHTTPRequestHandler):
|
||||
return None
|
||||
|
||||
def get_host(self) -> str:
|
||||
if self.headers["Host"] is None:
|
||||
return self.default_host
|
||||
return self.headers["Host"].split(":")[0]
|
||||
|
||||
def server_index(self):
|
||||
@@ -119,3 +124,20 @@ class StaplerRequestHandler(http.server.SimpleHTTPRequestHandler):
|
||||
self.send_response(code, message)
|
||||
self.send_header("Content-Length", "0")
|
||||
self.end_headers()
|
||||
|
||||
def send_error(
|
||||
self, code: int, message: str | None = None, explain: str | None = None
|
||||
):
|
||||
shortmsg, longmsg = self.responses[code]
|
||||
if message is None:
|
||||
message = shortmsg
|
||||
if explain is None:
|
||||
explain = longmsg
|
||||
if "Accept" not in self.headers["Accept"] or "text/" in self.headers["Accept"]:
|
||||
self.send_basic_body(
|
||||
f"{code} {message}\n{explain}\n{self.server_version}",
|
||||
code=code,
|
||||
message=message,
|
||||
)
|
||||
else:
|
||||
self.send_status_only(code, message)
|
||||
|
||||
Reference in New Issue
Block a user