X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=inline;f=security%2Fruntime%2Forg.argeo.security.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fjcr%2FJcrUserDetails.java;fp=security%2Fruntime%2Forg.argeo.security.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fjcr%2FJcrUserDetails.java;h=ea66b5ff74e529f03d2bb97b766253b51e227f7d;hb=ee0981fe4c265fd9cd01e1cc47599fd018bf363a;hp=f200a28a420bdc225314408b790366f617649082;hpb=03db65bd74ce09b696a4c5af15a58df988e5368d;p=lgpl%2Fargeo-commons.git diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/JcrUserDetails.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/JcrUserDetails.java index f200a28a4..ea66b5ff7 100644 --- a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/JcrUserDetails.java +++ b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/JcrUserDetails.java @@ -1,6 +1,15 @@ 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; public class JcrUserDetails extends User { @@ -20,4 +29,41 @@ public class JcrUserDetails extends User { return homePath; } + public static JcrUserDetails argeoUserToJcrUserDetails( + JcrArgeoUser argeoUser) { + try { + List gas = new ArrayList(); + 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 roles = new ArrayList(); + for (GrantedAuthority ga : jcrUserDetails.getAuthorities()) + roles.add(ga.getAuthority()); + return new JcrArgeoUser(userHome, jcrUserDetails.getPassword(), roles, + jcrUserDetails.isEnabled()); + + } }