X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=security%2Fruntime%2Forg.argeo.security.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fjcr%2FOsJcrUserAdminService.java;fp=security%2Fruntime%2Forg.argeo.security.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fjcr%2FOsJcrUserAdminService.java;h=c25bdb86577f70213aa6e9e95528bbc4ac15b27a;hb=3ea877ebf1b76ffd20319f45b535da45b38e2439;hp=8dec3b4eb33c926f6c81e86dba4759765a912a99;hpb=b7133bb90dcade71c106f8a09ee1e37d33a93ddf;p=lgpl%2Fargeo-commons.git 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) {