Guest User

Untitled

a guest
Jun 16th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.70 KB | None | 0 0
  1. package com.seelix.api.service;
  2.  
  3. import java.util.Arrays;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Optional;
  8. import java.util.stream.Collectors;
  9.  
  10. import org.apache.commons.lang3.RandomStringUtils;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.data.domain.Page;
  14. import org.springframework.data.domain.PageImpl;
  15. import org.springframework.data.domain.Pageable;
  16. import org.springframework.stereotype.Service;
  17.  
  18. import com.auth0.client.auth.AuthAPI;
  19. import com.auth0.client.mgmt.ManagementAPI;
  20. import com.auth0.client.mgmt.filter.UserFilter;
  21. import com.auth0.exception.Auth0Exception;
  22. import com.auth0.json.mgmt.users.User;
  23. import com.auth0.json.mgmt.users.UsersPage;
  24. import com.auth0.net.Request;
  25. import com.seelix.api.config.ApplicationProperties;
  26. import com.seelix.api.config.Constants;
  27. import com.seelix.api.security.AuthoritiesConstants;
  28. import com.seelix.api.security.SecurityUtils;
  29. import com.seelix.api.service.dto.UserDTO;
  30. import com.seelix.api.web.rest.errors.InternalServerErrorException;
  31.  
  32. @Service
  33. public class Auth0ManagementApiService {
  34.  
  35. private final Logger log = LoggerFactory.getLogger(Auth0ManagementApiService.class);
  36.  
  37. private final AuthAPI authAPI;
  38.  
  39. private final ManagementAPI managementAPI;
  40.  
  41. private final ApplicationProperties applicationProperties;
  42.  
  43. public static final String ROLES = "roles";
  44. public static final String LANG = "lang";
  45. public static final String PIC = "picture";
  46. public static final String GIVEN_NAME = "givenName";
  47. public static final String FAMILY_NAME = "familyName";
  48.  
  49. public Auth0ManagementApiService(AuthAPI authAPI, ManagementAPI managementAPI,
  50. ApplicationProperties applicationProperties) {
  51. this.authAPI = authAPI;
  52. this.managementAPI = managementAPI;
  53. this.applicationProperties = applicationProperties;
  54. }
  55.  
  56. public Optional<UserDTO> getCurrentUser() {
  57. return SecurityUtils.getCurrentUserLogin().map(userId -> {
  58. UserFilter userFilter = new UserFilter();
  59. userFilter.withQuery("user_id: " + userId);
  60. Request<UsersPage> requestUser = managementAPI.users().list(userFilter);
  61. try {
  62. UsersPage usersPage = requestUser.execute();
  63. if (usersPage.getItems() != null && usersPage.getItems().size() > 0) {
  64. UserDTO userDTO = new UserDTO(usersPage.getItems().get(0));
  65. return userDTO;
  66. } else {
  67. return null;
  68. }
  69. } catch (Auth0Exception e) {
  70. throw new InternalServerErrorException(e.getMessage());
  71. }
  72. });
  73. }
  74.  
  75. public Optional<User> findOneByLogin(String login) throws Auth0Exception {
  76. UserFilter userFilter = new UserFilter();
  77. userFilter.withQuery("username: " + login);
  78. Request<UsersPage> requestUser = managementAPI.users().list(userFilter);
  79. UsersPage usersPage = requestUser.execute();
  80. if (usersPage.getItems() != null && usersPage.getItems().size() > 0) {
  81. return Optional.of(usersPage.getItems().get(0));
  82. } else {
  83. return Optional.empty();
  84. }
  85. }
  86.  
  87. public Optional<User> findOneByUserId(String userId) throws Auth0Exception {
  88. UserFilter userFilter = new UserFilter();
  89. userFilter.withQuery("user_id: " + userId);
  90. Request<UsersPage> requestUser = managementAPI.users().list(userFilter);
  91. UsersPage usersPage = requestUser.execute();
  92. if (usersPage.getItems() != null && usersPage.getItems().size() > 0) {
  93. return Optional.of(usersPage.getItems().get(0));
  94. } else {
  95. return Optional.empty();
  96. }
  97. }
  98.  
  99. public Optional<User> findOneByEmailIgnoreCase(String email) throws Auth0Exception {
  100. UserFilter userFilter = new UserFilter();
  101. // auth0 save the email in lowercase
  102. userFilter.withQuery("email: " + email.toLowerCase());
  103. Request<UsersPage> requestUser = managementAPI.users().list(userFilter);
  104. UsersPage usersPage = requestUser.execute();
  105. if (usersPage.getItems() != null && usersPage.getItems().size() > 0) {
  106. return Optional.of(usersPage.getItems().get(0));
  107. } else {
  108. return Optional.empty();
  109. }
  110. }
  111.  
  112. public User registerUser(UserDTO userDTO, String password) throws Auth0Exception {
  113.  
  114. User newUser = new User();
  115. Map<String, Object> userMetadata = new HashMap<String, Object>();
  116. Map<String, Object> appMetadata = new HashMap<String, Object>();
  117.  
  118. newUser.setUsername(userDTO.getLogin());
  119. newUser.setPassword(password);
  120. newUser.setGivenName(userDTO.getFirstName());
  121. userMetadata.put(GIVEN_NAME, userDTO.getFirstName());
  122. newUser.setFamilyName(userDTO.getLastName());
  123. userMetadata.put(FAMILY_NAME, userDTO.getLastName());
  124. newUser.setEmail(userDTO.getEmail());
  125. userMetadata.put(LANG, userDTO.getLangKey());
  126. userMetadata.put(PIC, userDTO.getImageUrl());
  127. newUser.setEmailVerified(false);
  128. appMetadata.put(ROLES, Arrays.asList(AuthoritiesConstants.USER.toString()));
  129.  
  130. newUser.setAppMetadata(appMetadata);
  131.  
  132. newUser.setConnection(
  133. applicationProperties.getSecurity().getAuthentication().getAuth0().getManagement().getConnection());
  134.  
  135. Request<User> requestUser = managementAPI.users().create(newUser);
  136. User user = requestUser.execute();
  137.  
  138. log.debug("Created Information for User: {}", user);
  139.  
  140. return user;
  141. }
  142.  
  143. public UserDTO createUser(UserDTO userDTO) throws Auth0Exception {
  144. User newUser = new User();
  145. Map<String, Object> userMetadata = new HashMap<String, Object>();
  146. Map<String, Object> appMetadata = new HashMap<String, Object>();
  147.  
  148. newUser.setUsername(userDTO.getLogin());
  149. // newUser.setPassword(password);
  150. newUser.setGivenName(userDTO.getFirstName());
  151. userMetadata.put(GIVEN_NAME, userDTO.getFirstName());
  152. newUser.setFamilyName(userDTO.getLastName());
  153. userMetadata.put(FAMILY_NAME, userDTO.getLastName());
  154. newUser.setEmail(userDTO.getEmail());
  155. if (userDTO.getLangKey() == null) {
  156. // default language
  157. userMetadata.put(LANG, Constants.DEFAULT_LANGUAGE);
  158. } else {
  159. userMetadata.put(LANG, userDTO.getLangKey());
  160. }
  161. userMetadata.put(PIC, userDTO.getImageUrl());
  162. newUser.setEmailVerified(true);
  163. newUser.setPassword(RandomStringUtils.random(6));
  164. appMetadata.put(ROLES, userDTO.getAuthorities());
  165.  
  166. newUser.setAppMetadata(appMetadata);
  167.  
  168. newUser.setConnection(
  169. applicationProperties.getSecurity().getAuthentication().getAuth0().getManagement().getConnection());
  170.  
  171. Request<User> requestUser = managementAPI.users().create(newUser);
  172. User user = requestUser.execute();
  173. log.debug("Created Information for User: {}", user);
  174.  
  175. // send email to ask user to change password
  176. Request<?> resetPassword = authAPI.resetPassword(user.getEmail(),
  177. applicationProperties.getSecurity().getAuthentication().getAuth0().getManagement().getConnection());
  178. resetPassword.execute();
  179.  
  180. return new UserDTO(user);
  181. }
  182.  
  183. /**
  184. * Update basic information (first name, last name, email, language) for the
  185. * current user.
  186. *
  187. * @param firstName
  188. * first name of user
  189. * @param lastName
  190. * last name of user
  191. * @param email
  192. * email id of user
  193. * @param langKey
  194. * language key
  195. * @param imageUrl
  196. * image URL of user
  197. */
  198. public void updateUser(String firstName, String lastName, String email, String langKey, String imageUrl) {
  199. SecurityUtils.getCurrentUserLogin().ifPresent(userId -> {
  200. User user = new User();
  201. Map<String, Object> userMetadata = new HashMap<String, Object>();
  202.  
  203. user.setConnection(
  204. applicationProperties.getSecurity().getAuthentication().getAuth0().getManagement().getConnection());
  205. user.setClientId(
  206. applicationProperties.getSecurity().getAuthentication().getAuth0().getManagement().getClientId());
  207.  
  208. user.setEmail(email);
  209. userMetadata.put(GIVEN_NAME, firstName);
  210. userMetadata.put(FAMILY_NAME, lastName);
  211. userMetadata.put(LANG, langKey);
  212. userMetadata.put(PIC, imageUrl);
  213.  
  214. user.setUserMetadata(userMetadata);
  215. Request<User> requestUser = managementAPI.users().update(userId, user);
  216. try {
  217. user = requestUser.execute();
  218. log.debug("Changed Information for User: {}", user);
  219. } catch (Auth0Exception e) {
  220. throw new InternalServerErrorException(e.getMessage());
  221. }
  222. });
  223. }
  224.  
  225. /**
  226. * Update all information for a specific user, and return the modified user.
  227. *
  228. * @param userDTO
  229. * user to update
  230. * @return updated user
  231. */
  232. public Optional<UserDTO> updateUser(UserDTO userDTO) {
  233. return SecurityUtils.getCurrentUserLogin().map(userId -> {
  234. User user = new User();
  235. Map<String, Object> userMetadata = new HashMap<String, Object>();
  236.  
  237. user.setConnection(
  238. applicationProperties.getSecurity().getAuthentication().getAuth0().getManagement().getConnection());
  239. user.setClientId(
  240. applicationProperties.getSecurity().getAuthentication().getAuth0().getManagement().getClientId());
  241. user.setUsername(userDTO.getLogin());
  242. user.setEmail(userDTO.getEmail());
  243. userMetadata.put(GIVEN_NAME, userDTO.getFirstName());
  244. userMetadata.put(FAMILY_NAME, userDTO.getLastName());
  245. userMetadata.put(LANG, userDTO.getLangKey());
  246. userMetadata.put(PIC, userDTO.getImageUrl());
  247.  
  248. user.setUserMetadata(userMetadata);
  249. Request<User> requestUser = managementAPI.users().update(userId, user);
  250. try {
  251. user = requestUser.execute();
  252. log.debug("Changed Information for User: {}", user);
  253. return user;
  254. } catch (Auth0Exception e) {
  255. throw new InternalServerErrorException(e.getMessage());
  256. }
  257. }).map(UserDTO::new);
  258. }
  259.  
  260. public void deleteUser(String login) {
  261. try {
  262. this.findOneByLogin(login).ifPresent(user -> {
  263. Request<?> request = managementAPI.users().delete(login);
  264. try {
  265. request.execute();
  266. log.debug("Deleted User: {}", user);
  267. } catch (Auth0Exception e) {
  268. throw new InternalServerErrorException(e.getMessage());
  269. }
  270. });
  271. } catch (Auth0Exception e) {
  272. throw new InternalServerErrorException(e.getMessage());
  273. }
  274. }
  275.  
  276. public void changePassword(String password) {
  277. SecurityUtils.getCurrentUserLogin().ifPresent(userId -> {
  278. User user = new User();
  279. user.setConnection(
  280. applicationProperties.getSecurity().getAuthentication().getAuth0().getManagement().getConnection());
  281.  
  282. user.setPassword(password);
  283.  
  284. Request<User> requestUser = managementAPI.users().update(userId, user);
  285. try {
  286. user = requestUser.execute();
  287. log.debug("Changed Password for User: {}", user);
  288. } catch (Auth0Exception e) {
  289. throw new InternalServerErrorException(e.getMessage());
  290. }
  291. });
  292.  
  293. }
  294.  
  295. public Page<UserDTO> getAllManagedUsers(Pageable pageable) {
  296. UserFilter userFilter = new UserFilter();
  297. userFilter.withPage(pageable.getPageNumber(), pageable.getPageSize());
  298. Request<UsersPage> requestUser = managementAPI.users().list(userFilter);
  299. try {
  300. UsersPage usersPage = requestUser.execute();
  301. List<UserDTO> list = usersPage.getItems().stream().map(user -> {
  302. return new UserDTO(user);
  303. }).collect(Collectors.toList());
  304. Page<UserDTO> result = new PageImpl<UserDTO>(list, pageable, usersPage.getTotal());
  305. return result;
  306. } catch (Auth0Exception e) {
  307. throw new InternalServerErrorException(e.getMessage());
  308. }
  309. }
  310.  
  311. }
Add Comment
Please, Sign In to add comment