diff --git a/src/main/java/com/epam/izh/rd/online/exception/NotAccessException.java b/src/main/java/com/epam/izh/rd/online/exception/NotAccessException.java new file mode 100644 index 0000000..e866fb0 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/NotAccessException.java @@ -0,0 +1,9 @@ +package com.epam.izh.rd.online.exception; + +public class NotAccessException extends UnsupportedOperationException { + + public NotAccessException() { + System.out.println("Недостаточно прав для выполнения операции"); + } + +} diff --git a/src/main/java/com/epam/izh/rd/online/exception/NotCorrectPasswordException.java b/src/main/java/com/epam/izh/rd/online/exception/NotCorrectPasswordException.java new file mode 100644 index 0000000..06a1fc3 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/NotCorrectPasswordException.java @@ -0,0 +1,9 @@ +package com.epam.izh.rd.online.exception; + +public class NotCorrectPasswordException extends Exception { + + public NotCorrectPasswordException() { + System.out.println("Пароль введен неверно!"); + } + +} diff --git a/src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java b/src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java new file mode 100644 index 0000000..bb96b63 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java @@ -0,0 +1,9 @@ +package com.epam.izh.rd.online.exception; + +public class SimplePasswordException extends Exception { + + public SimplePasswordException() { + System.out.println("Пароль не соответствует требованиям безопасности"); + } + +} diff --git a/src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.java b/src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.java new file mode 100644 index 0000000..25042b5 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.java @@ -0,0 +1,12 @@ +package com.epam.izh.rd.online.exception; + +import com.epam.izh.rd.online.entity.User; +import com.epam.izh.rd.online.repository.IUserRepository; +import com.epam.izh.rd.online.repository.UserRepository; + +public class UserAlreadyRegisteredException extends Exception { + + public UserAlreadyRegisteredException(User foundUser) { + System.out.println("Пользователь с логином " + foundUser.getLogin() + " уже зарегистрирован"); + } +} diff --git a/src/main/java/com/epam/izh/rd/online/exception/UserNotFoundException.java b/src/main/java/com/epam/izh/rd/online/exception/UserNotFoundException.java new file mode 100644 index 0000000..cb23ec1 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/UserNotFoundException.java @@ -0,0 +1,9 @@ +package com.epam.izh.rd.online.exception; + +public class UserNotFoundException extends Exception { + + public UserNotFoundException() { + System.out.println("Пользователь с таким логином не найден"); + } + +} diff --git a/src/main/java/com/epam/izh/rd/online/repository/IUserRepository.java b/src/main/java/com/epam/izh/rd/online/repository/IUserRepository.java index 0003397..b804241 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/IUserRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/IUserRepository.java @@ -8,5 +8,7 @@ public interface IUserRepository { User findByLogin(String login); + User findByPassword(String password); // (^_^) + void deleteByLogin(String login); } diff --git a/src/main/java/com/epam/izh/rd/online/repository/UserRepository.java b/src/main/java/com/epam/izh/rd/online/repository/UserRepository.java index e81491d..574cb70 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/UserRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/UserRepository.java @@ -57,6 +57,15 @@ public User findByLogin(String login) { .findFirst().orElse(null); } + @Override + public User findByPassword(String password) { + Objects.requireNonNull(password, "Отсутствует пароль для поиска пользователя"); + + return userDatabase.stream() + .filter(user -> user.getPassword().equals(password)) + .findFirst().orElse(null); + } + /** * Метод удаления пользователя с определенным логином. *
diff --git a/src/main/java/com/epam/izh/rd/online/service/AuthenticationService.java b/src/main/java/com/epam/izh/rd/online/service/AuthenticationService.java index bcb09a7..a6165c6 100644 --- a/src/main/java/com/epam/izh/rd/online/service/AuthenticationService.java +++ b/src/main/java/com/epam/izh/rd/online/service/AuthenticationService.java @@ -1,5 +1,7 @@ package com.epam.izh.rd.online.service; +import com.epam.izh.rd.online.exception.UserNotFoundException; +import com.epam.izh.rd.online.exception.NotCorrectPasswordException; import com.epam.izh.rd.online.entity.User; import com.epam.izh.rd.online.repository.IUserRepository; @@ -24,19 +26,25 @@ public AuthenticationService(IUserRepository userRepository) { * * @param user - пользователь проходящий авторизацию */ + @Override - public User login(User user) { - // Находим пользователя в базе - User foundUser = userRepository.findByLogin(user.getLogin()); + public User login(User user) throws Exception { + + if (userRepository.findByLogin(user.getLogin()) == null) { + throw new UserNotFoundException(); + } + + User foundUser = userRepository.findByLogin(user.getLogin()); - // - // Здесь необходимо реализовать перечисленные выше проверки - // + if (userRepository.findByPassword(user.getPassword()) == null || !foundUser.getPassword().equals(userRepository.findByPassword(user.getPassword()).getPassword())) { + throw new NotCorrectPasswordException(); + } - // Устанавливаем найденного пользователя, который прошел все проверки, как вошедшего в систему. - CurrentUserManager.setCurrentLoggedInUser(foundUser); - return foundUser; + // Устанавливаем найденного пользователя, который прошел все проверки, как вошедшего в систему. + CurrentUserManager.setCurrentLoggedInUser(foundUser); + return foundUser; + } /** @@ -46,4 +54,6 @@ public User login(User user) { public void logout() { CurrentUserManager.setCurrentLoggedInUser(null); } + + } diff --git a/src/main/java/com/epam/izh/rd/online/service/IAuthenticationService.java b/src/main/java/com/epam/izh/rd/online/service/IAuthenticationService.java index 3f296c3..773dd71 100644 --- a/src/main/java/com/epam/izh/rd/online/service/IAuthenticationService.java +++ b/src/main/java/com/epam/izh/rd/online/service/IAuthenticationService.java @@ -3,7 +3,7 @@ import com.epam.izh.rd.online.entity.User; public interface IAuthenticationService { - User login(User user); + User login(User user) throws Exception; void logout(); } diff --git a/src/main/java/com/epam/izh/rd/online/service/IUserService.java b/src/main/java/com/epam/izh/rd/online/service/IUserService.java index de62d43..418bd45 100644 --- a/src/main/java/com/epam/izh/rd/online/service/IUserService.java +++ b/src/main/java/com/epam/izh/rd/online/service/IUserService.java @@ -4,7 +4,7 @@ public interface IUserService { - User register(User user); + User register(User user) throws Exception; void delete(String login); } diff --git a/src/main/java/com/epam/izh/rd/online/service/UserService.java b/src/main/java/com/epam/izh/rd/online/service/UserService.java index 78c39ed..2d22edd 100644 --- a/src/main/java/com/epam/izh/rd/online/service/UserService.java +++ b/src/main/java/com/epam/izh/rd/online/service/UserService.java @@ -1,9 +1,14 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.User; +import com.epam.izh.rd.online.exception.NotAccessException; +import com.epam.izh.rd.online.exception.SimplePasswordException; +import com.epam.izh.rd.online.exception.UserAlreadyRegisteredException; import com.epam.izh.rd.online.repository.IUserRepository; import com.epam.izh.rd.online.repository.UserRepository; +import java.util.stream.Collectors; + public class UserService implements IUserService { private IUserRepository userRepository; @@ -29,12 +34,31 @@ public UserService(IUserRepository userRepository) { * * @param user - даныне регистрирующегося пользователя */ + + + @Override - public User register(User user) { + public User register(User user) throws Exception { + + // проверяем заполняемость полей + + if (user.getPassword().trim().length() == 0 || user.getLogin().trim().length() == 0) { + throw new IllegalArgumentException("Ошибка в заполнении полей"); + } - // - // Здесь необходимо реализовать перечисленные выше проверки - // + // проверяем есть ли в базе юзер с таким же логином + User foundUser = userRepository.findByLogin(user.getLogin()); + + + if (foundUser != null) { + throw new UserAlreadyRegisteredException(foundUser); + } + + // проверяем сложность пароля + + if (user.getPassword().trim().chars().filter(y -> y < 48 || y > 57).mapToObj(String::valueOf).collect(Collectors.toList()).size() < 1) { + throw new SimplePasswordException(); + } // Если все проверки успешно пройдены, сохраняем пользователя в базу return userRepository.save(user); @@ -61,9 +85,15 @@ public User register(User user) { public void delete(String login) { // Здесь необходимо сделать доработку метод + try { + + userRepository.deleteByLogin(login); + } + catch(UnsupportedOperationException e) { - userRepository.deleteByLogin(login); + throw new NotAccessException(); + } // Здесь необходимо сделать доработку метода }