diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java index 52f556adaa6..82f6670a81a 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java @@ -386,7 +386,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt boolean result = true; UserDTO user = getUserService().getCurrentUser(); for (UserRoles enabledRole : roles) { - if (user.getRoles().contains(enabledRole.name())) { + if (user.hasRole(enabledRole.name())) { result = true; break; } diff --git a/java/com.sap.sse.security.ui/WEB-INF/web.xml b/java/com.sap.sse.security.ui/WEB-INF/web.xml index 43736ee16aa..fe70350bce8 100644 --- a/java/com.sap.sse.security.ui/WEB-INF/web.xml +++ b/java/com.sap.sse.security.ui/WEB-INF/web.xml @@ -58,5 +58,6 @@ remoteLogging /com.sap.sse.security.ui.OAuthLogin/remote_logging /com.sap.sse.security.ui.Login/remote_logging + /com.sap.sse.security.ui.UserManagement/remote_logging diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/component/RolesList.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/component/RolesList.java index d60a23cfac7..d1a41d0d826 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/component/RolesList.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/component/RolesList.java @@ -83,7 +83,10 @@ public class RolesList extends DecoratorPanel { hp.add(addRole); fp.add(hp); - rolesDataProvider = new ListDataProvider<>(userDTO.getRoles(), keyProvider); + rolesDataProvider = new ListDataProvider(); + for (String role : userDTO.getRoles()) { + rolesDataProvider.getList().add(role); + } roleList = new CellList<>(new TextCell(), keyProvider); rolesDataProvider.addDataDisplay(roleList); diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/shared/UserDTO.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/shared/UserDTO.java index 462335d7300..5f58caa8b9d 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/shared/UserDTO.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/shared/UserDTO.java @@ -1,8 +1,9 @@ package com.sap.sse.security.ui.shared; -import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Set; import com.google.gwt.user.client.rpc.IsSerializable; @@ -10,7 +11,7 @@ public class UserDTO implements IsSerializable { private String name; private String email; private List accounts; - private List roles = new ArrayList<>(); + private Set roles = new HashSet<>(); UserDTO() {} // for serialization only @@ -28,9 +29,13 @@ public class UserDTO implements IsSerializable { this.name = name; } - public List getRoles() { + public Iterable getRoles() { return roles; } + + public boolean hasRole(String role) { + return roles.contains(role); + } public void addRoles(Collection roles) { this.roles.addAll(roles); diff --git a/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/impl/DomainObjectFactoryImpl.java b/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/impl/DomainObjectFactoryImpl.java index 413fdd251fb..d801bde7e74 100644 --- a/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sse.security.userstore.mongodb/src/com/sap/sse/security/userstore/mongodb/impl/DomainObjectFactoryImpl.java @@ -80,7 +80,9 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { DBObject accountsMap = (DBObject) userDBObject.get(FieldNames.User.ACCOUNTS.name()); Map accounts = createAccountMapFromdDBObject(accountsMap); User result = new User(name, email, accounts.values()); - result.setRoles(roles); + for (String role : roles) { + result.addRole(role); + } return result; } diff --git a/java/com.sap.sse.security.userstore/src/com/sap/sse/security/userstore/shared/User.java b/java/com.sap.sse.security.userstore/src/com/sap/sse/security/userstore/shared/User.java index a5d6fcce02b..533e070c435 100644 --- a/java/com.sap.sse.security.userstore/src/com/sap/sse/security/userstore/shared/User.java +++ b/java/com.sap.sse.security.userstore/src/com/sap/sse/security/userstore/shared/User.java @@ -10,26 +10,24 @@ import java.util.concurrent.ConcurrentHashMap; import com.sap.sse.security.userstore.shared.Account.AccountType; public class User { - + private String name; - + private String email; - - private Set roles = new HashSet<>(); - private Map accounts = new ConcurrentHashMap<>(); + + private final Set roles; + private final Map accounts; public User(String name, String email, Account... accounts) { - super(); - this.name = name; - for (Account a : accounts){ - this.accounts.put(a.getAccountType(), a); - } + this(name, email, Arrays.asList(accounts)); } - + public User(String name, String email, Collection accounts) { super(); + this.roles = new HashSet<>(); + this.accounts = new ConcurrentHashMap<>(); this.name = name; - for (Account a : accounts){ + for (Account a : accounts) { this.accounts.put(a.getAccountType(), a); } } @@ -41,39 +39,35 @@ public class User { public void setName(String name) { this.name = name; } - + public Set getRoles() { return roles; } - - public void addRole(String role){ + + public void addRole(String role) { roles.add(role); } + + public boolean hasRole(String role) { + return roles.contains(role); + } - public void removeRole(String role){ + public void removeRole(String role) { roles.remove(role); } - - public Account getAccount(AccountType type){ + + public Account getAccount(AccountType type) { return accounts.get(type); } - - public void setAccount(AccountType type, Account account){ - accounts.put(type, account); - } - - public void removeAccount(AccountType type){ + + public void removeAccount(AccountType type) { accounts.remove(type); } - public Map getAllAccounts(){ + public Map getAllAccounts() { return accounts; } - public void setRoles(Set roles) { - this.roles = roles; - } - public String getEmail() { return email; } @@ -84,8 +78,9 @@ public class User { @Override public String toString() { - return "User [name=" + name + ", email=" + email + ", roles=" + Arrays.toString(roles.toArray(new String[roles.size()])) + ", accounts=" + Arrays.toString(accounts.keySet().toArray(new AccountType[accounts.size()])) + "]"; + return "User [name=" + name + ", email=" + email + ", roles=" + + Arrays.toString(roles.toArray(new String[roles.size()])) + ", accounts=" + + Arrays.toString(accounts.keySet().toArray(new AccountType[accounts.size()])) + "]"; } - - + } diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/Activator.java b/java/com.sap.sse.security/src/com/sap/sse/security/Activator.java index 2ad93372a7a..dd341b943bf 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/Activator.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/Activator.java @@ -1,5 +1,8 @@ package com.sap.sse.security; +import java.io.File; +import java.io.FileReader; +import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; @@ -27,6 +30,8 @@ public class Activator implements BundleActivator { */ private static UserStore testUserStore; + private Properties mailProperties; + public static void setTestUserStore(UserStore theTestUserStore) { testUserStore = theTestUserStore; UsernamePasswordRealm.setTestUserStore(theTestUserStore); @@ -47,6 +52,11 @@ public class Activator implements BundleActivator { * registered as an OSGi service. */ public void start(BundleContext bundleContext) throws Exception { + // Load mail properties + File propertiesfile = new File(new File(System.getProperty("jetty.home")).getParent() + + "/security.properties"); + mailProperties = new Properties(); + mailProperties.load(new FileReader(propertiesfile)); if (testUserStore != null) { createAndRegisterSecurityService(testUserStore); } else { diff --git a/java/target/configuration/monitoring.properties b/java/target/configuration/monitoring.properties index 13c15e6579c..cd08e57a4a2 100644 --- a/java/target/configuration/monitoring.properties +++ b/java/target/configuration/monitoring.properties @@ -33,7 +33,7 @@ monitor.bundles = com.sap.sailing.gwt.ui, com.sap.sailing.server.gateway, com.sa # mail configuration mail.enabled = false -mail.from = info@sapsailing.com +mail.from = noreply@sapsailing.com mail.to = axel.uhl@sap.com, axel.uhl@gmx.de, fmittag@gmx.net, spamsch@gmail.com mail.transport.protocol = smtp mail.smtp.host = 127.0.0.1 diff --git a/java/target/configuration/security.properties b/java/target/configuration/security.properties new file mode 100644 index 00000000000..794cd88a8c2 --- /dev/null +++ b/java/target/configuration/security.properties @@ -0,0 +1,9 @@ +# mail configuration, e.g., for password recovery +mail.enabled = false +mail.from = noreply@sapsailing.com +mail.transport.protocol = smtp +mail.smtp.host = 127.0.0.1 +mail.smtp.port = 25 +mail.smtp.auth = true +mail.smtp.user = +mail.smtp.password =