package org.hso.ecommerce.app; import org.hso.ecommerce.db.CustomerRepository; import org.hso.ecommerce.entities.Customer; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.UUID; @Controller public class RequestController { private final CustomerRepository customerRepo; public RequestController(CustomerRepository customerRepo) { this.customerRepo = customerRepo; } @GetMapping("/") public String greeting() { return "redirect:/home"; } @GetMapping("/home") public String home(Model model) { model.addAttribute(new Customer()); return "home"; } @GetMapping("/greeting") public String greeting(@RequestParam(name = "name", required = false, defaultValue = "World") String name, Model model) { model.addAttribute("name", name); return "greeting"; } @GetMapping("/articleDetail") public String articleDetail() { return "articleDetail";} @GetMapping("/searchResults") public String searchResults() { return "searchResults";} @GetMapping("/login") public String login(@CookieValue(value = "loginToken", defaultValue = "") String loginToken, Model model) { model.addAttribute(new Customer()); System.out.println(loginToken); // TODO if cookie is present, redirect to home return "login"; } @RequestMapping(value="/login", method=RequestMethod.POST, params="action=login") public String loginAction(@ModelAttribute Customer customer, HttpServletResponse response) { // do the login magic and get a loginToken System.out.println(customer.username); System.out.println(customer.password); List customers = customerRepo.findByUsername(customer.username); if (customers.size() == 1 && (customers.get(0).username.equals(customer.username) && customers.get(0).password.equals(customer.password))) { System.out.println("The login data is valid"); String loginToken = UUID.randomUUID().toString(); // set the loginToken as session cookie Cookie cookie = new Cookie("loginToken", loginToken); response.addCookie(cookie); } else { System.out.println("The login data is invalid!"); return "redirect:/login"; // redirect so the input files get cleared, otherwise only pwd gets cleared } return "redirect:/home"; } @GetMapping("/register") public String register(@CookieValue(value = "loginToken", defaultValue = "") String loginToken, Model model) { model.addAttribute(new Customer()); System.out.println(loginToken); // TODO if cookie is present, redirect to home return "register"; } @RequestMapping(value="/register", method=RequestMethod.POST, params="action=register") public String registerAction(@ModelAttribute Customer customer, HttpServletResponse response) { // do the register magic and get a loginToken System.out.println(customer.username); System.out.println(customer.password); if (customerRepo.findByUsername(customer.username).size() != 0) { // TODO System.out.println("The customer exists already"); return "register"; } else { customerRepo.save(customer); System.out.println(customerRepo.findByUsername(customer.username).size()); } // return a login token after successful registration String loginToken = UUID.randomUUID().toString(); // set the loginToken as session cookie Cookie cookie = new Cookie("loginToken", loginToken); response.addCookie(cookie); return "redirect:/home"; } }