+ Deleting your account can't be reversed. +
+ + +diff --git a/app/src/main/java/it/chalmers/gamma/adapter/primary/web/DeleteYourAccountController.java b/app/src/main/java/it/chalmers/gamma/adapter/primary/web/DeleteYourAccountController.java
new file mode 100644
index 000000000..75116c46a
--- /dev/null
+++ b/app/src/main/java/it/chalmers/gamma/adapter/primary/web/DeleteYourAccountController.java
@@ -0,0 +1,60 @@
+package it.chalmers.gamma.adapter.primary.web;
+
+import it.chalmers.gamma.app.user.MeFacade;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.servlet.ModelAndView;
+
+@Controller
+public class DeleteYourAccountController {
+
+ private final MeFacade meFacade;
+
+ public DeleteYourAccountController(MeFacade meFacade) {
+ this.meFacade = meFacade;
+ }
+
+ public record DeleteYourAccountForm(String password) {}
+
+ @GetMapping("/delete-your-account")
+ public ModelAndView getDeleteYourAccount(
+ @RequestHeader(value = "HX-Request", required = false) boolean htmxRequest) {
+ ModelAndView mv = new ModelAndView();
+
+ if (htmxRequest) {
+ mv.setViewName("pages/delete-your-account");
+ } else {
+ mv.setViewName("index");
+ mv.addObject("page", "pages/delete-your-account");
+ }
+
+ mv.addObject("form", new DeleteYourAccountForm(""));
+
+ return mv;
+ }
+
+ @DeleteMapping("/delete-your-account")
+ public ModelAndView deleteYourAccount(
+ DeleteYourAccountForm form, final BindingResult bindingResult) {
+ try {
+ this.meFacade.deleteMe(form.password);
+ } catch (IllegalArgumentException e) {
+ bindingResult.addError(
+ new FieldError("form", "password", "Incorrect password"));
+
+ ModelAndView mv = new ModelAndView();
+
+ mv.setViewName("pages/delete-your-account");
+ mv.addObject("form", new DeleteYourAccountForm(""));
+ mv.addObject(BindingResult.MODEL_KEY_PREFIX + "form", bindingResult);
+
+ return mv;
+ }
+
+ return new ModelAndView("redirect:/login?deleted");
+ }
+}
diff --git a/app/src/main/java/it/chalmers/gamma/adapter/primary/web/LoginController.java b/app/src/main/java/it/chalmers/gamma/adapter/primary/web/LoginController.java
index 31bbff9c5..08ec48e66 100644
--- a/app/src/main/java/it/chalmers/gamma/adapter/primary/web/LoginController.java
+++ b/app/src/main/java/it/chalmers/gamma/adapter/primary/web/LoginController.java
@@ -17,6 +17,7 @@ public ModelAndView getLogin(
@RequestParam(value = "error", required = false) String error,
@RequestParam(value = "logout", required = false) String logout,
@RequestParam(value = "authorizing", required = false) String authorizing,
+ @RequestParam(value = "deleted", required = false) String deleted,
@RequestHeader(value = "HX-Request", required = false) boolean htmxRequest,
@RequestParam(value = "throttle", required = false) String throttle,
HttpServletResponse response) {
@@ -36,10 +37,12 @@ public ModelAndView getLogin(
boolean isAuthorizing = authorizing != null;
boolean isThrottled = throttle != null;
+ boolean isDeleted = deleted != null;
mv.addObject("error", error);
mv.addObject("logout", logout);
mv.addObject("authorizing", isAuthorizing);
+ mv.addObject("deleted", isDeleted);
mv.addObject("throttle", isThrottled);
response.addHeader("HX-Retarget", "body");
diff --git a/app/src/main/java/it/chalmers/gamma/app/user/MeFacade.java b/app/src/main/java/it/chalmers/gamma/app/user/MeFacade.java
index 3b0b8ceb9..4bc34c4b0 100644
--- a/app/src/main/java/it/chalmers/gamma/app/user/MeFacade.java
+++ b/app/src/main/java/it/chalmers/gamma/app/user/MeFacade.java
@@ -134,8 +134,10 @@ public void deleteMe(String password) {
try {
this.userRepository.delete(me.id());
} catch (UserRepository.UserNotFoundException e) {
- e.printStackTrace();
+ throw new IllegalStateException();
}
+ } else {
+ throw new IllegalArgumentException();
}
}
}
diff --git a/app/src/main/resources/templates/pages/delete-your-account.html b/app/src/main/resources/templates/pages/delete-your-account.html
new file mode 100644
index 000000000..cf7f3038e
--- /dev/null
+++ b/app/src/main/resources/templates/pages/delete-your-account.html
@@ -0,0 +1,19 @@
+
+ Deleting your account can't be reversed.
+
+ Your account has been deleted. +
+ Register diff --git a/app/src/main/resources/templates/pages/me.html b/app/src/main/resources/templates/pages/me.html index 44f57fe4f..cad9605f2 100644 --- a/app/src/main/resources/templates/pages/me.html +++ b/app/src/main/resources/templates/pages/me.html @@ -78,4 +78,25 @@ ++ Here you can delete your account and prevent further access for clients you have accepted. + You have the right to ensure all of your data is removed. + Please email ita@chalmers.it, along with: +
++ UserId: +
++ Cid: +
+ +