Remove old interfaces
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 23 Mar 2011 22:24:22 +0000 (22:24 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 23 Mar 2011 22:24:22 +0000 (22:24 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4355 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

54 files changed:
security/modules/org.argeo.security.dao.ldap/META-INF/MANIFEST.MF
security/modules/org.argeo.security.dao.ldap/META-INF/spring/ldap-osgi.xml
security/modules/org.argeo.security.dao.ldap/META-INF/spring/ldap.xml
security/modules/org.argeo.security.dao.ldap/META-INF/spring/natures-osgi.xml [deleted file]
security/modules/org.argeo.security.services/META-INF/spring/osgi.xml
security/modules/org.argeo.security.services/META-INF/spring/services.xml
security/plugins/org.argeo.security.equinox/src/main/java/org/argeo/security/equinox/SpringLoginModule.java
security/plugins/org.argeo.security.ui.admin/META-INF/spring/commands.xml
security/plugins/org.argeo.security.ui.admin/META-INF/spring/common.xml
security/plugins/org.argeo.security.ui.admin/META-INF/spring/editors.xml
security/plugins/org.argeo.security.ui.admin/META-INF/spring/osgi.xml
security/plugins/org.argeo.security.ui.admin/META-INF/spring/views.xml
security/plugins/org.argeo.security.ui.admin/plugin.xml
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/AddRole.java
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/NewUser.java
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/RefreshUsersList.java
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditorInput.java
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/RolesView.java
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/wizards/MainUserInfoWizardPage.java
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/wizards/NewUserWizard.java
security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureActionBarAdvisor.java
security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/dialogs/DefaultLoginDialog.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/AbstractUserNature.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityDao.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityService.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoUser.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/CurrentUserDao.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/CurrentUserService.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/SimpleArgeoUser.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/UserAdminDao.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/UserAdminService.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/UserNature.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ArgeoUserDetails.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultCurrentUserService.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultUserAdminService.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/CurrentUserDaoJcr.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/CurrentUserServiceJcr.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/JcrArgeoUser.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/JcrUserDetails.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/CoworkerNature.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/InfrastructureUserNature.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/PosixAccountNature.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/SimpleUserNature.java [deleted file]
security/runtime/org.argeo.security.jackrabbit/src/main/java/org/argeo/security/jackrabbit/ArgeoLoginModule.java
security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/ArgeoLdapUserDetailsManager.java
security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/ArgeoSecurityDaoLdap.java
security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/ArgeoUserDetailsContextMapper.java [deleted file]
security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/UserNatureMapper.java [deleted file]
security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/nature/CoworkerUserNatureMapper.java [deleted file]
security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java [deleted file]
security/runtime/pom.xml
server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java

index 60bdd82106a79cb377d204e63c2ee33332d45c96..320dd7ab473215678f81c0ebfde5d650c67feeaa 100644 (file)
@@ -7,8 +7,6 @@ Import-Package: com.sun.jndi.ldap;resolution:=optional,
  org.argeo.security.jcr,
  org.argeo.security.ldap,
  org.argeo.security.ldap.jcr,
- org.argeo.security.ldap.nature,
- org.argeo.security.nature,
  org.springframework.beans.factory.config,
  org.springframework.ldap.core.support,
  org.springframework.security,
index d0ad0eca945419762ca5213a618f318b90e70caa..1d1de4b15f2a25abb4d6bbb4b74f0ca9a5c38f91 100644 (file)
@@ -7,13 +7,6 @@
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
 \r
        <!-- REFERENCES -->\r
-       <!-- <list id="userNatureMappers" interface="org.argeo.security.ldap.UserNatureMapper" -->\r
-       <!-- cardinality="0..N" /> -->\r
-       <!-- <reference id="repositoryFactory" interface="javax.jcr.RepositoryFactory" -->\r
-       <!-- cardinality="0..1"> -->\r
-       <!-- <listener ref="jcrUserDetailsContextMapper" bind-method="register" -->\r
-       <!-- unbind-method="unregister" /> -->\r
-       <!-- </reference> -->\r
        <reference id="nodeRepository" interface="javax.jcr.Repository"\r
                filter="(argeo.jcr.repository.alias=node)" />\r
        <reference id="systemExecutionService" interface="org.argeo.security.SystemExecutionService" />\r
                interface="org.springframework.security.providers.AuthenticationProvider"\r
                context-class-loader="service-provider" />\r
 \r
-       <service ref="securityDao" interface="org.argeo.security.CurrentUserDao"\r
-               context-class-loader="service-provider" />\r
-       <service ref="securityDao" interface="org.argeo.security.UserAdminDao"\r
-               context-class-loader="service-provider" />\r
        <service ref="userDetailsManager"\r
                interface="org.springframework.security.userdetails.UserDetailsService"\r
                context-class-loader="service-provider" />\r
        <service ref="userDetailsManager"\r
                interface="org.springframework.security.userdetails.UserDetailsManager"\r
                context-class-loader="service-provider" />\r
+       <service ref="userDetailsManager" interface="org.argeo.security.UserAdminService"\r
+               context-class-loader="service-provider" />\r
 </beans:beans>
\ No newline at end of file
index 3891077e0dfac0af54a5fa544748a29e1135c871..33dc554a87de4a0af7891448d5444aedd6a9ba0a 100644 (file)
@@ -58,7 +58,7 @@
        <!-- </bean> -->
 
        <!-- USER DETAILS -->
-       <bean id="securityDao" class="org.argeo.security.ldap.ArgeoSecurityDaoLdap">
+       <bean id="userAdminDao" class="org.argeo.security.ldap.ArgeoSecurityDaoLdap">
                <constructor-arg ref="contextSource" />
                <property name="userBase" value="${argeo.ldap.userBase}" />
                <property name="usernameAttribute" value="${argeo.ldap.usernameAttribute}" />
@@ -73,9 +73,7 @@
                <property name="groupMemberAttribute" value="${argeo.ldap.groupMemberAttribute}" />
                <property name="defaultRole" value="${argeo.security.defaultRole}" />
                <property name="rolePrefix" value="${argeo.security.rolePrefix}" />
-               <property name="passwordEncoder" ref="passwordEncoder" />
                <property name="usernameMapper" ref="usernameMapper" />
-               <property name="userDetailsManager" ref="userDetailsManager" />
        </bean>
 
        <bean id="usernameMapper"
@@ -99,6 +97,7 @@
                <property name="groupMemberAttributeName" value="${argeo.ldap.groupMemberAttribute}" />
                <property name="usernameMapper" ref="usernameMapper" />
                <property name="userDetailsMapper" ref="jcrUserDetailsContextMapper" />
+               <property name="userAdminDao" ref="userAdminDao" />
                <property name="passwordEncoder" ref="passwordEncoder" />
                <property name="passwordAttributeName" value="${argeo.ldap.passwordAttribute}" />
        </bean>
diff --git a/security/modules/org.argeo.security.dao.ldap/META-INF/spring/natures-osgi.xml b/security/modules/org.argeo.security.dao.ldap/META-INF/spring/natures-osgi.xml
deleted file mode 100644 (file)
index 6f7c1e5..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
-       xsi:schemaLocation="http://www.springframework.org/schema/osgi  \r
-       http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
-       http://www.springframework.org/schema/beans   \r
-       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
-\r
-       <service interface="org.argeo.security.ldap.UserNatureMapper">\r
-               <beans:bean name="simpleUser" class="org.argeo.security.ldap.nature.SimpleUserNatureMapper" />\r
-       </service>\r
-\r
-       <service interface="org.argeo.security.ldap.UserNatureMapper">\r
-               <beans:bean name="coworker" class="org.argeo.security.ldap.nature.CoworkerUserNatureMapper" />\r
-       </service>\r
-\r
-</beans:beans>
\ No newline at end of file
index 91f2e84290a897a1a5e4879569970ed5b96e5ec8..173034810f0293e35f560e091b254a4e41958a33 100644 (file)
@@ -7,12 +7,6 @@
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
 \r
        <!-- REFERENCES -->\r
-       <!-- Cardinality is 0, in order to let a bundle providing the DAO while \r
-               depending on the system execution service. The dependency will then have \r
-               been satisfied when the first user tries to log-in. -->\r
-       <reference id="currentUserDao" interface="org.argeo.security.CurrentUserDao"\r
-               cardinality="0..1" />\r
-\r
        <list id="authenticationProviders"\r
                interface="org.springframework.security.providers.AuthenticationProvider"\r
                cardinality="0..N">\r
@@ -21,7 +15,6 @@
        </list>\r
 \r
        <!-- SERVICES -->\r
-       <service ref="securityService" interface="org.argeo.security.CurrentUserService" />\r
        <service ref="systemExecutionService" interface="org.argeo.security.SystemExecutionService" />\r
 \r
        <service ref="authenticationManager"\r
index f49de0914e5a51963f7f6732f1e307764f015690..3a0dca7450148a4ca8a0bc21597ce21fcb28145c 100644 (file)
                </property>
        </bean>
 
-       <bean id="securityService" class="org.argeo.security.core.DefaultCurrentUserService">
-               <property name="currentUserDao" ref="currentUserDao" />
-       </bean>
-
        <bean id="systemExecutionService" class="org.argeo.security.core.KeyBasedSystemExecutionService">
                <property name="authenticationManager" ref="authenticationManager" />
                <property name="systemAuthenticationKey" value="${argeo.security.systemKey}" />
index 7631dade1831978fb569e6a13a62edd2dd570ef5..298323b3d345d3fc797df404e7eddcd60b77f036 100644 (file)
@@ -113,13 +113,11 @@ public class SpringLoginModule extends SecurityContextLoginModule {
                        loginException.initCause(e);
                        throw loginException;
                }
-               // }
        }
 
        @Override
        public boolean logout() throws LoginException {
-               // if (log.isDebugEnabled())
-               // log.debug("logout subject=" + subject);
+               subject.getPrincipals().clear();
                return super.logout();
        }
 
index 46d3b058c72b3e4ffa5f5b5b0920e8a17bec00d7..96d25ddb6a8ccba207b15af7377438866d5fc939 100644 (file)
@@ -8,10 +8,10 @@
                class="org.argeo.security.ui.admin.commands.OpenArgeoUserEditor"
                scope="prototype" />
 
-       <bean id="newArgeoUserEditor" class="org.argeo.security.ui.admin.commands.NewUser"
+       <bean id="newUser" class="org.argeo.security.ui.admin.commands.NewUser"
                scope="prototype">
-               <property name="session" ref="nodeSession" />
-               <property name="userDetailsManager" ref="userDetailsManager" />
+               <property name="session" ref="session" />
+               <property name="userAdminService" ref="userAdminService" />
        </bean>
 
        <bean id="addRole" class="org.argeo.security.ui.admin.commands.AddRole"
@@ -20,5 +20,7 @@
        </bean>
 
        <bean id="refreshUsersList" class="org.argeo.security.ui.admin.commands.RefreshUsersList"
-               scope="prototype" />
+               scope="prototype">
+               <property name="userAdminService" ref="userAdminService" />
+       </bean>
 </beans>
index 131ccdac2e46fbb8a222431b4f730c2ac41264d8..3a6f8141cf82a8544f1c30a6b4e4cd3721e4239c 100644 (file)
@@ -3,7 +3,7 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
 \r
-       <bean id="nodeSession" class="org.argeo.security.jcr.SecureThreadBoundSession">\r
+       <bean id="session" class="org.argeo.security.jcr.SecureThreadBoundSession">\r
                <property name="repository" ref="nodeRepository" />\r
        </bean>\r
 </beans>
\ No newline at end of file
index c1eb9ea61383cdbe242aedd78aa374283b3ad842..8510866f94caece51080778a8fce20c9e5b76335 100644 (file)
@@ -8,6 +8,6 @@
        <bean id="adminArgeoUserEditor" class="org.argeo.security.ui.admin.editors.ArgeoUserEditor"
                scope="prototype">
                <property name="userAdminService" ref="userAdminService" />
-               <property name="userDetailsManager" ref="userDetailsManager" />
+               <property name="session" ref="session" />
        </bean>
 </beans>
index b0947860fe648896ccb1550dcdfef772a3902881..2fa51446ccf2625aadfc3dfcc68d72fedfb6ee73 100644 (file)
@@ -11,7 +11,4 @@
        <reference id="nodeRepository" interface="javax.jcr.Repository"\r
                filter="(argeo.jcr.repository.alias=node)" />\r
        <reference id="userAdminService" interface="org.argeo.security.UserAdminService" />\r
-       <reference id="currentUserService" interface="org.argeo.security.CurrentUserService" />\r
-       <reference id="userDetailsManager"\r
-               interface="org.springframework.security.userdetails.UserDetailsManager" />\r
 </beans:beans>
\ No newline at end of file
index 49cf9d8a01b7b55b51c5ede4d83810574292a684..d399c895b063489269dc8d150791a36dd2a0d265 100644 (file)
@@ -6,9 +6,9 @@
 
        <bean id="adminUsersView" class="org.argeo.security.ui.admin.views.UsersView"
                scope="prototype">
-<!--           <property name="userAdminService" ref="userAdminService" /> -->
-               <property name="session" ref="nodeSession" />
+               <property name="session" ref="session" />
        </bean>
+       
        <bean id="adminRolesView" class="org.argeo.security.ui.admin.views.RolesView"
                scope="prototype">
                <property name="userAdminService" ref="userAdminService" />
index f6c16439138ea97ecf5855699077a50753fcc18e..67f4092c03d64b07a495968def427394519087e7 100644 (file)
@@ -50,8 +50,8 @@
       </command>
       <command
             defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
-            id="org.argeo.security.ui.admin.newArgeoUserEditor"
-            name="OpenArgeoUserEditor">
+            id="org.argeo.security.ui.admin.newUser"
+            name="New User">
       </command>
       <command
             defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
@@ -78,7 +78,7 @@
        <menuContribution
             locationURI="toolbar:org.argeo.security.ui.admin.adminUsersView">
             <command
-                  commandId="org.argeo.security.ui.admin.newArgeoUserEditor"
+                  commandId="org.argeo.security.ui.admin.newUser"
                   icon="icons/add.gif"
                   label="Add User"
                   tooltip="Add new user">
index a036d12a34ded0c7dce300ca3102a1a5fad3851f..d550484fcf0c0d5cdd578faebdebd2f894b5735f 100644 (file)
@@ -10,7 +10,6 @@ import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.ui.IEditorReference;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.handlers.HandlerUtil;
-import org.eclipse.ui.internal.EditorReference;
 
 /** Add a new role. */
 public class AddRole extends AbstractHandler {
index 2c7b8bf57c61411e66e7291e82c2bea16398fa91..5e8313f175dcc6659308bc6bc1d362dba14170fe 100644 (file)
@@ -2,28 +2,28 @@ package org.argeo.security.ui.admin.commands;
 
 import javax.jcr.Session;
 
+import org.argeo.security.UserAdminService;
 import org.argeo.security.ui.admin.wizards.NewUserWizard;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.ui.handlers.HandlerUtil;
-import org.springframework.security.userdetails.UserDetailsManager;
 
 /** Command handler to set visible or open a Argeo user. */
 public class NewUser extends AbstractHandler {
        private Session session;
-       private UserDetailsManager userDetailsManager;
+       private UserAdminService userAdminService;
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
                try {
                        NewUserWizard newUserWizard = new NewUserWizard(session,
-                                       userDetailsManager);
+                                       userAdminService);
                        WizardDialog dialog = new WizardDialog(
                                        HandlerUtil.getActiveShell(event), newUserWizard);
                        dialog.open();
                } catch (Exception e) {
-                       throw new ExecutionException("Cannot open editor", e);
+                       throw new ExecutionException("Cannot open wizard", e);
                }
                return null;
        }
@@ -32,8 +32,8 @@ public class NewUser extends AbstractHandler {
                this.session = session;
        }
 
-       public void setUserDetailsManager(UserDetailsManager userDetailsManager) {
-               this.userDetailsManager = userDetailsManager;
+       public void setUserAdminService(UserAdminService userAdminService) {
+               this.userAdminService = userAdminService;
        }
 
 }
index 10e413a6c0fe498d30447fdebe8d84098fb7d15c..a66b79067d78a348c2727a7263ea23a8247baa35 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.security.ui.admin.commands;
 
+import org.argeo.security.UserAdminService;
 import org.argeo.security.ui.admin.views.UsersView;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -8,8 +9,10 @@ import org.eclipse.ui.handlers.HandlerUtil;
 
 /** Refresh the main EBI list. */
 public class RefreshUsersList extends AbstractHandler {
+       private UserAdminService userAdminService;
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
+               userAdminService.synchronize();
                UsersView view = (UsersView) HandlerUtil
                                .getActiveWorkbenchWindow(event).getActivePage()
                                .findView(UsersView.ID);
@@ -17,4 +20,8 @@ public class RefreshUsersList extends AbstractHandler {
                return null;
        }
 
+       public void setUserAdminService(UserAdminService userAdminService) {
+               this.userAdminService = userAdminService;
+       }
+
 }
\ No newline at end of file
index 41b27b5ddda0df9ffed0c2f2e404c781d95aaf2b..b511e683c5242cea0188f71e2988089791ddc740 100644 (file)
@@ -1,14 +1,13 @@
 package org.argeo.security.ui.admin.editors;
 
 import javax.jcr.Node;
+import javax.jcr.Session;
 
 import org.argeo.ArgeoException;
 import org.argeo.jcr.ArgeoNames;
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.SimpleArgeoUser;
+import org.argeo.jcr.JcrUtils;
 import org.argeo.security.UserAdminService;
 import org.argeo.security.jcr.JcrUserDetails;
-import org.argeo.security.nature.SimpleUserNature;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
 import org.argeo.security.ui.admin.views.UsersView;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -17,35 +16,26 @@ import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.forms.editor.FormEditor;
-import org.springframework.security.userdetails.UserDetailsManager;
 
 /** Editor for an Argeo user. */
 public class ArgeoUserEditor extends FormEditor {
        public final static String ID = "org.argeo.security.ui.admin.adminArgeoUserEditor";
 
-       private ArgeoUser user;
        private JcrUserDetails userDetails;
        private Node userHome;
        private UserAdminService userAdminService;
-       private UserDetailsManager userDetailsManager;
+       private Session session;
 
        public void init(IEditorSite site, IEditorInput input)
                        throws PartInitException {
                super.init(site, input);
-               userHome = ((ArgeoUserEditorInput) getEditorInput()).getUserHome();
                String username = ((ArgeoUserEditorInput) getEditorInput())
                                .getUsername();
+               userHome = JcrUtils.getUserHome(session, username);
 
-               userDetails = (JcrUserDetails) userDetailsManager
+               userDetails = (JcrUserDetails) userAdminService
                                .loadUserByUsername(username);
 
-               if (username == null) {// new
-                       user = new SimpleArgeoUser();
-                       user.getUserNatures().put(SimpleUserNature.TYPE,
-                                       new SimpleUserNature());
-               } else
-                       user = userAdminService.getUser(username);
-
                this.setPartProperty("name", username != null ? username : "<new user>");
                setPartName(username != null ? username : "<new user>");
        }
@@ -80,7 +70,7 @@ public class ArgeoUserEditor extends FormEditor {
                                        .getRoles());
                }
 
-               userDetailsManager.updateUser(userDetails);
+               userAdminService.updateUser(userDetails);
 
                // if (userAdminService.userExists(user.getUsername()))
                // userAdminService.updateUser(user);
@@ -117,8 +107,7 @@ public class ArgeoUserEditor extends FormEditor {
                this.userAdminService = userAdminService;
        }
 
-       public void setUserDetailsManager(UserDetailsManager userDetailsManager) {
-               this.userDetailsManager = userDetailsManager;
+       public void setSession(Session session) {
+               this.session = session;
        }
-
 }
index 51aeeef80f314f1937b0d0717b46012ad43f6a5d..9fcb755c52b486d68688ff916cfa77a9c81a3b91 100644 (file)
@@ -1,12 +1,5 @@
 package org.argeo.security.ui.admin.editors;
 
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.ValueFormatException;
-
-import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoNames;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IPersistableElement;
@@ -14,23 +7,9 @@ import org.eclipse.ui.IPersistableElement;
 /** Editor input for an Argeo user. */
 public class ArgeoUserEditorInput implements IEditorInput {
        private final String username;
-       private final Node userHome;
 
-       @Deprecated
        public ArgeoUserEditorInput(String username) {
                this.username = username;
-               this.userHome = null;
-       }
-
-       public ArgeoUserEditorInput(Node userHome) {
-               try {
-                       this.username = userHome.getProperty(ArgeoNames.ARGEO_USER_ID)
-                                       .getString();
-                       this.userHome = userHome;
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot initialize editor input for "
-                                       + userHome, e);
-               }
        }
 
        public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
@@ -68,9 +47,4 @@ public class ArgeoUserEditorInput implements IEditorInput {
        public String getUsername() {
                return username;
        }
-
-       public Node getUserHome() {
-               return userHome;
-       }
-
 }
index e2779590a1856fbbffc1e8c087f42fd9a7cbb519..491647a8ddbcbdd5d5bc7a74cd6b16c2ed0d121f 100644 (file)
@@ -1,21 +1,10 @@
 package org.argeo.security.ui.admin.views;
 
-import java.util.ArrayList;
-
 import org.argeo.ArgeoException;
-import org.argeo.security.ArgeoUser;
 import org.argeo.security.UserAdminService;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
 import org.argeo.security.ui.admin.commands.AddRole;
-import org.argeo.security.ui.admin.commands.OpenArgeoUserEditor;
-import org.eclipse.core.commands.Command;
-import org.eclipse.core.commands.IParameter;
-import org.eclipse.core.commands.Parameterization;
-import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.TableViewer;
@@ -30,8 +19,6 @@ import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.commands.ICommandService;
 import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.part.ViewPart;
 
@@ -84,7 +71,6 @@ public class RolesView extends ViewPart {
                viewer.setContentProvider(new RolesContentProvider());
                viewer.setLabelProvider(new UsersLabelProvider());
                viewer.setInput(getViewSite());
-               viewer.addDoubleClickListener(new ViewDoubleClickListener());
        }
 
        @Override
@@ -126,46 +112,6 @@ public class RolesView extends ViewPart {
 
        }
 
-       class ViewDoubleClickListener implements IDoubleClickListener {
-               public void doubleClick(DoubleClickEvent evt) {
-                       Object obj = ((IStructuredSelection) evt.getSelection())
-                                       .getFirstElement();
-
-                       if (obj instanceof ArgeoUser) {
-                               ArgeoUser argeoUser = (ArgeoUser) obj;
-
-                               IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench();
-                               IHandlerService handlerService = (IHandlerService) iw
-                                               .getService(IHandlerService.class);
-                               try {
-                                       String commandId = OpenArgeoUserEditor.COMMAND_ID;
-                                       String paramName = OpenArgeoUserEditor.PARAM_USERNAME;
-
-                                       // TODO: factorize this
-                                       // execute related command
-                                       IWorkbenchWindow window = iw.getActiveWorkbenchWindow();
-                                       ICommandService cmdService = (ICommandService) window
-                                                       .getService(ICommandService.class);
-                                       Command cmd = cmdService.getCommand(commandId);
-                                       ArrayList<Parameterization> parameters = new ArrayList<Parameterization>();
-                                       IParameter iparam = cmd.getParameter(paramName);
-                                       Parameterization param = new Parameterization(iparam,
-                                                       argeoUser.getUsername());
-                                       parameters.add(param);
-                                       ParameterizedCommand pc = new ParameterizedCommand(cmd,
-                                                       parameters.toArray(new Parameterization[parameters
-                                                                       .size()]));
-                                       handlerService = (IHandlerService) window
-                                                       .getService(IHandlerService.class);
-                                       handlerService.executeCommand(pc, null);
-                               } catch (Exception e) {
-                                       throw new ArgeoException("Cannot open editor", e);
-                               }
-
-                       }
-               }
-       }
-
        public String getNewRole() {
                return newRole.getText();
        }
index 8ddba7683ab8be9ebb869c5f200d14fe84f7f3c3..77b718e1262648d25b5c69844780c44411a7e28b 100644 (file)
@@ -12,14 +12,10 @@ import javax.jcr.observation.EventListener;
 import javax.jcr.query.Query;
 
 import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.dialogs.Error;
 import org.argeo.jcr.ArgeoNames;
 import org.argeo.jcr.ArgeoTypes;
-import org.argeo.security.ArgeoUser;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
 import org.argeo.security.ui.admin.commands.OpenArgeoUserEditor;
-import org.argeo.security.ui.admin.editors.ArgeoUserEditor;
-import org.argeo.security.ui.admin.editors.ArgeoUserEditorInput;
 import org.eclipse.core.commands.Command;
 import org.eclipse.core.commands.IParameter;
 import org.eclipse.core.commands.Parameterization;
@@ -39,7 +35,6 @@ import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.commands.ICommandService;
 import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.part.ViewPart;
@@ -156,31 +151,9 @@ public class UsersView extends ViewPart implements ArgeoNames, ArgeoTypes,
                        } catch (RepositoryException e) {
                                throw new ArgeoException("Cannot get text", e);
                        }
