From 4e0c3f7073acd3411f98f4eeb9fb7a5f9757c99b Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 12 Jan 2016 09:28:23 +0100 Subject: [PATCH] providing update feature for additional User properties in SecurityService and UserManagementService Change-Id: I46a4c2c58e35595dc20b85575a27c1cfbd639592 --- .../security/ui/client/UserManagementService.java | 2 ++ .../ui/client/UserManagementServiceAsync.java | 2 ++ .../ui/server/UserManagementServiceImpl.java | 11 +++++++++++ .../security/userstore/mongodb/UserStoreImpl.java | 2 +- .../src/com/sap/sse/security/SecurityService.java | 11 +++++++++++ .../sse/security/impl/SecurityServiceImpl.java | 15 +++++++++++++++ 6 files changed, 42 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementService.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementService.java index 01a4f952a44..0f4d7ddb0dc 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementService.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementService.java @@ -31,6 +31,8 @@ public interface UserManagementService extends RemoteService { void updateSimpleUserEmail(String username, String newEmail, String validationBaseURL) throws UserManagementException, MailException; + void updateUserProperties(String username, String fullName, String company) throws UserManagementException; + void resetPassword(String username, String eMailAddress, String baseURL) throws UserManagementException, MailException; boolean validateEmail(String username, String validationSecret) throws UserManagementException; diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementServiceAsync.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementServiceAsync.java index b2a3724b729..273369b509b 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementServiceAsync.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserManagementServiceAsync.java @@ -27,6 +27,8 @@ public interface UserManagementServiceAsync { void updateSimpleUserEmail(String username, String newEmail, String validationBaseURL, AsyncCallback callback); + void updateUserProperties(String username, String fullName, String company, AsyncCallback callback); + void getFilteredSortedUserList(String filter, AsyncCallback> callback); void setRolesForUser(String username, Iterable roles, AsyncCallback callback); diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/UserManagementServiceImpl.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/UserManagementServiceImpl.java index b7d01d7d2c9..a0d612137ef 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/UserManagementServiceImpl.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/server/UserManagementServiceImpl.java @@ -163,6 +163,17 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U } } + @Override + public void updateUserProperties(final String username, String fullName, String company) throws UserManagementException { + final Subject subject = SecurityUtils.getSubject(); + // the signed-in subject has role ADMIN or is changing own user + if (subject.hasRole(DefaultRoles.ADMIN.getRolename()) || username.equals(subject.getPrincipal().toString())) { + getSecurityService().updateUserProperties(username, fullName, company); + } else { + throw new UserManagementException(UserManagementException.INVALID_CREDENTIALS); + } + } + @Override public void updateSimpleUserEmail(String username, String newEmail, String validationBaseURL) throws UserManagementException, MailException { final Subject subject = SecurityUtils.getSubject(); diff --git a/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/UserStoreImpl.java b/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/UserStoreImpl.java index db19c10abea..28711e4b69a 100644 --- a/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/UserStoreImpl.java +++ b/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/UserStoreImpl.java @@ -183,7 +183,7 @@ public class UserStoreImpl implements UserStore { throw new UserManagementException(UserManagementException.USER_ALREADY_EXISTS); } User user = new User(name, email, accounts); - logger.info("Creating user: " + user); + logger.info("Creating user: " + user + " with e-mail "+email); if (mongoObjectFactory != null) { mongoObjectFactory.storeUser(user); } diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java index c04bab7bfef..32d36bbad80 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java @@ -7,6 +7,7 @@ import javax.servlet.ServletContext; import org.apache.shiro.cache.CacheManager; import org.apache.shiro.mgt.SecurityManager; +import org.osgi.framework.BundleContext; import com.sap.sse.common.mail.MailException; import com.sap.sse.replication.impl.ReplicableWithObjectInputStream; @@ -16,6 +17,14 @@ import com.sap.sse.security.shared.DefaultRoles; import com.sap.sse.security.shared.SocialUserAccount; import com.sap.sse.security.shared.UserManagementException; +/** + * A service interface for security management. Intended to be used as an OSGi service that can be registered, e.g., by + * {@link BundleContext#registerService(Class, Object, java.util.Dictionary)} and can be discovered by other bundles. + * + * @author Axel Uhl (D043530) + * @author Benjamin Ebling + * + */ public interface SecurityService extends ReplicableWithObjectInputStream> { SecurityManager getSecurityManager(); @@ -47,6 +56,8 @@ public interface SecurityService extends ReplicableWithObjectInputStreams.internalStoreUser(user)); } + @Override + public void updateUserProperties(String username, String fullName, String company) throws UserManagementException { + final User user = store.getUserByName(username); + if (user == null) { + throw new UserManagementException(UserManagementException.USER_DOES_NOT_EXIST); + } + updateUserProperties(user, fullName, company); + } + + private void updateUserProperties(User user, String fullName, String company) { + user.setFullName(fullName); + user.setCompany(company); + apply(s->s.internalStoreUser(user)); + } + @Override public boolean checkPassword(String username, String password) throws UserManagementException { final User user = store.getUserByName(username);