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 =