reworked login/register, GetMapping fixes
This commit is contained in:
parent
ef08c8d1c8
commit
9681dceb8b
|
@ -1,5 +1,6 @@
|
|||
package org.hso.ecommerce.app;
|
||||
|
||||
import org.hso.ecommerce.contoller.Login;
|
||||
import org.hso.ecommerce.db.CustomerRepository;
|
||||
import org.hso.ecommerce.entities.Customer;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -38,12 +39,6 @@ public class RequestController {
|
|||
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";
|
||||
|
@ -51,12 +46,12 @@ public class RequestController {
|
|||
|
||||
@GetMapping("/searchresults")
|
||||
public String searchresults() {
|
||||
return "searchresults";
|
||||
return "searchResults";
|
||||
}
|
||||
|
||||
@GetMapping("/shoppingcart")
|
||||
public String shoppingcart() {
|
||||
return "shoppingcart";
|
||||
return "shoppingCart";
|
||||
}
|
||||
|
||||
@GetMapping("/intern/customerdetail")
|
||||
|
@ -133,7 +128,7 @@ public class RequestController {
|
|||
model.addAttribute("zipcode", "12345");
|
||||
model.addAttribute("country", "Musterland");
|
||||
|
||||
return "customerAccountSettings";
|
||||
return "/customer/accountSettings";
|
||||
}
|
||||
|
||||
@RequestMapping(value="/updateAccountSettings", method=RequestMethod.POST, params="action=updateAccountSettings")
|
||||
|
@ -142,7 +137,7 @@ public class RequestController {
|
|||
System.out.println(customer.username);
|
||||
System.out.println(customer.password);
|
||||
|
||||
return "redirect:/customer/accountsettings";
|
||||
return "/customer/accountsettings";
|
||||
}
|
||||
|
||||
@GetMapping("/login")
|
||||
|
@ -154,26 +149,13 @@ public class RequestController {
|
|||
}
|
||||
@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<Customer> 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);
|
||||
Cookie cookie = new Login(customerRepo).getLoginToken(customer);
|
||||
if (cookie != null) {
|
||||
response.addCookie(cookie);
|
||||
return "redirect:home";
|
||||
} 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:login"; // redirect so the input files get cleared, otherwise only pwd gets cleared
|
||||
}
|
||||
|
||||
return "redirect:/home";
|
||||
}
|
||||
|
||||
@GetMapping("/register")
|
||||
|
@ -195,7 +177,7 @@ public class RequestController {
|
|||
if (customerRepo.findByUsername(customer.username).size() != 0) {
|
||||
// TODO
|
||||
System.out.println("The customer exists already");
|
||||
return "register";
|
||||
return "redirect:register";
|
||||
} else {
|
||||
customerRepo.save(customer);
|
||||
System.out.println(customerRepo.findByUsername(customer.username).size());
|
||||
|
@ -207,7 +189,7 @@ public class RequestController {
|
|||
// set the loginToken as session cookie
|
||||
Cookie cookie = new Cookie("loginToken", loginToken);
|
||||
response.addCookie(cookie);
|
||||
return "redirect:/home";
|
||||
return "home";
|
||||
}
|
||||
|
||||
@GetMapping("/about")
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
package org.hso.ecommerce.contoller;
|
||||
|
||||
import org.hso.ecommerce.db.CustomerRepository;
|
||||
import org.hso.ecommerce.entities.Customer;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class Login {
|
||||
|
||||
private final CustomerRepository customerRepo;
|
||||
|
||||
@Autowired
|
||||
public Login(CustomerRepository customerRepo) {
|
||||
this.customerRepo = customerRepo;
|
||||
}
|
||||
|
||||
public Cookie getLoginToken(Customer customer) {
|
||||
// do the login magic and get a loginToken
|
||||
System.out.println(customer.username);
|
||||
System.out.println(customer.password);
|
||||
|
||||
List<Customer> 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
|
||||
return new Cookie("loginToken", loginToken);
|
||||
} else {
|
||||
System.out.println("The login data is invalid!");
|
||||
return null; // redirect so the input files get cleared, otherwise only pwd gets cleared
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
.dialog {
|
||||
display: none; /* Hidden by default */
|
||||
position: fixed; /* Stay in place */
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%; /* Full width */
|
||||
height: 100%; /* Full height */
|
||||
overflow: auto; /* Enable scroll if needed */
|
||||
padding-top: 60px;
|
||||
}
|
||||
|
||||
.dialog-content {
|
||||
background-color: var(--c-black);
|
||||
margin: 5% auto 15% auto; /* 5% from the top, 15% from the bottom and centered */
|
||||
border: 1px solid #888;
|
||||
width: 50%; /* Could be more or less, depending on screen size */
|
||||
|
||||
}
|
|
@ -10,57 +10,57 @@
|
|||
<nav th:replace="fragments/header :: header">Header</nav>
|
||||
<main class='content-width'>
|
||||
<div class="content-width">
|
||||
<h1> Account Settings </h1>
|
||||
<h1> Account Einstellungen </h1>
|
||||
|
||||
|
||||
<form class="detailgrid" th:action="@{/updateAccountSettings}" th:object="${customer}" method="post">
|
||||
|
||||
<div class="l">
|
||||
<h2>General Settings</h2>
|
||||
<h2>Einstellungen</h2>
|
||||
<p class="l">
|
||||
<label for="username">Username *</label>
|
||||
<label for="username">Benutzername *</label>
|
||||
<input class="linestyle full-width" type="text" id="username" th:field="*{username}" th:value="${username}" />
|
||||
</p>
|
||||
<p class="l">
|
||||
<label for="fullname">Full Name *</label>
|
||||
<label for="fullname">Name *</label>
|
||||
<input class="linestyle full-width" type="text" id="fullname" th:value="${fullname}" />
|
||||
</p>
|
||||
<p class="l">
|
||||
<label for="email">Email Address *</label>
|
||||
<label for="email">Email Addresse *</label>
|
||||
<input class="linestyle full-width" type="text" id="email" th:value="${email}" />
|
||||
</p>
|
||||
<p class="l">
|
||||
<label for="password">Password *</label>
|
||||
<label for="password">Passwort *</label>
|
||||
<input class="linestyle full-width" type="password" id="password" th:field="*{password}" th:value="${password}" />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="l">
|
||||
<h2>Shipment Settings</h2>
|
||||
<h2>Versand</h2>
|
||||
<p class="l">
|
||||
<label for="street">Street + Hous No. *</label>
|
||||
<label for="street">Straße und Hausnummer *</label>
|
||||
<input class="linestyle full-width" type="text" id="street" th:value="${street}" />
|
||||
</p>
|
||||
|
||||
<div class="l">
|
||||
<p class="m">
|
||||
<label for="city">City *</label>
|
||||
<label for="city">Stadt *</label>
|
||||
<input class="linestyle full-width" type="text" id="city" th:value="${city}" />
|
||||
</p>
|
||||
<p class="s">
|
||||
<label for="zipcode">ZIP Code *</label>
|
||||
<label for="zipcode">Postleitzahl *</label>
|
||||
<input class="linestyle full-width" type="text" id="zipcode" th:value="${zipcode}" />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p class="l">
|
||||
<label for="country">Country *</label>
|
||||
<label for="country">Land *</label>
|
||||
<input class="linestyle full-width" type="text" id="country" th:value="${country}" />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="l">
|
||||
<h2>Payment Settings</h2>
|
||||
<h2>Bezahlung</h2>
|
||||
<h3>TODO</h3>
|
||||
</div>
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
<button>Finden</button>
|
||||
</form>
|
||||
<a th:unless="${customer}" class="button" th:href="@{/login}">Login</a>
|
||||
<div class="notifications" th:if="${customer}">
|
||||
<div class="notifications" th:if="${customer}" style="display: none;">
|
||||
<input id="messages" type="checkbox"></input>
|
||||
<label for="messages" class="button">
|
||||
<img th:src="@{/img/bell.svg}" width="25" height="28" alt="Nachrichten"/>
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<title>This is a simple Spring Boot Web App</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
</head>
|
||||
<body>
|
||||
<p th:text="'Hello, ' + ${name} + '!'" />
|
||||
</body>
|
||||
</html>
|
|
@ -70,7 +70,7 @@
|
|||
<h2>Werde jetzt Kunde</h2>
|
||||
<p> Jetzt Kunde werden und viele Vorteile sichern,
|
||||
wie z.B. personalisierte Empfehlungen. </p>
|
||||
<button>Registieren</button>
|
||||
<a class="button" href="/register">Registieren</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,33 +3,53 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>e-commerce</title>
|
||||
<link href="../static/css/ecom.css" rel="stylesheet" th:href="@{/css/ecom.css}"/>
|
||||
<link rel="stylesheet" th:href="@{/css/ecom.css}"/>
|
||||
</head>
|
||||
<body>
|
||||
<nav th:replace="fragments/header :: header">Header</nav>
|
||||
<div class='hero'>
|
||||
<main>
|
||||
<form class="content-width" th:action="@{/login}" th:object="${customer}" method="post">
|
||||
<div class="container">
|
||||
<label><b>Username</b></label>
|
||||
<input type="text" th:field="*{username}" placeholder="Enter Username" name="uname" required>
|
||||
<nav th:replace="fragments/header :: header">Header</nav>
|
||||
<main>
|
||||
|
||||
<label><b>Password</b></label>
|
||||
<input type="password" th:field="*{password}" placeholder="Enter Password" name="pwd" required>
|
||||
<div class="content-width">
|
||||
<div class="grid center">
|
||||
|
||||
<button type="submit" name="action" value="login">Login</button>
|
||||
<label>
|
||||
<input type="checkbox" checked="checked" name="remember"> Remember me
|
||||
</label>
|
||||
</div>
|
||||
<form class="detailgrid" th:action="@{/login}" th:object="${customer}" method="post" style="background-color:lightgray;">
|
||||
|
||||
<div class="container">
|
||||
<button type="button" onclick="document.getElementById('login').style.display='none'" class="cancelbtn">Cancel</button>
|
||||
<span class="psw">Forgot <a href="#">password?</a></span>
|
||||
</div>
|
||||
</form>
|
||||
</main>
|
||||
</div>
|
||||
<footer th:replace="fragments/footer :: footer"></footer>
|
||||
<div class="grid m">
|
||||
<div class="grid s"></div>
|
||||
<label for="username">Benutzername</label>
|
||||
<input type="text" th:field="*{username}" placeholder="Benutzername" id="username" required>
|
||||
<div class="grid s"></div>
|
||||
</div>
|
||||
|
||||
<div class="grid m">
|
||||
<div class="grid s"></div>
|
||||
<label for="password">Passwort</label>
|
||||
<input type="password" th:field="*{password}" placeholder="Passwort" id="password" required>
|
||||
<div class="grid s"></div>
|
||||
</div>
|
||||
|
||||
<div class="grid m">
|
||||
<div class="grid s"></div>
|
||||
<label></label>
|
||||
<label>
|
||||
<input type="checkbox" checked="checked" name="remember"> Login speichern
|
||||
</label>
|
||||
<div class="grid s"></div>
|
||||
</div>
|
||||
|
||||
<div class="grid m">
|
||||
<label></label>
|
||||
<button type="submit" name="action" value="login">Login</button>
|
||||
<a href="#">Passwort vergessen?</a>
|
||||
<div class="grid s"></div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
<footer th:replace="fragments/footer :: footer"></footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -9,17 +9,51 @@
|
|||
<body>
|
||||
<nav th:replace="fragments/header :: header">Header</nav>
|
||||
<main>
|
||||
<form class="dialog-content" th:action="@{/register}" th:object="${customer}" method="post">
|
||||
<div class="container">
|
||||
<label for="username">Username</label>
|
||||
<input type="text" th:field="*{username}" placeholder="Enter Username" id="username" required>
|
||||
|
||||
<label><b>Password</b></label>
|
||||
<input type="password" th:field="*{password}" placeholder="Enter Password" name="pwd" required>
|
||||
<div class="content-width">
|
||||
<div class="grid center">
|
||||
|
||||
<form class="detailgrid" th:action="@{/register}" th:object="${customer}" method="post" style="background-color:lightgray;">
|
||||
|
||||
<div class="l">
|
||||
<label for="username">Benutzername *</label>
|
||||
<input class="linestyle full-width" type="text" id="username" th:field="*{username}" th:value="${username}" required/>
|
||||
</div>
|
||||
|
||||
<div class="l">
|
||||
<label for="fullname">Name *</label>
|
||||
<input class="linestyle full-width" type="text" id="fullname" th:value="${fullname}" required/>
|
||||
</div>
|
||||
|
||||
<div class="l">
|
||||
<label for="email">Email Addresse *</label>
|
||||
<input class="linestyle full-width" type="text" id="email" th:value="${email}" required/>
|
||||
</div>
|
||||
|
||||
<div class="l">
|
||||
<label for="password">Passwort *</label>
|
||||
<input class="linestyle full-width" type="password" id="password" th:field="*{password}" th:value="${password}" required/>
|
||||
</div>
|
||||
|
||||
<div class="s">
|
||||
<label>
|
||||
<input type="checkbox" name="agb" required> Ich stimme den AGB's zu
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="privacy" required> Ich habe die Datneschutzerklärung gelesen
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="m">
|
||||
<button type="submit" name="action" value="register">Registrieren</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<button type="submit" name="action" value="register">Login</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
<footer th:replace="fragments/footer :: footer"></footer>
|
||||
</body>
|
||||
|
|
Reference in New Issue