-
-                       // String currentUsername = CurrentUser.getUsername();
-                       // String currentUsername = "";
-                       // ArgeoUser user = (ArgeoUser) element;
-                       // SimpleUserNature simpleNature = SimpleUserNature
-                       // .findSimpleUserNature(user, simpleNatureType);
-                       // switch (columnIndex) {
-                       // case 0:
-                       // String userName = user.getUsername();
-                       // if (userName.equals(currentUsername))
-                       // userName = userName + "*";
-                       // return userName;
-                       // case 1:
-                       // return simpleNature.getFirstName();
-                       // case 2:
-                       // return simpleNature.getLastName();
-                       // case 3:
-                       // return simpleNature.getEmail();
-                       // default:
-                       // throw new ArgeoException("Unmanaged column " + columnIndex);
-                       // }
                }
 
                public Image getColumnImage(Object element, int columnIndex) {
-                       // TODO Auto-generated method stub
                        return null;
                }
 
@@ -194,23 +167,12 @@ public class UsersView extends ViewPart implements ArgeoNames, ArgeoTypes,
                        Object obj = ((IStructuredSelection) evt.getSelection())
                                        .getFirstElement();
                        if (obj instanceof Node) {
-                               try {
-                                       IWorkbench iw = SecurityAdminPlugin.getDefault()
-                                                       .getWorkbench();
-                                       iw.getActiveWorkbenchWindow()
-                                                       .getActivePage()
-                                                       .openEditor(new ArgeoUserEditorInput((Node) obj),
-                                                                       ArgeoUserEditor.ID);
-                               } catch (PartInitException e) {
-                                       Error.show("Cannot open user editor for " + obj, e);
-                               }
-                       } else if (obj instanceof ArgeoUser) {
-                               ArgeoUser argeoUser = (ArgeoUser) obj;
-
                                IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench();
                                IHandlerService handlerService = (IHandlerService) iw
                                                .getService(IHandlerService.class);
                                try {
+                                       String username = ((Node) obj).getProperty(ARGEO_USER_ID)
+                                                       .getString();
                                        String commandId = OpenArgeoUserEditor.COMMAND_ID;
                                        String paramName = OpenArgeoUserEditor.PARAM_USERNAME;
 
@@ -223,7 +185,7 @@ public class UsersView extends ViewPart implements ArgeoNames, ArgeoTypes,
                                        ArrayList<Parameterization> parameters = new ArrayList<Parameterization>();
                                        IParameter iparam = cmd.getParameter(paramName);
                                        Parameterization param = new Parameterization(iparam,
-                                                       argeoUser.getUsername());
+                                                       username);
                                        parameters.add(param);
                                        ParameterizedCommand pc = new ParameterizedCommand(cmd,
                                                        parameters.toArray(new Parameterization[parameters
index 066c376a1d3f27b9ec9d8bfc43e6b6852cc8f5f0..e00decd537bc57a4e4714319bfe714ae76d687d5 100644 (file)
@@ -15,14 +15,18 @@ import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Text;
+import org.springframework.security.userdetails.UserDetails;
+import org.springframework.security.userdetails.UsernameNotFoundException;
 
 public class MainUserInfoWizardPage extends WizardPage implements
                ModifyListener, ArgeoNames {
        private Text username, firstName, lastName, primaryEmail, password1,
                        password2;
+       private UserAdminService userAdminService;
 
-       public MainUserInfoWizardPage() {
+       public MainUserInfoWizardPage(UserAdminService userAdminService) {
                super("Main");
+               this.userAdminService = userAdminService;
                setTitle("Required Information");
        }
 
@@ -55,6 +59,13 @@ public class MainUserInfoWizardPage extends WizardPage implements
        protected String checkComplete() {
                if (!username.getText().matches(UserAdminService.USERNAME_PATTERN))
                        return "Wrong user name format, should be lower case, between 3 and 15 characters with only '_' as acceptable special character.";
+               try {
+                       UserDetails userDetails = userAdminService
+                                       .loadUserByUsername(username.getText());
+                       return "User " + userDetails.getUsername() + " alreayd exists";
+               } catch (UsernameNotFoundException e) {
+                       // silent
+               }
                if (!primaryEmail.getText().matches(UserAdminService.EMAIL_PATTERN))
                        return "Not a valid email address";
                if (firstName.getText().trim().equals(""))
index 6c894d62a57bedf3315a6c44754e00c9342abbfc..493e1881f526a325efd9a8d88c8dbfa6d264a402 100644 (file)
@@ -6,35 +6,39 @@ import javax.jcr.Session;
 import org.argeo.eclipse.ui.dialogs.Error;
 import org.argeo.jcr.ArgeoNames;
 import org.argeo.jcr.JcrUtils;
+import org.argeo.security.UserAdminService;
 import org.argeo.security.jcr.JcrUserDetails;
 import org.eclipse.jface.wizard.Wizard;
 import org.springframework.security.GrantedAuthority;
-import org.springframework.security.userdetails.UserDetailsManager;
 
 /** Wizard to create a new user */
 public class NewUserWizard extends Wizard {
        private String homeBasePath = "/home";
        private Session session;
-       private UserDetailsManager userDetailsManager;
+       private UserAdminService userAdminService;
 
        // pages
        private MainUserInfoWizardPage mainUserInfo;
 
-       public NewUserWizard(Session session, UserDetailsManager userDetailsManager) {
+       public NewUserWizard(Session session, UserAdminService userAdminService) {
                this.session = session;
-               this.userDetailsManager = userDetailsManager;
+               this.userAdminService = userAdminService;
        }
 
        @Override
        public void addPages() {
-               mainUserInfo = new MainUserInfoWizardPage();
+               mainUserInfo = new MainUserInfoWizardPage(userAdminService);
                addPage(mainUserInfo);
        }
 
        @Override
        public boolean performFinish() {
+               if (!canFinish())
+                       return false;
+
                try {
                        String username = mainUserInfo.getUsername();
+                       session.save();
                        Node userHome = JcrUtils.createUserHome(session, homeBasePath,
                                        username);
                        Node userProfile = userHome.getNode(ArgeoNames.ARGEO_PROFILE);
@@ -44,7 +48,7 @@ public class NewUserWizard extends Wizard {
                                        userHome.getPath(), username, password, true, true, true,
                                        true, new GrantedAuthority[0]);
                        session.save();
-                       userDetailsManager.createUser(jcrUserDetails);
+                       userAdminService.createUser(jcrUserDetails);
                        return true;
                } catch (Exception e) {
                        JcrUtils.discardQuietly(session);
index 88836f4669f29e205520e8bc62ba218bc0bc1813..569412bd619893c638f546539aeb58fc8ea81fb8 100644 (file)
@@ -52,8 +52,21 @@ public class SecureActionBarAdvisor extends ActionBarAdvisor {
                showViewMenuAction = ActionFactory.SHOW_VIEW_MENU.create(window);
                register(showViewMenuAction);
 
-               // logoutAction = ActionFactory.QUIT.create(window);
+               // logout
+               logoutAction = createLogoutAction();
+               register(logoutAction);
+
+               // Save semantics
+               saveAction = ActionFactory.SAVE.create(window);
+               register(saveAction);
+               saveAllAction = ActionFactory.SAVE_ALL.create(window);
+               register(saveAllAction);
+               closeAllAction = ActionFactory.CLOSE_ALL.create(window);
+               register(closeAllAction);
+
+       }
 
+       protected IAction createLogoutAction() {
                Subject subject = null;
                try {
                        subject = SecureRapActivator.getLoginContext().getSubject();
@@ -62,7 +75,7 @@ public class SecureActionBarAdvisor extends ActionBarAdvisor {
                }
                final Principal principal = subject.getPrincipals().iterator().next();
 
-               logoutAction = new Action() {
+               IAction logoutAction = new Action() {
                        public String getId() {
                                return SecureRapActivator.ID + ".logoutAction";
                        }
@@ -76,6 +89,7 @@ public class SecureActionBarAdvisor extends ActionBarAdvisor {
                                        Subject subject = SecureRapActivator.getLoginContext()
                                                        .getSubject();
                                        String subjectStr = subject.toString();
+                                       subject.getPrincipals().clear();
                                        SecureRapActivator.getLoginContext().logout();
                                        log.info(subjectStr + " logged out");
                                } catch (LoginException e) {
@@ -91,16 +105,7 @@ public class SecureActionBarAdvisor extends ActionBarAdvisor {
                        }
 
                };
-               register(logoutAction);
-
-               // Save semantics
-               saveAction = ActionFactory.SAVE.create(window);
-               register(saveAction);
-               saveAllAction = ActionFactory.SAVE_ALL.create(window);
-               register(saveAllAction);
-               closeAllAction = ActionFactory.CLOSE_ALL.create(window);
-               register(closeAllAction);
-
+               return logoutAction;
        }
 
        protected void fillMenuBar(IMenuManager menuBar) {
index b21af204941c9c4135bdd3501e7c1b90ab889bb5..19affc85431009fd36fedaf348c50da0fa3e3150 100644 (file)
@@ -5,7 +5,6 @@ import javax.security.auth.callback.NameCallback;
 import javax.security.auth.callback.PasswordCallback;
 import javax.security.auth.callback.TextOutputCallback;
 
-import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -30,13 +29,11 @@ public class DefaultLoginDialog extends AbstractLoginDialog {
        }
 
        protected Point getInitialSize() {
-               return new Point(300, 150);
+               return new Point(300, 180);
        }
 
        protected Control createDialogArea(Composite parent) {
                Composite dialogarea = (Composite) super.createDialogArea(parent);
-               // dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
-               // true));
                Composite composite = new Composite(dialogarea, SWT.NONE);
                composite.setLayout(new GridLayout(2, false));
                composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
@@ -93,20 +90,21 @@ public class DefaultLoginDialog extends AbstractLoginDialog {
 
        private void createTextoutputHandler(Composite composite,
                        TextOutputCallback callback) {
-               int messageType = callback.getMessageType();
-               int dialogMessageType = IMessageProvider.NONE;
-               switch (messageType) {
-               case TextOutputCallback.INFORMATION:
-                       dialogMessageType = IMessageProvider.INFORMATION;
-                       break;
-               case TextOutputCallback.WARNING:
-                       dialogMessageType = IMessageProvider.WARNING;
-                       break;
-               case TextOutputCallback.ERROR:
-                       dialogMessageType = IMessageProvider.ERROR;
-                       break;
-               }
-               //setMessage(callback.getMessage(), dialogMessageType);
+               // TODO: find a way to pass this information
+               // int messageType = callback.getMessageType();
+               // int dialogMessageType = IMessageProvider.NONE;
+               // switch (messageType) {
+               // case TextOutputCallback.INFORMATION:
+               // dialogMessageType = IMessageProvider.INFORMATION;
+               // break;
+               // case TextOutputCallback.WARNING:
+               // dialogMessageType = IMessageProvider.WARNING;
+               // break;
+               // case TextOutputCallback.ERROR:
+               // dialogMessageType = IMessageProvider.ERROR;
+               // break;
+               // }
+               // setMessage(callback.getMessage(), dialogMessageType);
        }
 
        public void internalHandle() {
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/AbstractUserNature.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/AbstractUserNature.java
deleted file mode 100644 (file)
index bbb5eb8..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security;
-
-
-/** A set of specific data attached to a user. */
-@Deprecated
-public abstract class AbstractUserNature implements UserNature {
-       private static final long serialVersionUID = 1169323440459736478L;
-       
-       private String type;
-
-       public String getType() {
-               if (type != null)
-                       return type;
-               else
-                       return getClass().getName();
-       }
-
-       public void setType(String type) {
-               this.type = type;
-       }
-
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityDao.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityDao.java
deleted file mode 100644 (file)
index 81baa5e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security;
-
-
-/**
- * Access to the users and roles referential (dependent from the underlying
- * storage, e.g. LDAP).
- */
-@Deprecated
-public interface ArgeoSecurityDao extends CurrentUserDao,UserAdminDao{
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityService.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityService.java
deleted file mode 100644 (file)
index 172fba1..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security;
-
-
-/**
- * High level access to the user referential (independent from the underlying
- * storage).
- */
-@Deprecated
-public interface ArgeoSecurityService extends CurrentUserService,
-               UserAdminService {
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoUser.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoUser.java
deleted file mode 100644 (file)
index 7100960..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security;
-
-import java.util.List;
-import java.util.Map;
-
-/** Abstraction for a user. */
-public interface ArgeoUser {
-       public String getUsername();
-
-       @Deprecated
-       public Map<String, UserNature> getUserNatures();
-
-       /** Implementation should refuse to add new user natures via this method. */
-       @Deprecated
-       public void updateUserNatures(Map<String, UserNature> userNatures);
-
-       public List<String> getRoles();
-
-       public String getPassword();
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/CurrentUserDao.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/CurrentUserDao.java
deleted file mode 100644 (file)
index 37b6d77..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security;
-
-/**
- * Access to user backend for the currently logged in user
- */
-@Deprecated
-public interface CurrentUserDao {
-       public void updateCurrentUserPassword(String oldPassword, String newPassword);
-
-       @Deprecated
-       public String getDefaultRole();
-
-}
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
deleted file mode 100644 (file)
index 9ae88e3..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.argeo.security;
-
-import java.util.Map;
-
-@Deprecated
-public interface CurrentUserService {
-       public ArgeoUser getCurrentUser();
-
-       public void updateCurrentUserPassword(String oldPassword, String newPassword);
-
-       @Deprecated
-       public void updateCurrentUserNatures(Map<String, UserNature> userNatures);
-
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/SimpleArgeoUser.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/SimpleArgeoUser.java
deleted file mode 100644 (file)
index 2916647..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-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.
- */
-@Deprecated
-public class SimpleArgeoUser implements ArgeoUser, Serializable,
-               Comparable<ArgeoUser> {
-       private static final long serialVersionUID = 1L;
-
-       private String username;
-       private String password;
-       private Map<String, UserNature> userNatures = new HashMap<String, UserNature>();
-       private List<String> roles = new ArrayList<String>();
-
-       public SimpleArgeoUser() {
-
-       }
-
-       public SimpleArgeoUser(ArgeoUser argeoUser) {
-               username = argeoUser.getUsername();
-               password = argeoUser.getPassword();
-               userNatures = new HashMap<String, UserNature>(
-                               argeoUser.getUserNatures());
-               roles = new ArrayList<String>(argeoUser.getRoles());
-       }
-
-       public Map<String, UserNature> getUserNatures() {
-               return userNatures;
-       }
-
-       @Deprecated
-       public void updateUserNatures(Map<String, UserNature> userNaturesData) {
-               updateUserNaturesWithCheck(userNatures, userNaturesData);
-       }
-
-       @Deprecated
-       public static void updateUserNaturesWithCheck(
-                       Map<String, UserNature> userNatures,
-                       Map<String, UserNature> userNaturesData) {
-               // checks consistency
-               if (userNatures.size() != userNaturesData.size())
-                       throw new ArgeoException(
-                                       "It is forbidden to add or remove user natures via this method");
-
-               for (String type : userNatures.keySet()) {
-                       if (!userNaturesData.containsKey(type))
-                               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;
-       }
-
-       public List<String> getRoles() {
-               return roles;
-       }
-
-       public String getUsername() {
-               return username;
-       }
-
-       public void setUsername(String username) {
-               this.username = username;
-       }
-
-       @Deprecated
-       public void setUserNatures(Map<String, UserNature> userNatures) {
-               this.userNatures = userNatures;
-       }
-
-       public void setRoles(List<String> roles) {
-               this.roles = roles;
-       }
-
-       public String getPassword() {
-               return password;
-       }
-
-       public void setPassword(String password) {
-               this.password = password;
-       }
-}
index 1ca452a742309e3fe5cfe1b88fd4bbd05ecfb780..cf8c77b5913df4c9a3e8dd251069f9899cdd126d 100644 (file)
@@ -22,25 +22,13 @@ import java.util.Set;
  * Access to the users and roles referential (dependent from the underlying
  * storage, e.g. LDAP).
  */
-public interface UserAdminDao{
+public interface UserAdminDao {
        /** List all users */
-       public Set<ArgeoUser> listUsers();
+       public Set<String> listUsers();
 
        /** List roles that can be modified */
        public Set<String> listEditableRoles();
 
-       public void updateUser(ArgeoUser user);
-
-       public void updateUserPassword(String username, String password);
-       
-       /**
-        * Creates a new user in the underlying storage. <b>DO NOT CALL DIRECTLY</b>
-        * use {@link ArgeoSecurityService#newUser(ArgeoUser)} instead.
-        */
-       public void createUser(ArgeoUser user);
-
-       public void deleteUser(String username);
-
        /**
         * Creates a new role in the underlying storage. <b>DO NOT CALL DIRECTLY</b>
         * use {@link ArgeoSecurityService#newRole(String)} instead.
@@ -50,11 +38,6 @@ public interface UserAdminDao{
        public void deleteRole(String role);
 
        /** List all users having this role. */
-       public Set<ArgeoUser> listUsersInRole(String role);
-
-       public Boolean userExists(String username);
-
-       public ArgeoUser getUser(String username);
+       public Set<String> listUsersInRole(String role);
 
-       public ArgeoUser getUserWithPassword(String username);
 }
index 4babb87a03c7c40e687802412cc2956fa0402de6..dddec035701d60afc61874ce6a3f1ac4185cbcc4 100644 (file)
@@ -1,9 +1,10 @@
 package org.argeo.security;
 
-import java.util.List;
 import java.util.Set;
 
-public interface UserAdminService {
+import org.springframework.security.userdetails.UserDetailsManager;
+
+public interface UserAdminService extends UserDetailsManager{
        /**
         * Usernames must match this regexp pattern ({@value #USERNAME_PATTERN}).
         * Thanks to <a href=
@@ -23,24 +24,8 @@ 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 List<String> listUserRoles(String username);
-
-       public void deleteUser(String username);
+       public Set<String> listUsersInRole(String role);
 
        /** Synchronize with the underlying DAO. */
        public void synchronize();
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/UserNature.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/UserNature.java
deleted file mode 100644 (file)
index cf0fa48..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security;
-
-import java.io.Serializable;
-
-/**
- * A set of specific data attached to a user. TODO: is this interface really
- * useful?
- */
-@Deprecated
-public interface UserNature extends Serializable {
-       @Deprecated
-       /** @deprecated will be removed soon*/
-       public String getType();
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ArgeoUserDetails.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ArgeoUserDetails.java
deleted file mode 100644 (file)
index eac1d37..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security.core;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.SimpleArgeoUser;
-import org.argeo.security.UserNature;
-import org.springframework.security.Authentication;
-import org.springframework.security.GrantedAuthority;
-import org.springframework.security.GrantedAuthorityImpl;
-import org.springframework.security.context.SecurityContextHolder;
-import org.springframework.security.userdetails.User;
-import org.springframework.security.userdetails.UserDetails;
-
-@Deprecated
-public class ArgeoUserDetails extends User implements ArgeoUser {
-       private static final long serialVersionUID = 1L;
-       private final static Log log = LogFactory.getLog(ArgeoUserDetails.class);
-
-       private final Map<String, UserNature> userNatures;
-       private final List<String> roles;
-
-       public ArgeoUserDetails(String username,
-                       Map<String, UserNature> userNatures, String password,
-                       GrantedAuthority[] authorities) throws IllegalArgumentException {
-               super(username, password, true, true, true, true, authorities);
-               this.userNatures = Collections.unmodifiableMap(userNatures);
-
-               // Roles
-               this.roles = Collections.unmodifiableList(addAuthoritiesToRoles(
-                               getAuthorities(), new ArrayList<String>()));
-       }
-
-       public ArgeoUserDetails(ArgeoUser argeoUser) {
-               this(argeoUser.getUsername(), argeoUser.getUserNatures(), argeoUser
-                               .getPassword(), rolesToAuthorities(argeoUser.getRoles()));
-       }
-
-       public Map<String, UserNature> getUserNatures() {
-               return userNatures;
-       }
-
-       public void updateUserNatures(Map<String, UserNature> userNaturesData) {
-               SimpleArgeoUser
-                               .updateUserNaturesWithCheck(userNatures, userNaturesData);
-       }
-
-       public List<String> getRoles() {
-               return roles;
-       }
-
-       /** The provided list, for chaining using {@link Collections} */
-       public static List<String> addAuthoritiesToRoles(
-                       GrantedAuthority[] authorities, List<String> roles) {
-               for (GrantedAuthority authority : authorities) {
-                       roles.add(authority.getAuthority());
-               }
-               return roles;
-       }
-
-       public static GrantedAuthority[] rolesToAuthorities(List<String> roles) {
-               GrantedAuthority[] arr = new GrantedAuthority[roles.size()];
-               for (int i = 0; i < roles.size(); i++) {
-                       String role = roles.get(i);
-                       if (log.isTraceEnabled())
-                               log.debug("Convert role " + role + " to authority (i=" + i
-                                               + ")");
-                       arr[i] = new GrantedAuthorityImpl(role);
-               }
-               return arr;
-       }
-
-       public static SimpleArgeoUser createSimpleArgeoUser(UserDetails userDetails) {
-               if (userDetails instanceof ArgeoUser) {
-                       return new SimpleArgeoUser((ArgeoUser) userDetails);
-               } else {
-                       SimpleArgeoUser argeoUser = new SimpleArgeoUser();
-                       argeoUser.setUsername(userDetails.getUsername());
-                       addAuthoritiesToRoles(userDetails.getAuthorities(),
-                                       argeoUser.getRoles());
-                       return argeoUser;
-               }
-       }
-
-       /** Creates an argeo user based on spring authentication */
-       public static ArgeoUser asArgeoUser(Authentication authentication) {
-               if (authentication == null)
-                       return null;
-
-               if (authentication.getPrincipal() instanceof ArgeoUser) {
-                       return new SimpleArgeoUser(
-                                       (ArgeoUser) authentication.getPrincipal());
-               } else {
-                       SimpleArgeoUser argeoUser = new SimpleArgeoUser();
-                       argeoUser.setUsername(authentication.getName());
-                       addAuthoritiesToRoles(authentication.getAuthorities(),
-                                       argeoUser.getRoles());
-                       return argeoUser;
-               }
-       }
-
-       /** The Spring security context as an argeo user */
-       public static ArgeoUser securityContextUser() {
-               Authentication authentication = SecurityContextHolder.getContext()
-                               .getAuthentication();
-               ArgeoUser argeoUser = ArgeoUserDetails.asArgeoUser(authentication);
-               return argeoUser;
-       }
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultCurrentUserService.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultCurrentUserService.java
deleted file mode 100644 (file)
index 8e330cb..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security.core;
-
-import java.util.Map;
-
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.CurrentUserDao;
-import org.argeo.security.CurrentUserService;
-import org.argeo.security.UserNature;
-
-@Deprecated
-public class DefaultCurrentUserService implements CurrentUserService {
-       private CurrentUserDao currentUserDao;
-
-       public DefaultCurrentUserService() {
-       }
-
-       public ArgeoUser getCurrentUser() {
-               ArgeoUser argeoUser = ArgeoUserDetails.securityContextUser();
-               if (argeoUser == null)
-                       return null;
-               if (argeoUser.getRoles().contains(currentUserDao.getDefaultRole()))
-                       argeoUser.getRoles().remove(currentUserDao.getDefaultRole());
-               return argeoUser;
-       }
-
-       public void updateCurrentUserPassword(String oldPassword, String newPassword) {
-               currentUserDao.updateCurrentUserPassword(oldPassword, newPassword);
-       }
-
-       public void updateCurrentUserNatures(Map<String, UserNature> userNatures) {
-               // TODO Auto-generated method stub
-
-       }
-
-       public void setCurrentUserDao(CurrentUserDao dao) {
-               this.currentUserDao = dao;
-       }
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultUserAdminService.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultUserAdminService.java
deleted file mode 100644 (file)
index e823124..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security.core;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.UserAdminDao;
-import org.argeo.security.UserAdminService;
-import org.argeo.security.nature.SimpleUserNature;
-
-public class DefaultUserAdminService implements UserAdminService {
-       private String superUsername = "root";
-       private UserAdminDao userAdminDao;
-
-       public void newRole(String role) {
-               userAdminDao.createRole(role, getSuperUsername());
-       }
-
-       public void updateUserPassword(String username, String password) {
-               userAdminDao.updateUserPassword(username, password);
-       }
-
-       public void newUser(ArgeoUser user) {
-               // pre-process
-               SimpleUserNature simpleUserNature;
-               try {
-                       simpleUserNature = SimpleUserNature
-                                       .findSimpleUserNature(user, null);
-               } catch (Exception e) {
-                       simpleUserNature = new SimpleUserNature();
-                       user.getUserNatures().put("simpleUserNature", simpleUserNature);
-               }
-
-               if (simpleUserNature.getLastName() == null
-                               || simpleUserNature.getLastName().equals("")) {
-                       // to prevent issue with sn in LDAP
-                       simpleUserNature.setLastName("empty");
-               }
-
-               userAdminDao.createUser(user);
-       }
-       
-       
-
-       public void synchronize() {
-               // TODO Auto-generated method stub
-               
-       }
-
-       public ArgeoUser getUser(String username) {
-               return userAdminDao.getUser(username);
-       }
-
-       public Boolean userExists(String username) {
-               return userAdminDao.userExists(username);
-       }
-
-       public void updateUser(ArgeoUser user) {
-               userAdminDao.updateUser(user);
-       }
-
-       public void deleteUser(String username) {
-               userAdminDao.deleteUser(username);
-
-       }
-
-       public void deleteRole(String role) {
-               userAdminDao.deleteRole(role);
-       }
-
-       public Set<ArgeoUser> listUsersInRole(String role) {
-               Set<ArgeoUser> lst = new HashSet<ArgeoUser>(
-                               userAdminDao.listUsersInRole(role));
-               Iterator<ArgeoUser> it = lst.iterator();
-               while (it.hasNext()) {
-                       if (it.next().getUsername().equals(getSuperUsername())) {
-                               it.remove();
-                               break;
-                       }
-               }
-               return lst;
-       }
-
-       public Set<ArgeoUser> listUsers() {
-               return userAdminDao.listUsers();
-       }
-
-       public List<String> listUserRoles(String username) {
-               return getUser(username).getRoles();
-       }
-
-       public Set<String> listEditableRoles() {
-               return userAdminDao.listEditableRoles();
-       }
-
-       // TODO: expose it via the interface as well?
-       public String getSuperUsername() {
-               return superUsername;
-       }
-
-       public void setUserAdminDao(UserAdminDao userAdminDao) {
-               this.userAdminDao = userAdminDao;
-       }
-
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/CurrentUserDaoJcr.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/CurrentUserDaoJcr.java
deleted file mode 100644 (file)
index 0c8cc33..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.argeo.security.jcr;
-
-import org.argeo.security.CurrentUserDao;
-
-public class CurrentUserDaoJcr implements CurrentUserDao {
-       private String defaultRole= "ROLE_USER";
-
-       public void updateCurrentUserPassword(String oldPassword, String newPassword) {
-               throw new UnsupportedOperationException(
-                               "Updating passwords is not supported");
-       }
-
-       public String getDefaultRole() {
-               return defaultRole;
-       }
-
-       public void setDefaultRole(String defaultRole) {
-               this.defaultRole = defaultRole;
-       }
-
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/CurrentUserServiceJcr.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/CurrentUserServiceJcr.java
deleted file mode 100644 (file)
index 2c2a1ce..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.argeo.security.jcr;
-
-import java.util.Map;
-
-import javax.jcr.Session;
-
-import org.argeo.ArgeoException;
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.CurrentUserDao;
-import org.argeo.security.CurrentUserService;
-import org.argeo.security.UserNature;
-import org.springframework.security.Authentication;
-import org.springframework.security.context.SecurityContextHolder;
-
-public class CurrentUserServiceJcr implements CurrentUserService {
-       private Session session;
-       private CurrentUserDao currentUserDao;
-
-       public ArgeoUser getCurrentUser() {
-               Authentication authentication = SecurityContextHolder.getContext()
-                               .getAuthentication();
-
-               Session userSession;
-               if (authentication instanceof JcrAuthenticationToken) {
-                       userSession = ((JcrAuthenticationToken) authentication)
-                                       .getSession();
-               } else {
-                       if (session == null)
-                               throw new ArgeoException("No user JCR session available");
-                       userSession = session;
-               }
-
-               JcrUserDetails jcrUserDetails = (JcrUserDetails) authentication
-                               .getDetails();
-               return JcrUserDetails.jcrUserDetailsToArgeoUser(userSession,
-                               jcrUserDetails);
-       }
-
-       public void updateCurrentUserPassword(String oldPassword, String newPassword) {
-               currentUserDao.updateCurrentUserPassword(oldPassword, newPassword);
-
-       }
-
-       public void updateCurrentUserNatures(Map<String, UserNature> userNatures) {
-               // TODO Auto-generated method stub
-
-       }
-
-       public void setSession(Session session) {
-               this.session = session;
-       }
-
-       public void setCurrentUserDao(CurrentUserDao currentUserDao) {
-               this.currentUserDao = currentUserDao;
-       }
-
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/JcrArgeoUser.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/JcrArgeoUser.java
deleted file mode 100644 (file)
index 131d6ea..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.argeo.security.jcr;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.argeo.ArgeoException;
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.UserNature;
-
-public class JcrArgeoUser implements ArgeoUser {
-       /** Cached for performance reasons. */
-       private final String username;
-       private final Node home;
-       private final List<String> roles;
-       private final Boolean enabled;
-       private final String password;
-
-       public JcrArgeoUser(Node home, String password, List<String> roles,
-                       Boolean enabled) {
-               this.home = home;
-               this.password = password;
-               this.roles = Collections.unmodifiableList(new ArrayList<String>(roles));
-               this.enabled = enabled;
-               try {
-                       username = home.getSession().getUserID();
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot find JCR user id", e);
-               }
-
-       }
-
-       public String getUsername() {
-               return username;
-       }
-
-       public Map<String, UserNature> getUserNatures() {
-               throw new UnsupportedOperationException("deprecated");
-       }
-
-       public void updateUserNatures(Map<String, UserNature> userNatures) {
-               throw new UnsupportedOperationException("deprecated");
-       }
-
-       public List<String> getRoles() {
-               return roles;
-       }
-
-       public String getPassword() {
-               return password;
-       }
-
-       public Node getHome() {
-               return home;
-       }
-
-       public Boolean getEnabled() {
-               return enabled;
-       }
-
-       public boolean equals(Object obj) {
-               if (!(obj instanceof ArgeoUser))
-                       return false;
-               return ((ArgeoUser) obj).getUsername().equals(username);
-       }
-
-       @Override
-       public int hashCode() {
-               return username.hashCode();
-       }
-
-       public String toString() {
-               return getUsername() + "@" + getHome();
-       }
-}
index 3815b843b18c447650f2de9be7e45a322528b389..f7d016cf40cbd1983400c83adbd301e344a3d81e 100644 (file)
@@ -3,11 +3,6 @@ package org.argeo.security.jcr;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.argeo.ArgeoException;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthorityImpl;
 import org.springframework.security.userdetails.User;
@@ -29,44 +24,6 @@ public class JcrUserDetails extends User {
                return homePath;
        }
 
-       public static JcrUserDetails argeoUserToJcrUserDetails(
-                       JcrArgeoUser argeoUser) {
-               try {
-                       List<GrantedAuthority> gas = new ArrayList<GrantedAuthority>();
-                       for (String role : argeoUser.getRoles())
-                               gas.add(new GrantedAuthorityImpl(role));
-                       return new JcrUserDetails(argeoUser.getHome().getPath(),
-                                       argeoUser.getUsername(), argeoUser.getPassword(),
-                                       argeoUser.getEnabled(), true, true, true,
-                                       gas.toArray(new GrantedAuthority[gas.size()]));
-               } catch (Exception e) {
-                       throw new ArgeoException("Cannot convert " + argeoUser
-                                       + " to JCR user details", e);
-               }
-       }
-
-       public static JcrArgeoUser jcrUserDetailsToArgeoUser(Session userSession,
-                       JcrUserDetails jcrUserDetails) {
-               if (!userSession.getUserID().equals(jcrUserDetails.getUsername()))
-                       throw new ArgeoException("User session has user id "
-                                       + userSession.getUserID() + " while details has username "
-                                       + jcrUserDetails.getUsername());
-
-               Node userHome;
-               try {
-                       userHome = userSession.getNode(jcrUserDetails.getHomePath());
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot retrieve user home with path "
-                                       + jcrUserDetails.getHomePath(), e);
-               }
-               List<String> roles = new ArrayList<String>();
-               for (GrantedAuthority ga : jcrUserDetails.getAuthorities())
-                       roles.add(ga.getAuthority());
-               return new JcrArgeoUser(userHome, jcrUserDetails.getPassword(), roles,
-                               jcrUserDetails.isEnabled());
-
-       }
-
        public JcrUserDetails cloneWithNewRoles(List<String> roles) {
                List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
                for (String role : roles) {
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/CoworkerNature.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/CoworkerNature.java
deleted file mode 100644 (file)
index ac05032..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security.nature;
-
-import org.argeo.security.AbstractUserNature;
-
-public class CoworkerNature extends AbstractUserNature {
-       private static final long serialVersionUID = 1L;
-       private String mobile;
-       private String telephoneNumber;
-
-       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;
-       }
-
-}
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
deleted file mode 100644 (file)
index 08ac376..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-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
deleted file mode 100644 (file)
index 3984ffe..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-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;
-       }
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/SimpleUserNature.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/SimpleUserNature.java
deleted file mode 100644 (file)
index e400e99..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security.nature;
-
-import org.argeo.ArgeoException;
-import org.argeo.security.AbstractUserNature;
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.UserNature;
-
-@Deprecated
-public class SimpleUserNature extends AbstractUserNature {
-       /**
-        * No PAI, for internal use within the Argeo Security framework. Will
-        * probably be removed.
-        */
-       public final static String TYPE = "simpleUser";
-
-       private static final long serialVersionUID = 1L;
-       private String email;
-       private String firstName;
-       private String lastName;
-       private String description;
-
-       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 getDescription() {
-               return description;
-       }
-
-       public void setDescription(String description) {
-               this.description = description;
-       }
-
-       /*
-        * SECURITY UTILITIES
-        */
-       /**
-        * Finds a user nature extending {@link SimpleUserNature} in the provided
-        * user.
-        * 
-        * @param user
-        *            the user to scan
-        * @param simpleNatureType
-        *            the type under which a {@link SimpleUserNature} is registered,
-        *            useful if there are many. can be null.
-        * @return the {@link SimpleUserNature}
-        * @throws ArgeoException
-        *             if no simple user nature was found
-        */
-       public final static SimpleUserNature findSimpleUserNature(ArgeoUser user,
-                       String simpleNatureType) {
-               SimpleUserNature simpleNature = null;
-               if (simpleNatureType != null)
-                       simpleNature = (SimpleUserNature) user.getUserNatures().get(
-                                       simpleNatureType);
-               else
-                       for (UserNature userNature : user.getUserNatures().values())
-                               if (userNature instanceof SimpleUserNature)
-                                       simpleNature = (SimpleUserNature) userNature;
-
-               if (simpleNature == null)
-                       throw new ArgeoException("No simple user nature in user " + user);
-               return simpleNature;
-       }
-
-}
index f30af7060e295bac7260a5d99d0cba8526243728..69bab52937fec3821e4ee53cade532e13aa9f839 100644 (file)
@@ -91,7 +91,7 @@ public class ArgeoLoginModule extends AbstractLoginModule {
                // we resync with Spring Security since the subject may have been reused
                // in beetween
                // TODO: check if this is clean
-               subject.getPrincipals().addAll(syncPrincipals());
+               //subject.getPrincipals().addAll(syncPrincipals());
 
                return true;
        }
index 54ef836a077bde2d852cb346bb6f95127b756868..040d650d7bba1c085aef3c379ffd1ba85fd601f1 100644 (file)
@@ -2,14 +2,27 @@ package org.argeo.security.ldap;
 
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Random;
+import java.util.Set;
+import java.util.TreeSet;
 
+import org.argeo.security.UserAdminDao;
+import org.argeo.security.UserAdminService;
 import org.springframework.ldap.core.ContextSource;
+import org.springframework.security.GrantedAuthority;
 import org.springframework.security.providers.encoding.PasswordEncoder;
+import org.springframework.security.userdetails.UserDetails;
 import org.springframework.security.userdetails.ldap.LdapUserDetailsManager;
 
 /** Extends {@link LdapUserDetailsManager} by adding password encoding support. */
-public class ArgeoLdapUserDetailsManager extends LdapUserDetailsManager {
+public class ArgeoLdapUserDetailsManager extends LdapUserDetailsManager
+               implements UserAdminService {
+       private String superUsername = "root";
+       private UserAdminDao userAdminDao;
        private PasswordEncoder passwordEncoder;
        private final Random random;
 
@@ -31,6 +44,46 @@ public class ArgeoLdapUserDetailsManager extends LdapUserDetailsManager {
                super.changePassword(oldPassword, encodePassword(newPassword));
        }
 
+       public void newRole(String role) {
+               userAdminDao.createRole(role, superUsername);
+       }
+
+       public void synchronize() {
+               for (String username : userAdminDao.listUsers())
+                       loadUserByUsername(username);
+               // TODO: find a way to remove from JCR
+       }
+
+       public void deleteRole(String role) {
+               userAdminDao.deleteRole(role);
+       }
+
+       public Set<String> listUsersInRole(String role) {
+               Set<String> lst = new TreeSet<String>(
+                               userAdminDao.listUsersInRole(role));
+               Iterator<String> it = lst.iterator();
+               while (it.hasNext()) {
+                       if (it.next().equals(superUsername)) {
+                               it.remove();
+                               break;
+                       }
+               }
+               return lst;
+       }
+
+       public List<String> listUserRoles(String username) {
+               UserDetails userDetails = loadUserByUsername(username);
+               List<String> roles = new ArrayList<String>();
+               for (GrantedAuthority ga : userDetails.getAuthorities()) {
+                       roles.add(ga.getAuthority());
+               }
+               return Collections.unmodifiableList(roles);
+       }
+
+       public Set<String> listEditableRoles() {
+               return userAdminDao.listEditableRoles();
+       }
+
        protected String encodePassword(String password) {
                if (!password.startsWith("{")) {
                        byte[] salt = new byte[16];
@@ -45,4 +98,12 @@ public class ArgeoLdapUserDetailsManager extends LdapUserDetailsManager {
                this.passwordEncoder = passwordEncoder;
        }
 
+       public void setSuperUsername(String superUsername) {
+               this.superUsername = superUsername;
+       }
+
+       public void setUserAdminDao(UserAdminDao userAdminDao) {
+               this.userAdminDao = userAdminDao;
+       }
+
 }
index 200ed351e93b48fc92699ab46daf5aa4874290fe..dc6cd6392030cada61bf78712dc9cca790fadb3d 100644 (file)
 
 package org.argeo.security.ldap;
 
-import static org.argeo.security.core.ArgeoUserDetails.createSimpleArgeoUser;
-
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
 import java.util.Collections;
 import java.util.List;
-import java.util.Random;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -30,31 +25,21 @@ import javax.naming.Name;
 import javax.naming.NamingException;
 import javax.naming.directory.DirContext;
 
-import org.argeo.ArgeoException;
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.CurrentUserDao;
-import org.argeo.security.SimpleArgeoUser;
 import org.argeo.security.UserAdminDao;
-import org.argeo.security.core.ArgeoUserDetails;
 import org.springframework.ldap.core.ContextExecutor;
 import org.springframework.ldap.core.ContextMapper;
 import org.springframework.ldap.core.DirContextAdapter;
 import org.springframework.ldap.core.DistinguishedName;
 import org.springframework.ldap.core.LdapTemplate;
 import org.springframework.ldap.core.support.BaseLdapPathContextSource;
-import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.ldap.LdapUsernameToDnMapper;
 import org.springframework.security.ldap.LdapUtils;
-import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
-import org.springframework.security.providers.encoding.PasswordEncoder;
-import org.springframework.security.userdetails.UserDetails;
-import org.springframework.security.userdetails.UserDetailsManager;
 
 /**
  * Wraps a Spring LDAP user details manager, providing additional methods to
  * manage roles.
  */
-public class ArgeoSecurityDaoLdap implements CurrentUserDao, UserAdminDao {
+public class ArgeoSecurityDaoLdap implements UserAdminDao {
        private String userBase;
        private String usernameAttribute;
        private String groupBase;
@@ -66,63 +51,18 @@ public class ArgeoSecurityDaoLdap implements CurrentUserDao, UserAdminDao {
        private String rolePrefix;
 
        private final LdapTemplate ldapTemplate;
-       private final Random random;
-
        private LdapUsernameToDnMapper usernameMapper;
-       private UserDetailsManager userDetailsManager;
-
-       private PasswordEncoder passwordEncoder;
 
        /**
         * Standard constructor, using the LDAP context source shared with Spring
         * Security components.
         */
        public ArgeoSecurityDaoLdap(BaseLdapPathContextSource contextSource) {
-               this(new LdapTemplate(contextSource), createRandom());
-       }
-
-       /**
-        * Advanced constructor allowing to reuse an LDAP template and to explicitly
-        * set the random used as seed for SSHA password generation.
-        */
-       public ArgeoSecurityDaoLdap(LdapTemplate ldapTemplate, Random random) {
-               this.ldapTemplate = ldapTemplate;
-               this.random = random;
-       }
-
-       private static Random createRandom() {
-               try {
-                       return SecureRandom.getInstance("SHA1PRNG");
-               } catch (NoSuchAlgorithmException e) {
-                       return new Random(System.currentTimeMillis());
-               }
-       }
-
-       public synchronized void createUser(ArgeoUser user) {
-               // normalize password
-               if (user instanceof SimpleArgeoUser) {
-                       if (user.getPassword() == null || user.getPassword().equals(""))
-                               ((SimpleArgeoUser) user).setPassword(encodePassword(user
-                                               .getUsername()));
-                       else if (!user.getPassword().startsWith("{"))
-                               ((SimpleArgeoUser) user).setPassword(encodePassword(user
-                                               .getPassword()));
-               }
-               userDetailsManager.createUser(new ArgeoUserDetails(user));
-       }
-
-       public synchronized ArgeoUser getUser(String uname) {
-               SimpleArgeoUser user = createSimpleArgeoUser(getDetails(uname));
-               user.setPassword(null);
-               return user;
-       }
-
-       public synchronized ArgeoUser getUserWithPassword(String uname) {
-               return createSimpleArgeoUser(getDetails(uname));
+               this.ldapTemplate = new LdapTemplate(contextSource);
        }
 
        @SuppressWarnings("unchecked")
-       public synchronized Set<ArgeoUser> listUsers() {
+       public synchronized Set<String> listUsers() {
                List<String> usernames = (List<String>) ldapTemplate.listBindings(
                                new DistinguishedName(userBase), new ContextMapper() {
                                        public Object mapFromContext(Object ctxArg) {
@@ -131,11 +71,8 @@ public class ArgeoSecurityDaoLdap implements CurrentUserDao, UserAdminDao {
                                        }
                                });
 
-               TreeSet<ArgeoUser> lst = new TreeSet<ArgeoUser>();
-               for (String username : usernames) {
-                       lst.add(createSimpleArgeoUser(getDetails(username)));
-               }
-               return Collections.unmodifiableSortedSet(lst);
+               return Collections
+                               .unmodifiableSortedSet(new TreeSet<String>(usernames));
        }
 
        @SuppressWarnings("unchecked")
@@ -152,76 +89,24 @@ public class ArgeoSecurityDaoLdap implements CurrentUserDao, UserAdminDao {
        }
 
        @SuppressWarnings("unchecked")
-       public Set<ArgeoUser> listUsersInRole(String role) {
-               return (Set<ArgeoUser>) ldapTemplate.lookup(
+       public Set<String> listUsersInRole(String role) {
+               return (Set<String>) ldapTemplate.lookup(
                                buildGroupDn(convertRoleToGroup(role)), new ContextMapper() {
                                        public Object mapFromContext(Object ctxArg) {
                                                DirContextAdapter ctx = (DirContextAdapter) ctxArg;
                                                String[] userDns = ctx
                                                                .getStringAttributes(groupMemberAttribute);
-                                               TreeSet<ArgeoUser> set = new TreeSet<ArgeoUser>();
+                                               TreeSet<String> set = new TreeSet<String>();
                                                for (String userDn : userDns) {
                                                        DistinguishedName dn = new DistinguishedName(userDn);
                                                        String username = dn.getValue(usernameAttribute);
-                                                       set.add(createSimpleArgeoUser(getDetails(username)));
+                                                       set.add(username);
                                                }
                                                return Collections.unmodifiableSortedSet(set);
                                        }
                                });
        }
 
-       public synchronized void updateUser(ArgeoUser user) {
-               // normalize password
-               String password = user.getPassword();
-               if (password == null)
-                       password = getUserWithPassword(user.getUsername()).getPassword();
-               if (!password.startsWith("{"))
-                       password = encodePassword(user.getPassword());
-               SimpleArgeoUser simpleArgeoUser = new SimpleArgeoUser(user);
-               simpleArgeoUser.setPassword(password);
-
-               ArgeoUserDetails argeoUserDetails = new ArgeoUserDetails(user);
-               userDetailsManager.updateUser(new ArgeoUserDetails(user));
-               // refresh logged in user
-               if (ArgeoUserDetails.securityContextUser().getUsername()
-                               .equals(argeoUserDetails.getUsername())) {
-                       SecurityContextHolder.getContext().setAuthentication(
-                                       new UsernamePasswordAuthenticationToken(argeoUserDetails,
-                                                       null, argeoUserDetails.getAuthorities()));
-               }
-       }
-
-       public void updateCurrentUserPassword(String oldPassword, String newPassword) {
-               SimpleArgeoUser user = new SimpleArgeoUser(
-                               ArgeoUserDetails.securityContextUser());
-               if (!passwordEncoder.isPasswordValid(user.getPassword(), oldPassword,
-                               null))
-                       throw new ArgeoException("Old password is not correct.");
-               user.setPassword(encodePassword(newPassword));
-               updateUser(user);
-               //userDetailsManager.changePassword(oldPassword, newPassword);
-       }
-
-       public void updateUserPassword(String username, String password) {
-               SimpleArgeoUser user = new SimpleArgeoUser(getUser(username));
-               user.setPassword(encodePassword(password));
-               updateUser(user);
-       }
-
-       protected String encodePassword(String password) {
-               byte[] salt = new byte[16];
-               random.nextBytes(salt);
-               return passwordEncoder.encodePassword(password, salt);
-       }
-
-       public synchronized void deleteUser(String username) {
-               userDetailsManager.deleteUser(username);
-       }
-
-       public synchronized Boolean userExists(String username) {
-               return userDetailsManager.userExists(username);
-       }
-
        public void createRole(String role, final String superuserName) {
                String group = convertRoleToGroup(role);
                DistinguishedName superuserDn = (DistinguishedName) ldapTemplate
@@ -270,10 +155,6 @@ public class ArgeoSecurityDaoLdap implements CurrentUserDao, UserAdminDao {
                                + groupBase);
        }
 
-       public void setUserDetailsManager(UserDetailsManager userDetailsManager) {
-               this.userDetailsManager = userDetailsManager;
-       }
-
        public void setUserBase(String userBase) {
                this.userBase = userBase;
        }
@@ -282,10 +163,6 @@ public class ArgeoSecurityDaoLdap implements CurrentUserDao, UserAdminDao {
                this.usernameAttribute = usernameAttribute;
        }
 
-       protected UserDetails getDetails(String username) {
-               return userDetailsManager.loadUserByUsername(username);
-       }
-
        public void setGroupBase(String groupBase) {
                this.groupBase = groupBase;
        }
@@ -317,9 +194,4 @@ public class ArgeoSecurityDaoLdap implements CurrentUserDao, UserAdminDao {
        public void setGroupClasses(String[] groupClasses) {
                this.groupClasses = groupClasses;
        }
-
-       public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
-               this.passwordEncoder = passwordEncoder;
-       }
-
 }
diff --git a/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/ArgeoUserDetailsContextMapper.java b/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/ArgeoUserDetailsContextMapper.java
deleted file mode 100644 (file)
index 459d5e5..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security.ldap;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.UserNature;
-import org.argeo.security.core.ArgeoUserDetails;
-import org.springframework.ldap.core.DirContextAdapter;
-import org.springframework.ldap.core.DirContextOperations;
-import org.springframework.security.GrantedAuthority;
-import org.springframework.security.userdetails.UserDetails;
-import org.springframework.security.userdetails.ldap.UserDetailsContextMapper;
-
-/**
- * Performs the mapping between LDAP and the user natures, using
- * {@link UserNatureMapper}.
- */
-public class ArgeoUserDetailsContextMapper implements UserDetailsContextMapper {
-       // private final static Log log = LogFactory
-       // .getLog(ArgeoUserDetailsContextMapper.class);
-
-       private List<UserNatureMapper> userNatureMappers = new ArrayList<UserNatureMapper>();
-
-       public UserDetails mapUserFromContext(DirContextOperations ctx,
-                       String username, GrantedAuthority[] authorities) {
-               byte[] arr = (byte[]) ctx.getAttributeSortedStringSet("userPassword")
-                               .first();
-               String password = new String(arr);
-
-               Map<String, UserNature> userNatures = new HashMap<String, UserNature>();
-               for (UserNatureMapper userInfoMapper : userNatureMappers) {
-                       UserNature userNature = userInfoMapper.mapUserInfoFromContext(ctx);
-                       if (userNature != null)
-                               userNatures.put(userInfoMapper.getName(), userNature);
-               }
-
-               return new ArgeoUserDetails(username,
-                               Collections.unmodifiableMap(userNatures), password, authorities);
-       }
-
-       public void mapUserToContext(UserDetails user, DirContextAdapter ctx) {
-               ctx.setAttributeValues("objectClass", new String[] { "inetOrgPerson" });
-               ctx.setAttributeValue("uid", user.getUsername());
-               ctx.setAttributeValue("userPassword", user.getPassword());
-               if (user instanceof ArgeoUser) {
-                       ArgeoUser argeoUser = (ArgeoUser) user;
-                       for (UserNature userNature : argeoUser.getUserNatures().values()) {
-                               for (UserNatureMapper userInfoMapper : userNatureMappers) {
-                                       if (userInfoMapper.supports(userNature)) {
-                                               userInfoMapper.mapUserInfoToContext(userNature, ctx);
-                                               break;// use the first mapper found and no others
-                                       }
-                               }
-                       }
-               }
-       }
-
-       public void setUserNatureMappers(List<UserNatureMapper> userNatureMappers) {
-               this.userNatureMappers = userNatureMappers;
-       }
-
-}
diff --git a/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/UserNatureMapper.java b/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/UserNatureMapper.java
deleted file mode 100644 (file)
index 81d9f91..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security.ldap;
-
-import org.argeo.security.UserNature;
-import org.springframework.ldap.core.DirContextAdapter;
-import org.springframework.ldap.core.DirContextOperations;
-
-/** Maps a user nature from LDAP. */
-public interface UserNatureMapper {
-       public String getName();
-
-       public void mapUserInfoToContext(UserNature userInfo, DirContextAdapter ctx);
-
-       public UserNature mapUserInfoFromContext(DirContextOperations ctx);
-
-       public Boolean supports(UserNature userInfo);
-}
diff --git a/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/nature/CoworkerUserNatureMapper.java b/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/nature/CoworkerUserNatureMapper.java
deleted file mode 100644 (file)
index 761d118..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security.ldap.nature;
-
-import org.argeo.security.UserNature;
-import org.argeo.security.ldap.UserNatureMapper;
-import org.argeo.security.nature.CoworkerNature;
-import org.springframework.ldap.core.DirContextAdapter;
-import org.springframework.ldap.core.DirContextOperations;
-
-public class CoworkerUserNatureMapper implements UserNatureMapper {
-
-       public String getName() {
-               return "coworker";
-       }
-
-       public UserNature mapUserInfoFromContext(DirContextOperations ctx) {
-               CoworkerNature nature = new CoworkerNature();
-               nature.setMobile(ctx.getStringAttribute("mobile"));
-               nature.setTelephoneNumber(ctx.getStringAttribute("telephoneNumber"));
-
-               if (nature.getMobile() == null && nature.getTelephoneNumber() == null)
-                       return null;
-               else
-                       return nature;
-       }
-
-       public void mapUserInfoToContext(UserNature userInfoArg,
-                       DirContextAdapter ctx) {
-               CoworkerNature nature = (CoworkerNature) userInfoArg;
-               if (nature.getMobile() == null || !nature.getMobile().equals("")) {
-                       ctx.setAttributeValue("mobile", nature.getMobile());
-               }
-               if (nature.getTelephoneNumber() == null
-                               || !nature.getTelephoneNumber().equals("")) {
-                       ctx.setAttributeValue("telephoneNumber",
-                                       nature.getTelephoneNumber());
-               }
-       }
-
-       public Boolean supports(UserNature userNature) {
-               return userNature instanceof CoworkerNature;
-       }
-
-}
diff --git a/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java b/security/runtime/org.argeo.security.ldap/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java
deleted file mode 100644 (file)
index 681c517..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.argeo.security.ldap.nature;
-
-import org.argeo.security.UserNature;
-import org.argeo.security.ldap.UserNatureMapper;
-import org.argeo.security.nature.SimpleUserNature;
-import org.springframework.ldap.core.DirContextAdapter;
-import org.springframework.ldap.core.DirContextOperations;
-
-public class SimpleUserNatureMapper implements UserNatureMapper {
-       public String getName() {
-               return SimpleUserNature.TYPE;
-       }
-
-       public UserNature mapUserInfoFromContext(DirContextOperations ctx) {
-               SimpleUserNature nature = new SimpleUserNature();
-               nature.setLastName(ctx.getStringAttribute("sn"));
-               nature.setFirstName(ctx.getStringAttribute("givenName"));
-               nature.setEmail(ctx.getStringAttribute("mail"));
-               nature.setDescription(ctx.getStringAttribute("description"));
-               return nature;
-       }
-
-       public void mapUserInfoToContext(UserNature userInfoArg,
-                       DirContextAdapter ctx) {
-               SimpleUserNature nature = (SimpleUserNature) userInfoArg;
-               ctx.setAttributeValue("cn",
-                               nature.getFirstName() + " " + nature.getLastName());
-               ctx.setAttributeValue("sn", nature.getLastName());
-               ctx.setAttributeValue("givenName", nature.getFirstName());
-               ctx.setAttributeValue("mail", nature.getEmail());
-               if (nature.getDescription() != null
-                               && !nature.getDescription().equals("")) {
-                       ctx.setAttributeValue("description", nature.getDescription());
-               }
-       }
-
-       public Boolean supports(UserNature userNature) {
-               return userNature instanceof SimpleUserNature;
-       }
-
-}
index 641ca066a3fb9f2efc6542c6831dc55dc7228071..9ecd07c06f03a0cb00e0af8bfe44360b945df83f 100644 (file)
@@ -13,7 +13,7 @@
        <packaging>pom</packaging>
        <modules>
                <module>org.argeo.security.core</module>
-               <module>org.argeo.security.mvc</module>
+<!--           <module>org.argeo.security.mvc</module> -->
                <module>org.argeo.security.ldap</module>
                <module>org.argeo.security.activemq</module>
                <module>org.argeo.security.jackrabbit</module>
@@ -71,7 +71,7 @@
                                <activeByDefault>true</activeByDefault>
                        </activation>
                        <modules>
-                               <module>org.argeo.security.ria</module>
+<!--                           <module>org.argeo.security.ria</module> -->
                        </modules>
                </profile>
                <profile>
index 77309feea0ad8e88c507b81f279184ac3b750373..bc7862f5fea23b5a3a2b4d935cfbb1bed2d13ebc 100644 (file)
@@ -663,10 +663,10 @@ public class JcrUtils implements ArgeoJcrConstants {
         *            the session to use in order to perform the search, this can be
         *            a session with a different user ID than the one searched,
         *            typically when a system or admin session is used.
-        * @param userID
-        *            the id of the user
+        * @param username
+        *            the username of the user
         */
-       public static Node getUserHome(Session session, String userID) {
+       public static Node getUserHome(Session session, String username) {
                try {
                        QueryObjectModelFactory qomf = session.getWorkspace()
                                        .getQueryManager().getQOMFactory();
@@ -677,18 +677,18 @@ public class JcrUtils implements ArgeoJcrConstants {
                        DynamicOperand userIdDop = qomf.propertyValue("userHome",
                                        ArgeoNames.ARGEO_USER_ID);
                        StaticOperand userIdSop = qomf.literal(session.getValueFactory()
-                                       .createValue(userID));
+                                       .createValue(username));
                        Constraint constraint = qomf.comparison(userIdDop,
                                        QueryObjectModelFactory.JCR_OPERATOR_EQUAL_TO, userIdSop);
                        Query query = qomf.createQuery(userHomeSel, constraint, null, null);
                        Node userHome = JcrUtils.querySingleNode(query);
                        return userHome;
                } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot find home for user " + userID, e);
+                       throw new ArgeoException("Cannot find home for user " + username, e);
                }
        }
 
-       public static Node getUserProfile(Session session, String userID) {
+       public static Node getUserProfile(Session session, String username) {
                try {
                        QueryObjectModelFactory qomf = session.getWorkspace()
                                        .getQueryManager().getQOMFactory();
@@ -697,21 +697,23 @@ public class JcrUtils implements ArgeoJcrConstants {
                        DynamicOperand userIdDop = qomf.propertyValue("userProfile",
                                        ArgeoNames.ARGEO_USER_ID);
                        StaticOperand userIdSop = qomf.literal(session.getValueFactory()
-                                       .createValue(userID));
+                                       .createValue(username));
                        Constraint constraint = qomf.comparison(userIdDop,
                                        QueryObjectModelFactory.JCR_OPERATOR_EQUAL_TO, userIdSop);
                        Query query = qomf.createQuery(sel, constraint, null, null);
                        Node userHome = JcrUtils.querySingleNode(query);
                        return userHome;
                } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot find profile for user " + userID,
-                                       e);
+                       throw new ArgeoException(
+                                       "Cannot find profile for user " + username, e);
                }
        }
 
        public static Node createUserHome(Session session, String homeBasePath,
                        String username) {
                try {
+                       if (session == null)
+                               throw new ArgeoException("Session is null");
                        if (session.hasPendingChanges())
                                throw new ArgeoException(
                                                "Session has pending changes, save them first");
@@ -724,11 +726,6 @@ public class JcrUtils implements ArgeoJcrConstants {
                        userProfile.setProperty(ArgeoNames.ARGEO_USER_ID, username);
                        session.save();
                        // we need to save the profile before adding the user home type
-                       PropertyIterator pit = userHome.getProperties();
-                       while (pit.hasNext()) {
-                               Property p = pit.nextProperty();
-                               log.debug(p.getName() + "=" + p.getValue().getString());
-                       }
                        userHome.addMixin(ArgeoTypes.ARGEO_USER_HOME);
                        // see
                        // http://jackrabbit.510166.n4.nabble.com/Jackrabbit-2-0-beta-6-Problem-adding-a-Mixin-type-with-mandatory-properties-after-setting-propertiesn-td1290332.html