From 63ecd50fbf6f465e55386875e94408dbc17505b0 Mon Sep 17 00:00:00 2001 From: artur-romao Date: Tue, 7 Jun 2022 10:02:54 +0100 Subject: [PATCH 1/4] Backend allowing to register with null or empty fields --- .../InvalidEmailException.java | 7 +++++++ .../InvalidPasswordException.java | 7 +++++++ .../codespellbackend/service/UserService.java | 19 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidEmailException.java create mode 100644 src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidPasswordException.java diff --git a/src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidEmailException.java b/src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidEmailException.java new file mode 100644 index 0000000..55c95d7 --- /dev/null +++ b/src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidEmailException.java @@ -0,0 +1,7 @@ +package pt.ua.deti.codespell.codespellbackend.exception.implementations; + +public class InvalidEmailException extends RuntimeException{ + public InvalidEmailException(String message) { + super(message); + } +} diff --git a/src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidPasswordException.java b/src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidPasswordException.java new file mode 100644 index 0000000..8769ad8 --- /dev/null +++ b/src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidPasswordException.java @@ -0,0 +1,7 @@ +package pt.ua.deti.codespell.codespellbackend.exception.implementations; + +public class InvalidPasswordException extends RuntimeException{ + public InvalidPasswordException(String message) { + super(message); + } +} diff --git a/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java b/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java index 13dd336..7c8b23a 100644 --- a/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java +++ b/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java @@ -1,9 +1,13 @@ package pt.ua.deti.codespell.codespellbackend.service; +import java.util.regex.Pattern; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; import pt.ua.deti.codespell.codespellbackend.exception.implementations.ExistentUserException; +import pt.ua.deti.codespell.codespellbackend.exception.implementations.InvalidEmailException; +import pt.ua.deti.codespell.codespellbackend.exception.implementations.InvalidPasswordException; import pt.ua.deti.codespell.codespellbackend.exception.implementations.UserNotFoundException; import pt.ua.deti.codespell.codespellbackend.model.User; import pt.ua.deti.codespell.codespellbackend.repository.UserRepository; @@ -37,11 +41,26 @@ public User findByEmail(String email) { } public void registerUser(User user) { + String emailRegex = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$"; + boolean emailChecker = Pattern.matches(emailRegex, user.getEmail()); + String passwordRegex = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,20}$"; + boolean passwordChecker = Pattern.matches(passwordRegex, user.getPassword()); if (userRepository.existsByUsername(user.getUsername())) throw new ExistentUserException("The provided username is already taken."); + else if (!emailChecker) + throw new InvalidEmailException("The provided email is invalid."); + else if (!passwordChecker) + throw new InvalidPasswordException("The provided password is invalid."); userRepository.save(user); } + public void updateUser(User user) { + + if (!userRepository.existsByUsername(user.getUsername())) + throw new UserNotFoundException(String.format("The user %s could not be found.", user.getUsername())); + userRepository.save(user); + + } } From b7f6a1f9fa38ee4447d83b14a2a20449d21aa774 Mon Sep 17 00:00:00 2001 From: artur-romao Date: Tue, 7 Jun 2022 11:59:43 +0100 Subject: [PATCH 2/4] now email and password validations working properly --- .../codespell/codespellbackend/service/UserService.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java b/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java index 7c8b23a..3417136 100644 --- a/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java +++ b/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java @@ -41,16 +41,14 @@ public User findByEmail(String email) { } public void registerUser(User user) { - String emailRegex = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$"; + String emailRegex = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$"; boolean emailChecker = Pattern.matches(emailRegex, user.getEmail()); - String passwordRegex = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,20}$"; - boolean passwordChecker = Pattern.matches(passwordRegex, user.getPassword()); if (userRepository.existsByUsername(user.getUsername())) throw new ExistentUserException("The provided username is already taken."); else if (!emailChecker) throw new InvalidEmailException("The provided email is invalid."); - else if (!passwordChecker) + else if (user.getPassword().length() < 6 || user.getPassword() == null) throw new InvalidPasswordException("The provided password is invalid."); userRepository.save(user); From 088d161e0e599d388445bb936cfc59295c1bade5 Mon Sep 17 00:00:00 2001 From: artur-romao Date: Tue, 7 Jun 2022 12:48:26 +0100 Subject: [PATCH 3/4] Added username field as well --- .../implementations/InvalidUsernameException.java | 7 +++++++ .../codespell/codespellbackend/service/UserService.java | 3 +++ 2 files changed, 10 insertions(+) create mode 100644 src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidUsernameException.java diff --git a/src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidUsernameException.java b/src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidUsernameException.java new file mode 100644 index 0000000..efe6d5c --- /dev/null +++ b/src/main/java/pt/ua/deti/codespell/codespellbackend/exception/implementations/InvalidUsernameException.java @@ -0,0 +1,7 @@ +package pt.ua.deti.codespell.codespellbackend.exception.implementations; + +public class InvalidUsernameException extends RuntimeException{ + public InvalidUsernameException(String message) { + super(message); + } +} diff --git a/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java b/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java index 3417136..8bc9b2b 100644 --- a/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java +++ b/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java @@ -8,6 +8,7 @@ import pt.ua.deti.codespell.codespellbackend.exception.implementations.ExistentUserException; import pt.ua.deti.codespell.codespellbackend.exception.implementations.InvalidEmailException; import pt.ua.deti.codespell.codespellbackend.exception.implementations.InvalidPasswordException; +import pt.ua.deti.codespell.codespellbackend.exception.implementations.InvalidUsernameException; import pt.ua.deti.codespell.codespellbackend.exception.implementations.UserNotFoundException; import pt.ua.deti.codespell.codespellbackend.model.User; import pt.ua.deti.codespell.codespellbackend.repository.UserRepository; @@ -50,6 +51,8 @@ else if (!emailChecker) throw new InvalidEmailException("The provided email is invalid."); else if (user.getPassword().length() < 6 || user.getPassword() == null) throw new InvalidPasswordException("The provided password is invalid."); + else if (user.getUsername().length() < 3 || user.getUsername() == null) + throw new InvalidUsernameException("The provided username is invalid."); userRepository.save(user); } From 92eefcdffcd3bf60f046bfebe04f7f442b057625 Mon Sep 17 00:00:00 2001 From: artur-romao Date: Wed, 8 Jun 2022 16:06:04 +0100 Subject: [PATCH 4/4] Register with an already existent email throwing ExistentUserException --- .../ua/deti/codespell/codespellbackend/service/UserService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java b/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java index 8bc9b2b..d51c752 100644 --- a/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java +++ b/src/main/java/pt/ua/deti/codespell/codespellbackend/service/UserService.java @@ -47,6 +47,8 @@ public void registerUser(User user) { if (userRepository.existsByUsername(user.getUsername())) throw new ExistentUserException("The provided username is already taken."); + else if (userRepository.existsByEmail(user.getEmail())) + throw new ExistentUserException("The provided email is already taken."); else if (!emailChecker) throw new InvalidEmailException("The provided email is invalid."); else if (user.getPassword().length() < 6 || user.getPassword() == null)