From 3ea877ebf1b76ffd20319f45b535da45b38e2439 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 19 Mar 2013 18:53:08 +0000 Subject: [PATCH] Fix Remote RCP not working https://www.argeo.org/bugzilla/show_bug.cgi?id=148 git-svn-id: https://svn.argeo.org/commons/trunk@6176 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../META-INF/spring/security-jcr-osgi.xml | 10 +++++ .../META-INF/spring/security-jcr-services.xml | 5 +++ .../security/jcr/OsJcrUserAdminService.java | 42 ++++++++++++------- 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-osgi.xml b/security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-osgi.xml index 7ce6f0552..9f6d43256 100644 --- a/security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-osgi.xml +++ b/security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-osgi.xml @@ -15,4 +15,14 @@ + + + + + \ No newline at end of file diff --git a/security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-services.xml b/security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-services.xml index ce2361ef4..1300a0550 100644 --- a/security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-services.xml +++ b/security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-services.xml @@ -32,4 +32,9 @@ + + + + \ No newline at end of file diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/OsJcrUserAdminService.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/OsJcrUserAdminService.java index 8dec3b4eb..c25bdb865 100644 --- a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/OsJcrUserAdminService.java +++ b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/OsJcrUserAdminService.java @@ -15,7 +15,9 @@ */ package org.argeo.security.jcr; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; import javax.jcr.Node; @@ -28,6 +30,7 @@ import org.argeo.jcr.JcrUtils; import org.argeo.jcr.UserJcrUtils; import org.argeo.security.UserAdminService; import org.springframework.dao.DataAccessException; +import org.springframework.security.userdetails.User; import org.springframework.security.userdetails.UserDetails; import org.springframework.security.userdetails.UsernameNotFoundException; @@ -38,6 +41,9 @@ import org.springframework.security.userdetails.UsernameNotFoundException; public class OsJcrUserAdminService implements UserAdminService { private Repository repository; + /** In memory roles provided by applications. */ + private List roles = new ArrayList(); + // private Session adminSession; public void init() { @@ -82,19 +88,24 @@ public class OsJcrUserAdminService implements UserAdminService { public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { if (getSPropertyUsername().equals(username)) { - JcrUserDetails userDetails; - Session adminSession = null; - try { - adminSession = repository.login(); - Node userProfile = UserJcrUtils.getUserProfile(adminSession, - username); - userDetails = new JcrUserDetails(userProfile, "", + UserDetails userDetails; + if (repository != null) { + Session adminSession = null; + try { + adminSession = repository.login(); + Node userProfile = UserJcrUtils.getUserProfile( + adminSession, username); + userDetails = new JcrUserDetails(userProfile, "", + OsJcrAuthenticationProvider.getBaseAuthorities()); + } catch (RepositoryException e) { + throw new ArgeoException( + "Cannot retrieve user profile for " + username, e); + } finally { + JcrUtils.logoutQuietly(adminSession); + } + } else { + userDetails = new User(username, "", true, true, true, true, OsJcrAuthenticationProvider.getBaseAuthorities()); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot retrieve user profile for " - + username, e); - } finally { - JcrUtils.logoutQuietly(adminSession); } return userDetails; } else { @@ -124,17 +135,16 @@ public class OsJcrUserAdminService implements UserAdminService { /** Unsupported */ public void newRole(String role) { - throw new UnsupportedOperationException(); + roles.add(role); } public Set listEditableRoles() { - Set set = new HashSet(); - return set; + return new HashSet(roles); } /** Unsupported */ public void deleteRole(String role) { - throw new UnsupportedOperationException(); + roles.remove(role); } public void setRepository(Repository repository) { -- 2.30.2