diff --git a/src/main/java/net/sourceforge/plantuml/servlet/DiagramStorageServlet.java b/src/main/java/net/sourceforge/plantuml/servlet/DiagramStorageServlet.java index b27f97c..4a09a85 100644 --- a/src/main/java/net/sourceforge/plantuml/servlet/DiagramStorageServlet.java +++ b/src/main/java/net/sourceforge/plantuml/servlet/DiagramStorageServlet.java @@ -118,7 +118,31 @@ public class DiagramStorageServlet extends HttpServlet { final HttpServletRequest req, final HttpServletResponse resp ) throws ServletException, IOException { - writeError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, "Delete is disabled"); + if (!isAuthorized(req)) { + writeError(resp, HttpServletResponse.SC_UNAUTHORIZED, "Missing or invalid token"); + return; + } + final String id = extractId(req); + if (id == null || id.isBlank()) { + writeError(resp, HttpServletResponse.SC_BAD_REQUEST, "Diagram id is required"); + return; + } + if (!storage.isValidId(id)) { + writeError(resp, HttpServletResponse.SC_BAD_REQUEST, "Invalid diagram id"); + return; + } + final boolean deleted; + try { + deleted = storage.delete(id); + } catch (IOException e) { + writeError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to delete diagram"); + return; + } + if (!deleted) { + writeError(resp, HttpServletResponse.SC_NOT_FOUND, "Diagram not found"); + return; + } + writeJson(resp, HttpServletResponse.SC_OK, Map.of("id", id, "deleted", true)); } private String extractId(final HttpServletRequest req) { diff --git a/src/main/webapp/components/modals/diagram-storage/diagram-storage.jsp b/src/main/webapp/components/modals/diagram-storage/diagram-storage.jsp index 917d1a9..0a0cfe0 100644 --- a/src/main/webapp/components/modals/diagram-storage/diagram-storage.jsp +++ b/src/main/webapp/components/modals/diagram-storage/diagram-storage.jsp @@ -17,6 +17,7 @@