diff --git a/data/src/main/java/org/openmbee/mms/data/domains/global/Base.java b/data/src/main/java/org/openmbee/mms/data/domains/global/Base.java index 3adaff6a2..1d7c2abd2 100644 --- a/data/src/main/java/org/openmbee/mms/data/domains/global/Base.java +++ b/data/src/main/java/org/openmbee/mms/data/domains/global/Base.java @@ -15,7 +15,7 @@ import org.springframework.data.annotation.LastModifiedDate; @MappedSuperclass -@JsonIgnoreProperties(value = {"created", "modified"}, allowGetters = true) +@JsonIgnoreProperties(value = {"created", "modified", "id"}, allowGetters = true) public abstract class Base implements Serializable { private static final long serialVersionUID = 8389104517465359723L; diff --git a/localuser/src/main/java/org/openmbee/mms/localuser/config/AuthProviderConfig.java b/localuser/src/main/java/org/openmbee/mms/localuser/config/AuthProviderConfig.java index 8621ffaed..5116e9a3f 100644 --- a/localuser/src/main/java/org/openmbee/mms/localuser/config/AuthProviderConfig.java +++ b/localuser/src/main/java/org/openmbee/mms/localuser/config/AuthProviderConfig.java @@ -1,5 +1,6 @@ package org.openmbee.mms.localuser.config; +import org.openmbee.mms.localuser.security.UserCreateRequest; import org.openmbee.mms.localuser.security.UserDetailsServiceImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,7 +40,11 @@ public DaoAuthenticationProvider daoAuthenticationProvider() { try { userDetailsService.loadUserByUsername(adminUsername); } catch (UsernameNotFoundException e) { - userDetailsService.register(adminUsername, adminPassword, true); + UserCreateRequest req = new UserCreateRequest(); + req.setAdmin(true); + req.setPassword(adminPassword); + req.setUsername(adminUsername); + userDetailsService.register(req); logger.info(String.format("Creating root user: %s with specified password.", adminUsername)); } diff --git a/localuser/src/main/java/org/openmbee/mms/localuser/controllers/LocalUserController.java b/localuser/src/main/java/org/openmbee/mms/localuser/controllers/LocalUserController.java index 524b44a9f..eda199b8e 100644 --- a/localuser/src/main/java/org/openmbee/mms/localuser/controllers/LocalUserController.java +++ b/localuser/src/main/java/org/openmbee/mms/localuser/controllers/LocalUserController.java @@ -8,11 +8,13 @@ import org.openmbee.mms.core.utils.AuthenticationUtils; import org.openmbee.mms.localuser.security.UserCreateRequest; import org.openmbee.mms.localuser.security.UserDetailsServiceImpl; +import org.openmbee.mms.localuser.security.UsersResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.UsernameNotFoundException; +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; @@ -34,12 +36,20 @@ public UserCreateRequest createUser(@RequestBody UserCreateRequest req) { try { userDetailsService.loadUserByUsername(req.getUsername()); } catch (UsernameNotFoundException e) { - userDetailsService.register(req.getUsername(), req.getPassword(), req.isAdmin()); + userDetailsService.register(req); return req; } throw new BadRequestException("User already exists"); } + @GetMapping(value = "/users") + @PreAuthorize(AuthorizationConstants.IS_MMSADMIN) + public UsersResponse getUsers() { + UsersResponse res = new UsersResponse(); + res.setUsers(userDetailsService.getUsers()); + return res; + } + @PostMapping(value = "/password", consumes = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("isAuthenticated()") public Object updatePassword(@RequestBody UserCreateRequest req, diff --git a/localuser/src/main/java/org/openmbee/mms/localuser/security/UserCreateRequest.java b/localuser/src/main/java/org/openmbee/mms/localuser/security/UserCreateRequest.java index 48e50111b..485096140 100644 --- a/localuser/src/main/java/org/openmbee/mms/localuser/security/UserCreateRequest.java +++ b/localuser/src/main/java/org/openmbee/mms/localuser/security/UserCreateRequest.java @@ -8,8 +8,35 @@ public class UserCreateRequest implements Serializable { private String username; private String password; + private String email; + private String firstname; + private String lastname; private boolean admin; + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + public String getUsername() { return this.username; } diff --git a/localuser/src/main/java/org/openmbee/mms/localuser/security/UserDetailsServiceImpl.java b/localuser/src/main/java/org/openmbee/mms/localuser/security/UserDetailsServiceImpl.java index baef8bf6b..aaa4c13e9 100644 --- a/localuser/src/main/java/org/openmbee/mms/localuser/security/UserDetailsServiceImpl.java +++ b/localuser/src/main/java/org/openmbee/mms/localuser/security/UserDetailsServiceImpl.java @@ -1,5 +1,6 @@ package org.openmbee.mms.localuser.security; +import java.util.List; import java.util.Optional; import org.openmbee.mms.core.exceptions.ForbiddenException; @@ -39,13 +40,20 @@ public UserDetailsImpl loadUserByUsername(String username) throws UsernameNotFou return new UserDetailsImpl(user.get()); } + public List getUsers() { + return userRepository.findAll(); + } + @Transactional - public User register(String username, String password, boolean isAdmin) { + public User register(UserCreateRequest req) { User user = new User(); - user.setUsername(username); - user.setPassword(passwordEncoder.encode(password)); + user.setEmail(req.getEmail()); + user.setFirstName(req.getFirstname()); + user.setLastName(req.getLastname()); + user.setUsername(req.getUsername()); + user.setPassword(passwordEncoder.encode(req.getPassword())); user.setEnabled(true); - user.setAdmin(isAdmin); + user.setAdmin(req.isAdmin()); return userRepository.save(user); } diff --git a/localuser/src/main/java/org/openmbee/mms/localuser/security/UsersResponse.java b/localuser/src/main/java/org/openmbee/mms/localuser/security/UsersResponse.java new file mode 100644 index 000000000..f119e7cf8 --- /dev/null +++ b/localuser/src/main/java/org/openmbee/mms/localuser/security/UsersResponse.java @@ -0,0 +1,17 @@ +package org.openmbee.mms.localuser.security; + +import java.util.List; +import org.openmbee.mms.data.domains.global.User; + +public class UsersResponse { + + private List users; + + public List getUsers() { + return users; + } + + public void setUsers(List users) { + this.users = users; + } +}