diff --git a/src/main/java/ru/scamburger/Soundger/controllers/RegisterServiceController.java b/src/main/java/ru/scamburger/Soundger/controllers/RegisterServiceController.java new file mode 100644 index 0000000..f796902 --- /dev/null +++ b/src/main/java/ru/scamburger/Soundger/controllers/RegisterServiceController.java @@ -0,0 +1,33 @@ +package ru.scamburger.Soundger.controllers; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import ru.scamburger.Soundger.dto.UserCredentialsRequestDto; +import ru.scamburger.Soundger.service.RegisterService; + +@RestController +@RequestMapping("/api") +public class RegisterServiceController { + + private final RegisterService registerService; + + public RegisterServiceController(RegisterService registerService) { + this.registerService = registerService; + } + + @PostMapping("/register") + @Transactional + public ResponseEntity register(@RequestBody UserCredentialsRequestDto userDto) { + if (registerService.doRegister(userDto.getUsername(), userDto.getPassword())) { + return new ResponseEntity<>("User create", HttpStatus.OK); + } else { + return new ResponseEntity<>("Username exist on server", HttpStatus.CONFLICT); + } + } + +} diff --git a/src/main/java/ru/scamburger/Soundger/controllers/TestController.java b/src/main/java/ru/scamburger/Soundger/controllers/TestController.java index ce0a70d..b992bbc 100644 --- a/src/main/java/ru/scamburger/Soundger/controllers/TestController.java +++ b/src/main/java/ru/scamburger/Soundger/controllers/TestController.java @@ -1,12 +1,20 @@ package ru.scamburger.Soundger.controllers; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import ru.scamburger.Soundger.dto.AuthTokenResponseDto; +import ru.scamburger.Soundger.dto.UserCredentialsRequestDto; import ru.scamburger.Soundger.exception.UnauthorizedException; import ru.scamburger.Soundger.service.AuthService; import ru.scamburger.Soundger.annotation.Authorized; import ru.scamburger.Soundger.entity.User; +import ru.scamburger.Soundger.service.RegisterService; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @@ -30,41 +38,29 @@ public User deleteUser() { return new User(); } - //Контролер для теста создания Юзера - @GetMapping("/addUser") - @Transactional - public String addUser() { - User user=new User(); - user.setUsername("root"); - user.setPassword("xfk1ZvguvewaSSNvTqqOCNjv0gEZuym3m21JnHNK9YBFTsGg15ri5xWd1oOPVVtY"); - entityManager.merge(user); - return "I hate java"; - } - @GetMapping("/addauthtoken") - public String testAuth(){ + public String testAuth() { try { - authService.authorize("root","root"); + authService.authorize("root", "root"); } catch (UnauthorizedException e) { - e.getStackTrace(); - return "Unauthorized"; + e.getStackTrace(); + return "Unauthorized"; } return "token added"; } @GetMapping("/testfindauth") - public String findAuthToken(){ - if(!authService.isAuthorized("342af481-e953-44c3-974f-8151717b06c1")){ + public String findAuthToken() { + if (!authService.isAuthorized("342af481-e953-44c3-974f-8151717b06c1")) { return "false account not expired"; - } - else { + } else { return "true or exception,account expired"; } } @GetMapping("/logout") @Authorized - public String logout(){ + public String logout() { try { authService.logout(); } catch (UnauthorizedException e) { diff --git a/src/main/java/ru/scamburger/Soundger/service/RegisterService.java b/src/main/java/ru/scamburger/Soundger/service/RegisterService.java new file mode 100644 index 0000000..e190cb7 --- /dev/null +++ b/src/main/java/ru/scamburger/Soundger/service/RegisterService.java @@ -0,0 +1,5 @@ +package ru.scamburger.Soundger.service; + +public interface RegisterService { + boolean doRegister(String username, String password); +} diff --git a/src/main/java/ru/scamburger/Soundger/service/RegisterServiceImpl.java b/src/main/java/ru/scamburger/Soundger/service/RegisterServiceImpl.java new file mode 100644 index 0000000..b4c9204 --- /dev/null +++ b/src/main/java/ru/scamburger/Soundger/service/RegisterServiceImpl.java @@ -0,0 +1,40 @@ +package ru.scamburger.Soundger.service; + +import org.jasypt.util.password.PasswordEncryptor; +import org.springframework.stereotype.Service; +import ru.scamburger.Soundger.dao.AuthTokenDao; +import ru.scamburger.Soundger.entity.AuthToken; +import ru.scamburger.Soundger.entity.User; + +import java.util.Date; +import java.util.UUID; + +@Service +public class RegisterServiceImpl implements RegisterService { + + private final int tokenLifetimeInMilliseconds = 1000 * 60 * 60 * 24; + private final PasswordEncryptor passwordEncryptor; + private final AuthTokenDao authTokenDao; + + public RegisterServiceImpl(AuthTokenDao authTokenDao, PasswordEncryptor passwordEncryptor) { + this.authTokenDao = authTokenDao; + this.passwordEncryptor = passwordEncryptor; + } + + @Override + public boolean doRegister(String username, String password) { + AuthToken authToken = new AuthToken(); + authToken.setToken(UUID.randomUUID().toString()); + authToken.setExpiredAt(new Date(new Date().getTime() + tokenLifetimeInMilliseconds)); + User user = new User(); + user.setUsername(username); + user.setPassword(passwordEncryptor.encryptPassword(password)); + authToken.setUser(user); + try { + authTokenDao.saveAuthToken(authToken); + return true; + } catch (Exception e) { + throw e; + } + } +}