diff --git a/growbros-frontend/src/jwt/Cookies.ts b/growbros-frontend/src/jwt/Cookies.ts index fbc57dc5ae2fa7ea09fff72a0c2a941842692486..739d231299b69436378161a7c98d7f822c9f6059 100644 --- a/growbros-frontend/src/jwt/Cookies.ts +++ b/growbros-frontend/src/jwt/Cookies.ts @@ -1,9 +1,9 @@ import {useLocation} from "react-router-dom"; import {SetStateAction, useEffect} from "react"; -export function setCookie(name: string, value: any, expirationDate: Date) { - let expires = "expires=" + expirationDate; - document.cookie = `${name}=${value}; ${expires}` +export function setCookie(name: string, value: any, expirationDate: Date, path: string) { + let expires = expirationDate.toUTCString(); + document.cookie = `${name}=${value};expires=${expires};path=${path};` } export function getCookie(name: string | any[]) { diff --git a/growbros-frontend/src/pages/Login.tsx b/growbros-frontend/src/pages/Login.tsx index 7a158f613b3d7a0f7bd3fd81b80cbaa172538680..e3a791062b43b9635b7d86035c7473fbf3132c4d 100644 --- a/growbros-frontend/src/pages/Login.tsx +++ b/growbros-frontend/src/pages/Login.tsx @@ -16,6 +16,7 @@ function Login() { await handleLogin(); }; const handleLogin = async () => { + try { const res = await fetch("http://localhost:8080/api/v1/auth/authenticate",{ method:"POST", body:JSON.stringify({email:email,password:password}), @@ -23,33 +24,32 @@ function Login() { "Content-Type": "application/json", }, }); - if (res.ok) { //delete old cookie and set new one with new expiration date + console.log(res) + if (res.status === 200) { //delete old cookie and set new one with new expiration date const { token } = await res.json(); - console.log(token); deleteJwtCookie(); const decodedToken = jwtDecode(token); - console.log(decodedToken); // @ts-ignore const expirationDate = new Date(decodedToken.exp * 1000); //*1000 Anzahl der Sekunden seit 1.1.1970 darstellt - JS arbeitet jedoch normalerweise mit Millisekunden - setCookie("Jwt",token, expirationDate); - document.cookie = `Jwt=${token};expires=${new Date(expirationDate).toUTCString()};path=/;`; + setCookie("Jwt",token, expirationDate,"/"); navigate('/'); } else { - const errorBody = await res.json(); - if (res.status === 400 && errorBody.error === 'InvalidEmailException') { - window.alert("Fehler bei der Anmeldung: Ungültige E-Mail-Adresse."); - console.error('Fehler bei der Anmeldung: Ungültige E-Mail-Adresse.'); - } else { - window.alert(`Fehler bei der Anmeldung: ${res.status} - ${res.statusText}`); - console.error('Fehler bei der Anmeldung:', res.status, res.statusText); + // @ts-ignore + const reader = res.body.getReader(); + const { value, done } = await reader.read(); + if (!done) { + const text = new TextDecoder().decode(value); + window.alert(text) + console.error(text); } - - navigate('/login'); - } - }; + + } catch (e: any) { + console.log(e.status); + } + } return ( <main> diff --git a/growbros-frontend/src/pages/Register.tsx b/growbros-frontend/src/pages/Register.tsx index 01d55084e0ef11a59babc9778838493c43a71eed..e42542baef9ad6a6fec4b5daec80299276ace170 100644 --- a/growbros-frontend/src/pages/Register.tsx +++ b/growbros-frontend/src/pages/Register.tsx @@ -73,10 +73,11 @@ function Register() { const {token} = await res.json(); console.log("Jwt Token not decoded" + token); const decodedToken = jwtDecode(token); + console.log("Jwt decoded " + decodedToken); // @ts-ignore const expirationDate = new Date(decodedToken.exp * 1000); //*1000 Anzahl der Sekunden seit 1.1.1970 darstellt - JS arbeitet jedoch normalerweise mit Millisekunden - setCookie("Jwt", token, expirationDate); - console.log("Jwt decoded " + decodedToken); + setCookie("Jwt", token, expirationDate,"/"); + navigate('/'); } else { // @ts-ignore diff --git a/src/main/java/hdm/mi/growbros/auth/AuthenticationService.java b/src/main/java/hdm/mi/growbros/auth/AuthenticationService.java index 1762e32a51a94ce1f028ee9a385c9fd04c85a51c..8aef84e0aaeceb9062505249061f671cfc0576d0 100644 --- a/src/main/java/hdm/mi/growbros/auth/AuthenticationService.java +++ b/src/main/java/hdm/mi/growbros/auth/AuthenticationService.java @@ -1,8 +1,6 @@ package hdm.mi.growbros.auth; -import hdm.mi.growbros.exceptions.EmailAlreadyExistsException; -import hdm.mi.growbros.exceptions.InvalidDataException; -import hdm.mi.growbros.exceptions.InvalidEmailException; +import hdm.mi.growbros.exceptions.*; import hdm.mi.growbros.models.user.Role; import hdm.mi.growbros.models.user.User; import hdm.mi.growbros.repositories.UserRepository; @@ -11,10 +9,13 @@ import lombok.RequiredArgsConstructor; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.HttpStatus; import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; + +import java.util.NoSuchElementException; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -35,15 +36,15 @@ public class AuthenticationService { public AuthenticationResponse register(RegisterRequest request) { if (!isValidEmail(request.getEmail())) { - throw new InvalidEmailException(HttpStatus.BAD_REQUEST, "Ungültige E-Mail-Adresse. Backend"); + throw new InvalidEmailException("Ungültige E-Mail-Adresse."); } if (request.getFirstname().isEmpty()) { - throw new InvalidDataException(HttpStatus.BAD_REQUEST, "Vorname fehlt. Backend"); + throw new InvalidDataException("Vorname fehlt."); } if (request.getLastname().isEmpty()) { - throw new InvalidDataException(HttpStatus.BAD_REQUEST, "Nachname fehlt. Backend"); + throw new InvalidDataException("Nachname fehlt."); } try { var user = User.builder() @@ -64,24 +65,27 @@ public class AuthenticationService { } public AuthenticationResponse authenticate(AuthenticationRequest request) { - authenticationManager.authenticate( - new UsernamePasswordAuthenticationToken( - request.getEmail(), - request.getPassword() - ) - ); - var user = repository.findByEmail(request.getEmail()) //wenn der Nutzername und Passwort korrekt sind wird ein Token generiert - .orElseThrow(); // = Methode von Optional -> wird auf das Optionale angewendet, das durch repository.findByEmail zurückgegeben wird - // Wenn Benutzer gefunden -> das Optional mit dem Benutzer-Objekt gefüllt. Andernfalls wird eine NoSuchElementException ausgelöst. - var jwtToken = jwtService.generateToken(user); - return AuthenticationResponse.builder() - .token(jwtToken) - .build(); + try { + authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken( + request.getEmail(), + request.getPassword() + ) + ); + var user = repository.findByEmail(request.getEmail()) //wenn der Nutzername und Passwort korrekt sind wird ein Token generiert + .orElseThrow(); // = Methode von Optional -> wird auf das Optionale angewendet, das durch repository.findByEmail zurückgegeben wird + // Wenn Benutzer gefunden -> das Optional mit dem Benutzer-Objekt gefüllt. Andernfalls wird eine NoSuchElementException ausgelöst. + var jwtToken = jwtService.generateToken(user); + return AuthenticationResponse.builder() + .token(jwtToken) + .build(); + } catch (NoSuchElementException e) { + throw new UserNotFoundException("Benutzer mit Email:" + request.getEmail() + " nicht gefunden."); + } catch (BadCredentialsException e) { + throw new UserNotFoundException("Anmeldedaten sind nicht korrekt."); + } } - - - private boolean isValidEmail(String email) { String emailRegex = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}$"; Pattern pattern = Pattern.compile(emailRegex); diff --git a/src/main/java/hdm/mi/growbros/exceptions/EmailAlreadyExistsException.java b/src/main/java/hdm/mi/growbros/exceptions/EmailAlreadyExistsException.java index 1e2330a4088326577ceb366b1f3e6ce2ce020bd2..800fc13cb0d6bd37235e348481ef21b4caeff278 100644 --- a/src/main/java/hdm/mi/growbros/exceptions/EmailAlreadyExistsException.java +++ b/src/main/java/hdm/mi/growbros/exceptions/EmailAlreadyExistsException.java @@ -4,6 +4,6 @@ import org.springframework.http.HttpStatus; public class EmailAlreadyExistsException extends GrowBrosException{ public EmailAlreadyExistsException(HttpStatus httpStatus, String message) { - super(httpStatus, message); + super(HttpStatus.BAD_REQUEST, message); } } diff --git a/src/main/java/hdm/mi/growbros/exceptions/InvalidDataException.java b/src/main/java/hdm/mi/growbros/exceptions/InvalidDataException.java index d45b903438e3bbf9239a40d9efa6a5e3cc72b0b1..fb4ce8c6bca8afcf06e8ab0ce744f409eb010335 100644 --- a/src/main/java/hdm/mi/growbros/exceptions/InvalidDataException.java +++ b/src/main/java/hdm/mi/growbros/exceptions/InvalidDataException.java @@ -3,8 +3,8 @@ package hdm.mi.growbros.exceptions; import org.springframework.http.HttpStatus; public class InvalidDataException extends GrowBrosException{ - public InvalidDataException(HttpStatus httpStatus, String message) { - super(httpStatus, message); + public InvalidDataException(String message) { + super(HttpStatus.BAD_REQUEST, message); } } diff --git a/src/main/java/hdm/mi/growbros/exceptions/InvalidEmailException.java b/src/main/java/hdm/mi/growbros/exceptions/InvalidEmailException.java index 65e484bff184a4e11aec61ffc51844be8f3ce1e8..ce8b48cbaab27dc2c872c1f2c6c89354e0a2c67e 100644 --- a/src/main/java/hdm/mi/growbros/exceptions/InvalidEmailException.java +++ b/src/main/java/hdm/mi/growbros/exceptions/InvalidEmailException.java @@ -3,7 +3,7 @@ package hdm.mi.growbros.exceptions; import org.springframework.http.HttpStatus; public class InvalidEmailException extends GrowBrosException{ - public InvalidEmailException(HttpStatus httpStatus,String message) { - super(httpStatus, message); + public InvalidEmailException(String message) { + super(HttpStatus.BAD_REQUEST, message); } } diff --git a/src/main/java/hdm/mi/growbros/exceptions/UserNotFoundException.java b/src/main/java/hdm/mi/growbros/exceptions/UserNotFoundException.java new file mode 100644 index 0000000000000000000000000000000000000000..27c6b7ddee43109e7282d71a3e0803604da0edc9 --- /dev/null +++ b/src/main/java/hdm/mi/growbros/exceptions/UserNotFoundException.java @@ -0,0 +1,9 @@ +package hdm.mi.growbros.exceptions; + +import org.springframework.http.HttpStatus; + +public class UserNotFoundException extends GrowBrosException{ + public UserNotFoundException (String message) { + super(HttpStatus.BAD_REQUEST,message); + } +}