aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/berzerkula/builddb/controllers/AccountController.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/berzerkula/builddb/controllers/AccountController.java')
-rw-r--r--src/main/java/org/berzerkula/builddb/controllers/AccountController.java141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/main/java/org/berzerkula/builddb/controllers/AccountController.java b/src/main/java/org/berzerkula/builddb/controllers/AccountController.java
new file mode 100644
index 0000000..6cec175
--- /dev/null
+++ b/src/main/java/org/berzerkula/builddb/controllers/AccountController.java
@@ -0,0 +1,141 @@
+package org.berzerkula.builddb.controllers;
+
+import java.util.Date;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import org.berzerkula.builddb.models.AppUser;
+import org.berzerkula.builddb.models.RegisterDto;
+import org.berzerkula.builddb.repositories.AppUserRepository;
+
+import jakarta.validation.Valid;
+
+@Controller
+public class AccountController {
+
+ @Autowired
+ private AppUserRepository repo;
+
+ @GetMapping("/profile")
+ public String profile(Authentication auth, Model model) {
+ AppUser user = repo.findByEmail(auth.getName());
+ model.addAttribute("appUser", user);
+
+ return "profile";
+ }
+
+ @GetMapping("/login")
+ public String login() {
+ return "login";
+ }
+
+ @GetMapping("/register")
+ public String register(Model model) {
+ RegisterDto registerDto = new RegisterDto();
+ model.addAttribute(registerDto);
+ model.addAttribute("success", false);
+ return "register";
+ }
+
+ @PostMapping("/register")
+ public String register(
+ Model model,
+ @Valid @ModelAttribute RegisterDto registerDto,
+ BindingResult result
+ ) {
+
+ if (!registerDto.getPassword().equals(registerDto.getConfirmPassword())) {
+ result.addError(
+ new FieldError("registerDto", "confirmPassword"
+ , "Password and Confirm Password do not match")
+ );
+ }
+
+
+ AppUser appUser = repo.findByEmail(registerDto.getEmail());
+ if (appUser != null) {
+ result.addError(
+ new FieldError("registerDto", "email"
+ , "Email address is already used")
+ );
+ }
+
+
+ if (result.hasErrors()) {
+ return "register";
+ }
+
+
+ try {
+ // create new account
+ var bCryptEncoder = new BCryptPasswordEncoder();
+
+
+ AppUser newUser = new AppUser();
+ newUser.setFirstName(registerDto.getFirstName());
+ newUser.setLastName(registerDto.getLastName());
+ newUser.setEmail(registerDto.getEmail());
+ newUser.setPhone(registerDto.getPhone());
+ newUser.setAddress(registerDto.getAddress());
+ newUser.setRole("client");
+ newUser.setCreatedAt(new Date());
+ newUser.setPassword(bCryptEncoder.encode(registerDto.getPassword()));
+
+ repo.save(newUser);
+
+
+ model.addAttribute("registerDto", new RegisterDto());
+ model.addAttribute("success", true);
+ }
+ catch(Exception ex) {
+ result.addError(
+ new FieldError("registerDto", "firstName"
+ , ex.getMessage())
+ );
+ }
+
+ return "register";
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+