--- /dev/null
+package de.juplo.demos.pwreset.adapters.in;
+
+import de.juplo.demos.pwreset.api.domain.PasswordResetRequest;
+import de.juplo.demos.pwreset.api.domain.PasswordRestService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.UUID;
+
+
+@Controller
+@RequiredArgsConstructor
+public class WebController
+{
+ private final PasswordRestService passwordRestService;
+
+
+ @GetMapping("/")
+ public String requestForm()
+ {
+ return "request";
+ }
+
+ @PostMapping("/")
+ public void resetRequest(
+ @RequestParam String email,
+ HttpServletResponse httpServletResponse)
+ throws
+ IOException
+ {
+ PasswordResetRequest resetRequest = passwordRestService.requestPasswordReset(email);
+ httpServletResponse.sendRedirect(resetRequest.getUserId().toString());
+ }
+
+ @GetMapping("/{id}")
+ public ModelAndView getResetRequest(@PathVariable UUID id)
+ {
+ PasswordResetRequest resetRequest = passwordRestService.getPasswordReset(id);
+ ModelAndView mav = new ModelAndView("confirm");
+ return "confirm";
+ }
+
+ @PutMapping("/{id")
+ public ModelAndView confirmResetRequest(
+ @PathVariable UUID id,
+ @RequestParam String code,
+ @RequestParam String password)
+ {
+ ModelAndView mav = new ModelAndView("confirm");
+ mav.addObject("code", code);
+ mav.addObject("password", password);
+
+ try
+ {
+ PasswordResetRequest resetRequest =
+ passwordRestService.confirmPasswordRequest(
+ id,
+ code,
+ password);
+
+ }
+ catch (Exception e)
+ {
+ mav.addObject("message", e.getMessage());
+ }
+
+ return mav;
+ }
+}