Advertisement
Guest User

Controller Example

a guest
Feb 4th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.18 KB | None | 0 0
  1. package org.restplanner.controllers.users;
  2.  
  3. import org.restplanner.models.databasemodels.DbUser;
  4. import org.restplanner.models.databasemodels.factorys.users.DbUserFactory;
  5. import org.restplanner.models.restmodels.RestUser;
  6. import org.restplanner.models.restmodels.RestLoginAnswer;
  7. import org.restplanner.models.restmodels.RestLogoutAnswer;
  8. import org.restplanner.models.restmodels.RestUserdata;
  9. import org.restplanner.models.validators.userdatavalidators.UserdataValidator;
  10. import org.restplanner.repositories.UserRepository;
  11. import org.restplanner.utils.RetrieveUserFromSecurityContext;
  12. import org.restplanner.utils.dbtorestconverters.users.DbUserToRestUserConverter;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.http.HttpStatus;
  15. import org.springframework.http.ResponseEntity;
  16. import org.springframework.security.core.Authentication;
  17. import org.springframework.security.core.context.SecurityContextHolder;
  18. import org.springframework.security.crypto.password.PasswordEncoder;
  19. import org.springframework.web.bind.annotation.DeleteMapping;
  20. import org.springframework.web.bind.annotation.GetMapping;
  21. import org.springframework.web.bind.annotation.PostMapping;
  22. import org.springframework.web.bind.annotation.PutMapping;
  23. import org.springframework.web.bind.annotation.RequestBody;
  24. import org.springframework.web.bind.annotation.RestController;
  25.  
  26. import net.bytebuddy.utility.RandomString;
  27.  
  28. @RestController
  29. public class UserControllerImpl implements UserController {
  30.    
  31.     private int tokenLength = 50;
  32.    
  33.     @Autowired
  34.     private UserRepository userRepository;
  35.    
  36.     @Autowired
  37.     private UserdataValidator userdataValidator;
  38.    
  39.     @Autowired
  40.     private DbUserToRestUserConverter dbToRestUserConverter;
  41.    
  42.     @Autowired
  43.     private DbUserFactory dbUserFactory;
  44.    
  45.     @Autowired
  46.     private PasswordEncoder passwordEncoder;
  47.    
  48.     @PostMapping("/login")
  49.     public ResponseEntity<RestLoginAnswer> login() {
  50.         Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  51.        
  52.         DbUser user = userRepository.findByUsername(authentication.getName());
  53.        
  54.         if(user.getApiKey() == null) {
  55.             user.setApiKey(RandomString.make(tokenLength));
  56.             userRepository.save(user);
  57.         }
  58.        
  59.         RestLoginAnswer result = new RestLoginAnswer();
  60.         result.setApiKey(user.getApiKey());
  61.         return new ResponseEntity<RestLoginAnswer>(result, HttpStatus.OK);
  62.     }
  63.    
  64.     @PostMapping("/user/logout")
  65.     public RestLogoutAnswer logout() {
  66.         DbUser user = RetrieveUserFromSecurityContext.retrieveDbUser();
  67.         user.setApiKey(null);
  68.        
  69.         userRepository.save(user);
  70.         return new RestLogoutAnswer();
  71.     }
  72.        
  73.     @PostMapping("/user")
  74.     public ResponseEntity<RestUser> createUser(@RequestBody RestUserdata registrationData) {
  75.        
  76.         String newUsername = registrationData.getUsername();
  77.         String newPassword = registrationData.getPassword();
  78.         String newEmail = registrationData.getEmail();
  79.        
  80.         this.userdataValidator.validateUsername(newUsername);
  81.         this.userdataValidator.validateUsernameAvailability(newUsername);
  82.        
  83.         this.userdataValidator.validatePassword(newPassword);
  84.         newPassword = this.passwordEncoder.encode(newPassword);
  85.        
  86.         this.userdataValidator.validateEmail(newEmail);
  87.         this.userdataValidator.validateEmailAvailability(newEmail);
  88.        
  89.         DbUser newDbUser = this.dbUserFactory.createAndSave(newUsername, newPassword, newEmail);
  90.         RestUser newRestUser = this.dbToRestUserConverter.convert(newDbUser);
  91.        
  92.         return new ResponseEntity<RestUser>(newRestUser, HttpStatus.CREATED);
  93.     }
  94.  
  95.     @DeleteMapping("/user")
  96.     public void deleteUser() {
  97.         DbUser user = RetrieveUserFromSecurityContext.retrieveDbUser();
  98.         this.userRepository.delete(user);
  99.     }
  100.    
  101.     @GetMapping("/user")
  102.     public ResponseEntity<RestUser> getUser() {
  103.         DbUser user = RetrieveUserFromSecurityContext.retrieveDbUser();
  104.         RestUser restUser = this.dbToRestUserConverter.convert(user);
  105.         return new ResponseEntity<RestUser>(restUser, HttpStatus.OK);
  106.     }
  107.    
  108.     @PutMapping("/user")
  109.     public void updateUser(@RequestBody RestUserdata updatedData) {
  110.         DbUser toEditUser = RetrieveUserFromSecurityContext.retrieveDbUser();
  111.        
  112.         String updatedUsername = updatedData.getUsername();
  113.         String updatedPassword = updatedData.getPassword();
  114.         String updatedEmail = updatedData.getEmail();
  115.        
  116.         this.userdataValidator.validateUsername(updatedUsername);  
  117.         if(this.isUsernameDifferent(toEditUser, updatedUsername))
  118.             this.userdataValidator.validateUsernameAvailability(updatedUsername);
  119.        
  120.         this.userdataValidator.validatePassword(updatedPassword);
  121.         updatedPassword = this.passwordEncoder.encode(updatedPassword);
  122.        
  123.         this.userdataValidator.validateEmail(updatedEmail);
  124.         if(this.isEmailDifferent(toEditUser, updatedEmail))
  125.             this.userdataValidator.validateEmailAvailability(updatedEmail);
  126.        
  127.         toEditUser.setUsername(updatedUsername);
  128.         toEditUser.setPassword(updatedPassword);
  129.         toEditUser.setEmail(updatedEmail);
  130.         this.userRepository.save(toEditUser);
  131.     }
  132.    
  133.     private boolean isUsernameDifferent(DbUser toEditUser, String updatedUsername) {
  134.         return !toEditUser.getUsername().equals(updatedUsername);
  135.     }
  136.    
  137.     private boolean isEmailDifferent(DbUser toEditUser, String updatedEmail) {
  138.         return !toEditUser.getEmail().equals(updatedEmail);
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement