Improve Security
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 11 Feb 2011 10:13:32 +0000 (10:13 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 11 Feb 2011 10:13:32 +0000 (10:13 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4127 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

15 files changed:
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/AddRole.java
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.java
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/DefaultUserMainPage.java
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/RolesView.java
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/UsersView.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityDao.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityService.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/CurrentUserService.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/SimpleArgeoUser.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/UserAdminService.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/ArgeoSecurityDaoLdap.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/InfrastructureUserNature.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/PosixAccountNature.java [new file with mode: 0644]
security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/UsersRolesController.java

index 4581e8249de0dbfe25c0625e1748a55c37b2be9b..1873a13911186b5f68375f2b2b75ba2652a420df 100644 (file)
@@ -26,7 +26,7 @@ public class AddRole extends AbstractHandler {
                role = role.trim().toUpperCase();
                if (!role.startsWith(rolePrefix))
                        role = rolePrefix + role;
-               if (securityService.getSecurityDao().listEditableRoles().contains(role))
+               if (securityService.listEditableRoles().contains(role))
                        throw new ArgeoException("Role " + role + " already exists");
                securityService.newRole(role);
                rolesView.refresh();
index 80abbe7f462f9331d2f54dc5c83dc1b7178f1e3f..99a4652a93910eeb591715808d4929c94669c44c 100644 (file)
@@ -28,7 +28,7 @@ public class ArgeoUserEditor extends FormEditor {
                        user.getUserNatures().put(SimpleUserNature.TYPE,
                                        new SimpleUserNature());
                } else
-                       user = securityService.getSecurityDao().getUser(username);
+                       user = securityService.getUser(username);
                this.setPartProperty("name", username != null ? username : "<new user>");
                setPartName(username != null ? username : "<new user>");
        }
@@ -48,7 +48,7 @@ public class ArgeoUserEditor extends FormEditor {
                // TODO: make it more generic
                findPage(DefaultUserMainPage.ID).doSave(monitor);
 
-               if (securityService.getSecurityDao().userExists(user.getUsername()))
+               if (securityService.userExists(user.getUsername()))
                        securityService.updateUser(user);
                else {
                        securityService.newUser(user);
index 696d23d6d2a4cebcb53ff068d4e141c76719bbec..6180de49ad871c37e8cf1bc56c297df9e63ab0ba 100644 (file)
@@ -279,8 +279,7 @@ public class DefaultUserMainPage extends FormPage {
 
        private class RolesContentProvider implements IStructuredContentProvider {
                public Object[] getElements(Object inputElement) {
-                       return securityService.getSecurityDao().listEditableRoles()
-                                       .toArray();
+                       return securityService.listEditableRoles().toArray();
                }
 
                public void dispose() {
index 635525cbe0c4662ad4f41fc1eccffd5597858814..a58675e4b0a1f01d0c4f8ecdfe7c3269a30b1b86 100644 (file)
@@ -103,8 +103,7 @@ public class RolesView extends ViewPart {
        private class RolesContentProvider implements IStructuredContentProvider {
 
                public Object[] getElements(Object inputElement) {
-                       return securityService.getSecurityDao().listEditableRoles()
-                                       .toArray();
+                       return securityService.listEditableRoles().toArray();
                }
 
                public void dispose() {
index a00bbc2857fa792267f15bed3b456cc48924f593..d77ad0e07f154471f1f9fc71976cc4ef4d09a3b8 100644 (file)
@@ -89,7 +89,7 @@ public class UsersView extends ViewPart {
        private class UsersContentProvider implements IStructuredContentProvider {
 
                public Object[] getElements(Object inputElement) {
-                       return securityService.getSecurityDao().listUsers().toArray();
+                       return securityService.listUsers().toArray();
                }
 
                public void dispose() {
index 67025dc5da3f37f9c7fe0e9c3abcc3f83bd2ed2e..67c4cb2ec39e9e315e3c2fa486aa9b72914020ed 100644 (file)
@@ -16,7 +16,7 @@
 
 package org.argeo.security;
 
-import java.util.List;
+import java.util.Set;
 
 /**
  * Access to the users and roles referential (dependent from the underlying
@@ -26,20 +26,20 @@ public interface ArgeoSecurityDao {
        // public ArgeoUser getCurrentUser();
 
        /** List all users */
-       public List<ArgeoUser> listUsers();
+       public Set<ArgeoUser> listUsers();
 
        /** List roles that can be modified */
-       public List<String> listEditableRoles();
+       public Set<String> listEditableRoles();
 
        /**
         * Creates a new user in the underlying storage. <b>DO NOT CALL DIRECTLY</b>
         * use {@link ArgeoSecurityService#newUser(ArgeoUser)} instead.
         */
-       public void create(ArgeoUser user);
+       public void createUser(ArgeoUser user);
 
-       public void update(ArgeoUser user);
+       public void updateUser(ArgeoUser user);
 
-       public void delete(String username);
+       public void deleteUser(String username);
 
        /**
         * Creates a new role in the underlying storage. <b>DO NOT CALL DIRECTLY</b>
@@ -50,7 +50,7 @@ public interface ArgeoSecurityDao {
        public void deleteRole(String role);
 
        /** List all users having this role. */
-       public List<ArgeoUser> listUsersInRole(String role);
+       public Set<ArgeoUser> listUsersInRole(String role);
 
        public Boolean userExists(String username);
 
index 732ec72c2c8caacf20737344a3e1ffdd4f80d11e..76933e0e566d670f0b1254700edb36af5a11a866 100644 (file)
 
 package org.argeo.security;
 
-import java.util.List;
 
 /**
  * High level access to the user referential (independent from the underlying
  * storage).
  */
-public interface ArgeoSecurityService {
-       public ArgeoUser getCurrentUser();
-
-       public void newUser(ArgeoUser argeoUser);
-
-       public void updateUser(ArgeoUser user);
-
-       public void updateUserPassword(String username, String password);
-
-       public void updateCurrentUserPassword(String oldPassword, String newPassword);
-
-       public void newRole(String role);
-
-       public ArgeoSecurityDao getSecurityDao();
-
-       public Runnable wrapWithSystemAuthentication(final Runnable runnable);
-       
-       /** List users having this role (except the super user). */
-       public List<ArgeoUser> listUsersInRole(String role);
-
+public interface ArgeoSecurityService extends CurrentUserService,
+               UserAdminService {
 }
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/CurrentUserService.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/CurrentUserService.java
new file mode 100644 (file)
index 0000000..0cdae48
--- /dev/null
@@ -0,0 +1,12 @@
+package org.argeo.security;
+
+import java.util.Map;
+
+public interface CurrentUserService {
+       public ArgeoUser getCurrentUser();
+
+       public void updateCurrentUserPassword(String oldPassword, String newPassword);
+
+       public void updateCurrentUserNatures(Map<String, UserNature> userNatures);
+
+}
index ca7229c2b27cef7770295f84500ba54d98ccd2b8..c021f8e4453a8e1ae61975c7839c644c9f9d7288 100644 (file)
@@ -28,7 +28,8 @@ import org.argeo.ArgeoException;
  * Read-write implementation of an Argeo user. Typically initialized with a
  * generic instance (read-only9 in order to modify a user.
  */
-public class SimpleArgeoUser implements ArgeoUser, Serializable {
+public class SimpleArgeoUser implements ArgeoUser, Serializable,
+               Comparable<ArgeoUser> {
        private static final long serialVersionUID = 1L;
 
        private String username;
@@ -70,24 +71,27 @@ public class SimpleArgeoUser implements ArgeoUser, Serializable {
                                                "Could not find a user nature of type " + type);
                }
 
-               // for (int i = 0; i < userNatures.size(); i++) {
-               // String type = userNatures.get(i).getType();
-               // boolean found = false;
-               // for (int j = 0; j < userNatures.size(); j++) {
-               // String newType = userNaturesData.get(j).getType();
-               // if (type.equals(newType))
-               // found = true;
-               // }
-               // if (!found)
-               // throw new ArgeoException(
-               // "Could not find a user nature of type " + type);
-               // }
-
                for (String key : userNatures.keySet()) {
                        userNatures.put(key, userNaturesData.get(key));
                }
        }
 
+       @Override
+       public boolean equals(Object obj) {
+               if (!(obj instanceof ArgeoUser))
+                       return false;
+               return ((ArgeoUser) obj).getUsername().equals(username);
+       }
+
+       public int compareTo(ArgeoUser o) {
+               return username.compareTo(o.getUsername());
+       }
+
+       @Override
+       public int hashCode() {
+               return username.hashCode();
+       }
+
        @Override
        public String toString() {
                return username;
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/UserAdminService.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/UserAdminService.java
new file mode 100644 (file)
index 0000000..47ea65e
--- /dev/null
@@ -0,0 +1,39 @@
+package org.argeo.security;
+
+import java.util.Set;
+
+public interface UserAdminService {
+       /*
+        * USERS
+        */
+       public void newUser(ArgeoUser argeoUser);
+
+       public ArgeoUser getUser(String username);
+
+       public Set<ArgeoUser> listUsers();
+
+       public Boolean userExists(String username);
+
+       public void updateUser(ArgeoUser user);
+
+       public void updateUserPassword(String username, String password);
+
+       /** List users having this role (except the super user). */
+       public Set<ArgeoUser> listUsersInRole(String role);
+
+       public void deleteUser(String username);
+
+       /*
+        * ROLES
+        */
+       public void newRole(String role);
+
+       public Set<String> listEditableRoles();
+
+       public void deleteRole(String role);
+
+       /*
+        * SYSTEM
+        */
+       public Runnable wrapWithSystemAuthentication(final Runnable runnable);
+}
index b9b85087b31f45c1b15786e918eb2d9f5e60bc29..e005e1ad4fac8bcb794417a56322c25381141078 100644 (file)
@@ -17,7 +17,8 @@
 package org.argeo.security.core;
 
 import java.util.Iterator;
-import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.argeo.ArgeoException;
 import org.argeo.security.ArgeoSecurity;
@@ -25,6 +26,7 @@ import org.argeo.security.ArgeoSecurityDao;
 import org.argeo.security.ArgeoSecurityService;
 import org.argeo.security.ArgeoUser;
 import org.argeo.security.SimpleArgeoUser;
+import org.argeo.security.UserNature;
 import org.springframework.core.task.SimpleAsyncTaskExecutor;
 import org.springframework.core.task.TaskExecutor;
 import org.springframework.security.Authentication;
@@ -60,7 +62,7 @@ public class DefaultSecurityService implements ArgeoSecurityService {
                SimpleArgeoUser user = new SimpleArgeoUser(
                                securityDao.getUser(username));
                user.setPassword(securityDao.encodePassword(password));
-               securityDao.update(user);
+               securityDao.updateUser(user);
        }
 
        public void updateCurrentUserPassword(String oldPassword, String newPassword) {
@@ -68,7 +70,7 @@ public class DefaultSecurityService implements ArgeoSecurityService {
                if (!securityDao.isPasswordValid(user.getPassword(), oldPassword))
                        throw new ArgeoException("Old password is not correct.");
                user.setPassword(securityDao.encodePassword(newPassword));
-               securityDao.update(user);
+               securityDao.updateUser(user);
        }
 
        public void newUser(ArgeoUser user) {
@@ -82,7 +84,15 @@ public class DefaultSecurityService implements ArgeoSecurityService {
                                ((SimpleArgeoUser) user).setPassword(securityDao
                                                .encodePassword(user.getPassword()));
                }
-               securityDao.create(user);
+               securityDao.createUser(user);
+       }
+
+       public ArgeoUser getUser(String username) {
+               return securityDao.getUser(username);
+       }
+
+       public Boolean userExists(String username) {
+               return securityDao.userExists(username);
        }
 
        public void updateUser(ArgeoUser user) {
@@ -94,7 +104,16 @@ public class DefaultSecurityService implements ArgeoSecurityService {
                        password = securityDao.encodePassword(user.getPassword());
                SimpleArgeoUser simpleArgeoUser = new SimpleArgeoUser(user);
                simpleArgeoUser.setPassword(password);
-               securityDao.update(simpleArgeoUser);
+               securityDao.updateUser(simpleArgeoUser);
+       }
+
+       public void deleteUser(String username) {
+               securityDao.deleteUser(username);
+
+       }
+
+       public void deleteRole(String role) {
+               securityDao.deleteRole(role);
        }
 
        public TaskExecutor createSystemAuthenticatedTaskExecutor() {
@@ -130,8 +149,8 @@ public class DefaultSecurityService implements ArgeoSecurityService {
                };
        }
 
-       public List<ArgeoUser> listUsersInRole(String role) {
-               List<ArgeoUser> lst = securityDao.listUsersInRole(role);
+       public Set<ArgeoUser> listUsersInRole(String role) {
+               Set<ArgeoUser> lst = securityDao.listUsersInRole(role);
                Iterator<ArgeoUser> it = lst.iterator();
                while (it.hasNext()) {
                        if (it.next().getUsername()
@@ -143,6 +162,20 @@ public class DefaultSecurityService implements ArgeoSecurityService {
                return lst;
        }
 
+       public void updateCurrentUserNatures(Map<String, UserNature> userNatures) {
+               // TODO Auto-generated method stub
+
+       }
+
+       public Set<ArgeoUser> listUsers() {
+               return securityDao.listUsers();
+       }
+
+       public Set<String> listEditableRoles() {
+               // TODO Auto-generated method stub
+               return securityDao.listEditableRoles();
+       }
+
        public void setArgeoSecurity(ArgeoSecurity argeoSecurity) {
                this.argeoSecurity = argeoSecurity;
        }
index 6aa31bbdc6620ef05dd8e354af0df6a0ca7f9718..bf4beb0e8bfa00299bfdbf83528245ca564018bf 100644 (file)
@@ -20,9 +20,11 @@ import static org.argeo.security.core.ArgeoUserDetails.createSimpleArgeoUser;
 
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Random;
+import java.util.Set;
+import java.util.TreeSet;
 
 import javax.naming.Name;
 import javax.naming.NamingException;
@@ -130,7 +132,7 @@ public class ArgeoSecurityDaoLdap implements ArgeoSecurityDao, InitializingBean
                }
        }
 
-       public synchronized void create(ArgeoUser user) {
+       public synchronized void createUser(ArgeoUser user) {
                userDetailsManager.createUser(new ArgeoUserDetails(user));
        }
 
@@ -154,7 +156,7 @@ public class ArgeoSecurityDaoLdap implements ArgeoSecurityDao, InitializingBean
        // }
 
        @SuppressWarnings("unchecked")
-       public synchronized List<ArgeoUser> listUsers() {
+       public synchronized Set<ArgeoUser> listUsers() {
                List<String> usernames = (List<String>) ldapTemplate.listBindings(
                                new DistinguishedName(userBase), new ContextMapper() {
                                        public Object mapFromContext(Object ctxArg) {
@@ -163,47 +165,47 @@ public class ArgeoSecurityDaoLdap implements ArgeoSecurityDao, InitializingBean
                                        }
                                });
 
-               List<ArgeoUser> lst = new ArrayList<ArgeoUser>();
+               TreeSet<ArgeoUser> lst = new TreeSet<ArgeoUser>();
                for (String username : usernames) {
                        lst.add(createSimpleArgeoUser(getDetails(username)));
                }
-               return lst;
+               return Collections.unmodifiableSortedSet(lst);
        }
 
        @SuppressWarnings("unchecked")
-       public List<String> listEditableRoles() {
-               return (List<String>) ldapTemplate.listBindings(groupBase,
-                               new ContextMapper() {
+       public Set<String> listEditableRoles() {
+               return Collections.unmodifiableSortedSet(new TreeSet<String>(
+                               ldapTemplate.listBindings(groupBase, new ContextMapper() {
                                        public Object mapFromContext(Object ctxArg) {
                                                String groupName = ((DirContextAdapter) ctxArg)
                                                                .getStringAttribute(groupRoleAttributeName);
                                                String roleName = convertGroupToRole(groupName);
                                                return roleName;
                                        }
-                               });
+                               })));
        }
 
        @SuppressWarnings("unchecked")
-       public List<ArgeoUser> listUsersInRole(String role) {
-               return (List<ArgeoUser>) ldapTemplate.lookup(
+       public Set<ArgeoUser> listUsersInRole(String role) {
+               return (Set<ArgeoUser>) ldapTemplate.lookup(
                                buildGroupDn(convertRoleToGroup(role)), new ContextMapper() {
                                        public Object mapFromContext(Object ctxArg) {
                                                DirContextAdapter ctx = (DirContextAdapter) ctxArg;
                                                String[] userDns = ctx
                                                                .getStringAttributes(groupMemberAttributeName);
-                                               List<ArgeoUser> lst = new ArrayList<ArgeoUser>();
+                                               TreeSet<ArgeoUser> set = new TreeSet<ArgeoUser>();
                                                for (String userDn : userDns) {
                                                        DistinguishedName dn = new DistinguishedName(userDn);
                                                        String username = dn
                                                                        .getValue(usernameAttributeName);
-                                                       lst.add(createSimpleArgeoUser(getDetails(username)));
+                                                       set.add(createSimpleArgeoUser(getDetails(username)));
                                                }
-                                               return lst;
+                                               return Collections.unmodifiableSortedSet(set);
                                        }
                                });
        }
 
-       public synchronized void update(ArgeoUser user) {
+       public synchronized void updateUser(ArgeoUser user) {
                ArgeoUserDetails argeoUserDetails = new ArgeoUserDetails(user);
                userDetailsManager.updateUser(new ArgeoUserDetails(user));
                // refresh logged in user
@@ -215,7 +217,7 @@ public class ArgeoSecurityDaoLdap implements ArgeoSecurityDao, InitializingBean
                }
        }
 
-       public synchronized void delete(String username) {
+       public synchronized void deleteUser(String username) {
                userDetailsManager.deleteUser(username);
        }
 
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/InfrastructureUserNature.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/InfrastructureUserNature.java
new file mode 100644 (file)
index 0000000..08ac376
--- /dev/null
@@ -0,0 +1,67 @@
+package org.argeo.security.nature;
+
+import org.argeo.security.AbstractUserNature;
+
+/**
+ * Argeo infrastructure user nature. People with access to the infrastructure
+ * must be properly identified.
+ */
+public class InfrastructureUserNature extends AbstractUserNature {
+       private static final long serialVersionUID = 1L;
+
+       private String mobile;
+       private String telephoneNumber;
+       private String postalAddress;
+       private String postalCode;
+       private String city;
+       private String countryCode;
+
+       public String getMobile() {
+               return mobile;
+       }
+
+       public void setMobile(String mobile) {
+               this.mobile = mobile;
+       }
+
+       public String getTelephoneNumber() {
+               return telephoneNumber;
+       }
+
+       public void setTelephoneNumber(String telephoneNumber) {
+               this.telephoneNumber = telephoneNumber;
+       }
+
+       public String getPostalAddress() {
+               return postalAddress;
+       }
+
+       public void setPostalAddress(String postalAddress) {
+               this.postalAddress = postalAddress;
+       }
+
+       public String getPostalCode() {
+               return postalCode;
+       }
+
+       public void setPostalCode(String postalCode) {
+               this.postalCode = postalCode;
+       }
+
+       public String getCity() {
+               return city;
+       }
+
+       public void setCity(String city) {
+               this.city = city;
+       }
+
+       public String getCountryCode() {
+               return countryCode;
+       }
+
+       public void setCountryCode(String countryCode) {
+               this.countryCode = countryCode;
+       }
+
+}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/PosixAccountNature.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/PosixAccountNature.java
new file mode 100644 (file)
index 0000000..3984ffe
--- /dev/null
@@ -0,0 +1,45 @@
+package org.argeo.security.nature;
+
+import org.argeo.security.AbstractUserNature;
+
+/** User with access to POSIX operating systems*/
+public class PosixAccountNature extends AbstractUserNature {
+       private static final long serialVersionUID = 1L;
+
+       private Integer uidNumber;
+       private Integer gidNumber;
+       private String homeDirectory;
+       private String authorizedKeys;
+
+       public Integer getUidNumber() {
+               return uidNumber;
+       }
+
+       public void setUidNumber(Integer uidNumber) {
+               this.uidNumber = uidNumber;
+       }
+
+       public Integer getGidNumber() {
+               return gidNumber;
+       }
+
+       public void setGidNumber(Integer gidNumber) {
+               this.gidNumber = gidNumber;
+       }
+
+       public String getHomeDirectory() {
+               return homeDirectory;
+       }
+
+       public void setHomeDirectory(String homeDirectory) {
+               this.homeDirectory = homeDirectory;
+       }
+
+       public String getAuthorizedKeys() {
+               return authorizedKeys;
+       }
+
+       public void setAuthorizedKeys(String authorizedKeys) {
+               this.authorizedKeys = authorizedKeys;
+       }
+}
index cd954644aecff4ddb4e266efcf85fe2aad3173b2..f2da2be6ae4c3c6cbbca749856a3dc8e75165dbe 100644 (file)
 package org.argeo.security.mvc;
 
 import java.io.Reader;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.List;
+import java.util.Set;
 
-import org.apache.commons.codec.binary.Base64;
 import org.argeo.security.ArgeoSecurityService;
 import org.argeo.security.ArgeoUser;
 import org.argeo.security.SimpleArgeoUser;
@@ -39,7 +36,7 @@ public class UsersRolesController implements MvcConstants {
        // private final static Log log = LogFactory
        // .getLog(UsersRolesController.class);
 
-       private String digestType = "SHA";
+       // private String digestType = "SHA";
 
        private ArgeoSecurityService securityService;
 
@@ -59,14 +56,13 @@ public class UsersRolesController implements MvcConstants {
 
        @RequestMapping("/getUsersList.*")
        @ModelAttribute("users")
-       public List<ArgeoUser> getUsersList() {
-               return securityService.getSecurityDao().listUsers();
+       public Set<ArgeoUser> getUsersList() {
+               return securityService.listUsers();
        }
 
        @RequestMapping("/userExists.*")
        public BooleanAnswer userExists(@RequestParam("username") String username) {
-               return new BooleanAnswer(securityService.getSecurityDao().userExists(
-                               username));
+               return new BooleanAnswer(securityService.userExists(username));
        }
 
        @RequestMapping("/createUser.*")
@@ -76,7 +72,7 @@ public class UsersRolesController implements MvcConstants {
                                SimpleArgeoUser.class);
                // cleanUserBeforeCreate(user);
                securityService.newUser(user);
-               return securityService.getSecurityDao().getUser(user.getUsername());
+               return securityService.getUser(user.getUsername());
        }
 
        @RequestMapping("/updateUser.*")
@@ -85,7 +81,7 @@ public class UsersRolesController implements MvcConstants {
                ArgeoUser user = userDeserializer.deserialize(reader,
                                SimpleArgeoUser.class);
                securityService.updateUser(user);
-               return securityService.getSecurityDao().getUser(user.getUsername());
+               return securityService.getUser(user.getUsername());
        }
 
        @RequestMapping("/updateUserSelf.*")
@@ -97,26 +93,26 @@ public class UsersRolesController implements MvcConstants {
                                SimpleArgeoUser.class);
                user.updateUserNatures(userForNatures.getUserNatures());
                securityService.updateUser(user);
-               return securityService.getSecurityDao().getUser(user.getUsername());
+               return securityService.getUser(user.getUsername());
        }
 
        @RequestMapping("/deleteUser.*")
        public ServerAnswer deleteUser(@RequestParam("username") String username) {
-               securityService.getSecurityDao().delete(username);
+               securityService.deleteUser(username);
                return ServerAnswer.ok("User " + username + " deleted");
        }
 
        @RequestMapping("/getUserDetails.*")
        @ModelAttribute("user")
        public ArgeoUser getUserDetails(@RequestParam("username") String username) {
-               return securityService.getSecurityDao().getUser(username);
+               return securityService.getUser(username);
        }
 
        /* ROLE */
        @RequestMapping("/getRolesList.*")
        @ModelAttribute("roles")
-       public List<String> getEditableRolesList() {
-               return securityService.getSecurityDao().listEditableRoles();
+       public Set<String> getEditableRolesList() {
+               return securityService.listEditableRoles();
        }
 
        @RequestMapping("/createRole.*")
@@ -127,7 +123,7 @@ public class UsersRolesController implements MvcConstants {
 
        @RequestMapping("/deleteRole.*")
        public ServerAnswer deleteRole(@RequestParam("role") String role) {
-               securityService.getSecurityDao().deleteRole(role);
+               securityService.deleteRole(role);
                return ServerAnswer.ok("Role " + role + " deleted");
        }
 
@@ -135,8 +131,7 @@ public class UsersRolesController implements MvcConstants {
        public ServerAnswer updateUserPassword(
                        @RequestParam("username") String username,
                        @RequestParam("password") String password) {
-               securityService.updateUserPassword(username,
-                               digestIfNecessary(password));
+               securityService.updateUserPassword(username, password);
                return ServerAnswer.ok("Password updated for user " + username);
        }
 
@@ -144,29 +139,29 @@ public class UsersRolesController implements MvcConstants {
        public ServerAnswer updatePassword(
                        @RequestParam("oldPassword") String oldPassword,
                        @RequestParam("password") String password) {
-               securityService.updateCurrentUserPassword(
-                               digestIfNecessary(oldPassword), digestIfNecessary(password));
+               securityService.updateCurrentUserPassword(oldPassword, password);
                return ServerAnswer.ok("Password updated");
        }
 
-       protected String digestIfNecessary(String str) {
-               if (!str.startsWith("{" + digestType + "}"))
-                       return digest(str);
-               else
-                       return str;
-       }
-
-       protected String digest(String nonEncrypted) {
-               try {
-                       MessageDigest md = MessageDigest.getInstance(digestType);
-                       byte[] dig = md.digest(nonEncrypted.getBytes());
-                       return "{" + digestType + "}"
-                                       + new String(Base64.encodeBase64(dig));
-               } catch (NoSuchAlgorithmException e) {
-                       throw new RuntimeException(
-                                       "Unexpected exception while digesting password");
-               }
-       }
+       // protected String digestIfNecessary(String str) {
+       //
+       // if (!str.startsWith("{" + digestType + "}"))
+       // return digest(str);
+       // else
+       // return str;
+       // }
+
+       // protected String digest(String nonEncrypted) {
+       // try {
+       // MessageDigest md = MessageDigest.getInstance(digestType);
+       // byte[] dig = md.digest(nonEncrypted.getBytes());
+       // return "{" + digestType + "}"
+       // + new String(Base64.encodeBase64(dig));
+       // } catch (NoSuchAlgorithmException e) {
+       // throw new RuntimeException(
+       // "Unexpected exception while digesting password");
+       // }
+       // }
 
        public void setUserDeserializer(Deserializer userDeserializer) {
                this.userDeserializer = userDeserializer;