PageRenderTime 25ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/fizjo/src/main/java/sopi/module/person/controller/UserControllerRest.java

https://gitlab.com/MarcinWorkDev/ISOP
Java | 263 lines | 209 code | 54 blank | 0 comment | 24 complexity | d03543743b22e2e9343544f63270d62c MD5 | raw file
  1. package sopi.module.person.controller;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import javax.servlet.ServletRequest;
  6. import javax.servlet.ServletResponse;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.validation.Valid;
  9. import org.joda.time.DateTime;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.http.HttpStatus;
  12. import org.springframework.http.ResponseEntity;
  13. import org.springframework.security.core.GrantedAuthority;
  14. import org.springframework.security.core.context.SecurityContextHolder;
  15. import org.springframework.web.bind.annotation.PathVariable;
  16. import org.springframework.web.bind.annotation.RequestBody;
  17. import org.springframework.web.bind.annotation.RequestMapping;
  18. import org.springframework.web.bind.annotation.RequestMethod;
  19. import org.springframework.web.bind.annotation.RequestParam;
  20. import org.springframework.web.bind.annotation.RestController;
  21. import sopi.module.auth.security.AuthUtils;
  22. import sopi.module.person.model.Profile;
  23. import sopi.module.person.model.ProfileModel;
  24. import sopi.module.person.model.Role;
  25. import sopi.module.person.model.RoleModel;
  26. import sopi.module.person.model.User;
  27. import sopi.module.person.model.UserChangePassword;
  28. import sopi.module.person.model.UserModel;
  29. import sopi.rest.StatusHelper;
  30. @RestController
  31. @RequestMapping("/api/module/user")
  32. public class UserControllerRest {
  33. @Autowired UserModel userModel;
  34. @Autowired RoleModel roleModel;
  35. @Autowired ProfileModel profileModel;
  36. @Autowired AuthUtils auth;
  37. @RequestMapping(value="*", method=RequestMethod.OPTIONS)
  38. public boolean options() {
  39. return true;
  40. }
  41. @RequestMapping(value="/get", method=RequestMethod.GET)
  42. public ResponseEntity<?> list(HttpServletRequest request) {
  43. List<User> list = new ArrayList<>();
  44. if (auth.checkRoles("ADMIN,USER")){
  45. list.addAll(userModel.getUsers());
  46. }
  47. if (list.isEmpty()){
  48. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("ACCESS_DENIED");
  49. } else {
  50. return ResponseEntity.ok(list);
  51. }
  52. }
  53. @RequestMapping(value="/get/{id}", method=RequestMethod.GET)
  54. public ResponseEntity<?> get(@PathVariable Long id, HttpServletRequest request) {
  55. if (!auth.checkRoles("ADMIN,USER")){
  56. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("ACCESS_DENIED");
  57. }
  58. return ResponseEntity.ok(userModel.getUser(id));
  59. }
  60. @RequestMapping(value="/getRoles/{id}", method=RequestMethod.GET)
  61. public List<Role> getUserRoles(@PathVariable Long id, HttpServletRequest request) {
  62. return userModel.getUserRoles(id);
  63. }
  64. @RequestMapping(value="/getRoles", method=RequestMethod.GET)
  65. public List<Role> getRoles(HttpServletRequest request) {
  66. return roleModel.getRoles();
  67. }
  68. @RequestMapping(value="/getAvailRoles/{id}", method=RequestMethod.GET)
  69. public List<Role> getAvailRoles(@PathVariable Long id, HttpServletRequest request) {
  70. List<Role> roles = roleModel.getRoles();
  71. List<Role> userRoles = userModel.getUserRoles(id);
  72. roles.removeAll(userRoles);
  73. if (!auth.checkRoles("ADMIN")){
  74. Role admin = roleModel.getRole("ADMIN");
  75. roles.remove(admin);
  76. }
  77. return roles;
  78. }
  79. @RequestMapping(value="/setUserRole/{id}/{role}", method=RequestMethod.POST)
  80. public ResponseEntity<?> setUserRole(@PathVariable Long id, @PathVariable String role, HttpServletRequest request) {
  81. if (!auth.checkRoles("ADMIN,USER")){
  82. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("ACCESS_DENIED");
  83. }
  84. List<Object> param = new ArrayList<Object>();
  85. param.add(id);
  86. param.add(role);
  87. try {
  88. userModel.setUserRole(id, role);
  89. return ResponseEntity.ok(new StatusHelper(true, "Rola została dodana", param));
  90. } catch (Exception e) {
  91. return ResponseEntity.ok(new StatusHelper(false, "Wystąpił błąd: " + e.getMessage(), param));
  92. }
  93. }
  94. @RequestMapping(value="/deleteUserRole/{id}/{role}", method=RequestMethod.DELETE)
  95. public ResponseEntity<?> deleteUserRole(@PathVariable Long id, @PathVariable String role, HttpServletRequest request){
  96. if (!auth.checkRoles("ADMIN,USER")){
  97. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("ACCESS_DENIED");
  98. }
  99. try {
  100. boolean status = userModel.deleteUserRole(id, role);
  101. return ResponseEntity.ok(new StatusHelper(true, "Rola została usunięta.", status));
  102. } catch (Exception e) {
  103. return ResponseEntity.ok(new StatusHelper(false, "Wystąpił błąd:" + e.getMessage(), null));
  104. }
  105. }
  106. @RequestMapping(value="/set/{id}", method=RequestMethod.PUT)
  107. public ResponseEntity<?> set(@PathVariable Long id, @Valid @RequestBody User user, HttpServletRequest request) {
  108. User checkUser = userModel.getUser(user.getUsername());
  109. if (!auth.checkRoles("ADMIN,USER")){
  110. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("ACCESS_DENIED");
  111. }
  112. if (id != user.getUserId()) {
  113. return ResponseEntity.ok(new StatusHelper(false, "Niezgodne numery Id! " + id.toString() + " != " + user.getUserId().toString(), user));
  114. }
  115. if (checkUser != null && checkUser.getUserId() != user.getUserId()) {
  116. return ResponseEntity.ok(new StatusHelper(false, "Podana nazwa użytkownika jest niedostępna.", user));
  117. }
  118. try {
  119. userModel.save(user);
  120. return ResponseEntity.ok(new StatusHelper(true, "Rekord został zaktualizowany.", user));
  121. } catch (Exception e) {
  122. return ResponseEntity.ok(new StatusHelper(false, "Wystąpił błąd: " + e.getLocalizedMessage(), user));
  123. }
  124. }
  125. @RequestMapping(value="/add", method=RequestMethod.POST)
  126. public ResponseEntity<?> add(@Valid @RequestBody User user, HttpServletRequest request) {
  127. if (!auth.checkRoles("ADMIN,USER")){
  128. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("ACCESS_DENIED");
  129. }
  130. if (userModel.getUser(user.getUsername()) != null){
  131. return ResponseEntity.ok(new StatusHelper(false, "Wystąpił błąd: Wybrana nazwa użytkownika jest niedostępna.",user));
  132. }
  133. if (userModel.getUser(user.getUserId()) == null) {
  134. try {
  135. userModel.saveNew(user);
  136. return ResponseEntity.ok(new StatusHelper(true, "Rekord został dodany.", user));
  137. } catch (Exception e) {
  138. return ResponseEntity.ok(new StatusHelper(false, "Wystąpił błąd: " + e.getMessage(), user));
  139. }
  140. } else {
  141. return ResponseEntity.ok(new StatusHelper(false, "Wystąpił błąd: Konto użytkownika dla wybranego profilu już istnieje.",user));
  142. }
  143. }
  144. @RequestMapping(value="/getAvailProfiles", method=RequestMethod.GET)
  145. public ResponseEntity<?> getProfiles(HttpServletRequest request) {
  146. List<Profile> profiles = profileModel.getProfileWithoutUser();
  147. if (auth.checkRoles("ADMIN,USER")){
  148. return ResponseEntity.ok(profiles);
  149. } else{
  150. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("ACCESS_DENIED");
  151. }
  152. }
  153. @RequestMapping(value="/delete/{id}")
  154. public ResponseEntity<?> deleteUser(@PathVariable Long id, HttpServletRequest request){
  155. User user = userModel.getUser(id);
  156. if (!auth.checkRoles("ADMIN,USER")){
  157. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("ACCESS_DENIED");
  158. }
  159. try {
  160. userModel.deleteUser(id);
  161. return ResponseEntity.ok(new StatusHelper(true,"Użytkownik został usunięty", id));
  162. } catch (Exception e) {
  163. return ResponseEntity.ok(new StatusHelper(false,"Wystąpił błąd: " + e.getMessage(), id));
  164. }
  165. }
  166. @RequestMapping(value="/resetPassword/{id}", method=RequestMethod.POST)
  167. public ResponseEntity<?> resetPassword(@PathVariable Long id){
  168. if (!auth.checkRoles("ADMIN,USER")){
  169. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("ACCESS_DENIED");
  170. }
  171. try {
  172. userModel.resetPassword(id);
  173. return ResponseEntity.ok(new StatusHelper(true,"Hasło zostało zresetowane", id));
  174. } catch (Exception e){
  175. return ResponseEntity.ok(new StatusHelper(false,"Wystąpił błąd: " + e.getMessage(), id));
  176. }
  177. }
  178. @RequestMapping(value="/changePassword", method=RequestMethod.POST)
  179. public ResponseEntity<?> changePassword(@RequestBody UserChangePassword userChangePassword){
  180. try {
  181. String result = userModel.changePassword(
  182. userChangePassword.getUserId(),
  183. userChangePassword.getOldPassword(),
  184. userChangePassword.getNewPassword(),
  185. userChangePassword.getConfirmPassword());
  186. return ResponseEntity.ok(result);
  187. } catch (Exception e) {
  188. return ResponseEntity.badRequest().body("Wystąpił błąd podczas zmiany hasła: " + e.getMessage());
  189. }
  190. }
  191. @RequestMapping(value="/getLogged")
  192. public User getLogged(ServletRequest request, ServletResponse response){
  193. HttpServletRequest httpRequest = (HttpServletRequest) request;
  194. String authToken = httpRequest.getHeader("X-Auth-Token");
  195. User user = userModel.getUserFromToken(authToken);
  196. return user;
  197. }
  198. @RequestMapping(value="/getLoggedRoles")
  199. public ResponseEntity<?> getLoggedRoles(ServletRequest request, ServletResponse response){
  200. HttpServletRequest httpRequest = (HttpServletRequest) request;
  201. String authToken = httpRequest.getHeader("X-Auth-Token");
  202. User user = userModel.getUserFromToken(authToken);
  203. List<String> roles = new ArrayList<>();
  204. for (GrantedAuthority role : SecurityContextHolder.getContext().getAuthentication().getAuthorities()){
  205. roles.add(role.getAuthority());
  206. }
  207. return ResponseEntity.ok(roles);
  208. }
  209. }