From 7077178885c7a34fe270e3561591004c405acca5 Mon Sep 17 00:00:00 2001 From: klemek Date: Sat, 11 Apr 2026 23:11:44 +0200 Subject: [PATCH] feat: delete content --- README.md | 13 +++++++++++++ src/server.py | 14 ++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/README.md b/README.md index 2e8b25a..973f9da 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,19 @@ tar -czC dist . | curl -X PUT \ http://stapler-host/target/ ``` +### Delete page + +```txt +DELETE /{page}/ +``` + +```bash +# delete /target/ +curl -X DELETE \ + -H 'X-Token: ' \ + http://stapler-host/target/ +``` + ## TODO - [x] basic http server diff --git a/src/server.py b/src/server.py index cdf73c4..6352e17 100644 --- a/src/server.py +++ b/src/server.py @@ -49,6 +49,20 @@ class _StaplerRequestHandler(http.server.SimpleHTTPRequestHandler): return self.send_error(http.HTTPStatus.INTERNAL_SERVER_ERROR, str(e)) self.send_status_only(http.HTTPStatus.CREATED, f"Resource /{sub_path}/ updated") + def do_DELETE(self): + if self.headers["X-Token"] != self.token: + 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") + target_path = os.path.join(self.data_dir, sub_path) + try: + shutil.rmtree(target_path) + except Exception as e: + return self.send_error(http.HTTPStatus.INTERNAL_SERVER_ERROR, str(e)) + self.send_status_only( + http.HTTPStatus.NO_CONTENT, f"Resource /{sub_path}/ deleted" + ) + def get_subpath(self) -> str | None: if (match := re.match(r"^\/(\w+)\/$", self.path)) is not None: return match.group(1)