]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/runtime/org.argeo.security.jackrabbit/src/main/java/org/argeo/security/jackrabbit/providers/JackrabbitAuthenticationProvider.java
ea84a073eb4862b262299cdef7a4844c14b6a7a7
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.jackrabbit / src / main / java / org / argeo / security / jackrabbit / providers / JackrabbitAuthenticationProvider.java
1 package org.argeo.security.jackrabbit.providers;
2
3 import java.util.ArrayList;
4 import java.util.Iterator;
5 import java.util.List;
6 import java.util.Properties;
7
8 import javax.jcr.Credentials;
9 import javax.jcr.Node;
10 import javax.jcr.Repository;
11 import javax.jcr.RepositoryException;
12 import javax.jcr.Session;
13
14 import org.apache.jackrabbit.api.JackrabbitSession;
15 import org.apache.jackrabbit.api.security.user.Group;
16 import org.apache.jackrabbit.api.security.user.User;
17 import org.apache.jackrabbit.api.security.user.UserManager;
18 import org.argeo.ArgeoException;
19 import org.argeo.jackrabbit.JackrabbitContainer;
20 import org.argeo.jcr.ArgeoJcrConstants;
21 import org.argeo.security.jcr.JcrAuthenticationProvider;
22 import org.osgi.framework.BundleContext;
23 import org.springframework.security.GrantedAuthority;
24 import org.springframework.security.GrantedAuthorityImpl;
25
26 public class JackrabbitAuthenticationProvider extends JcrAuthenticationProvider {
27 // @Override
28 // protected Repository getRepository(String url, Credentials credentials)
29 // throws RepositoryException {
30 // JackrabbitContainer repository = new JackrabbitContainer();
31 // repository.setUri(url);
32 // repository.setRemoteSystemCredentials(credentials);
33 // repository.init();
34 // if (bundleContext != null) {
35 // // FIXME check if not already a node
36 // Properties properties = new Properties();
37 // properties.put(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS,
38 // ArgeoJcrConstants.ALIAS_NODE);
39 // bundleContext.registerService(Repository.class.getName(),
40 // repository, properties);
41 // }
42 // return repository;
43 // }
44
45 @Override
46 protected GrantedAuthority[] getGrantedAuthorities(Session session) {
47 try {
48 if (!(session instanceof JackrabbitSession))
49 return super.getGrantedAuthorities(session);
50
51 JackrabbitSession jackrabbitSession = (JackrabbitSession) session;
52 UserManager userManager = jackrabbitSession.getUserManager();
53 User user = (User) userManager.getAuthorizable(session.getUserID());
54 List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
55 for (Iterator<Group> it = user.memberOf(); it.hasNext();)
56 authorities.add(new GrantedAuthorityImpl(it.next().getID()));
57 return authorities
58 .toArray(new GrantedAuthority[authorities.size()]);
59 } catch (RepositoryException e) {
60 throw new ArgeoException("Cannot retrieve authorities for "
61 + session.getUserID(), e);
62 }
63 }
64
65 @Override
66 protected Boolean isEnabled(Node userHome) {
67 try {
68 if (!(userHome.getSession() instanceof JackrabbitSession))
69 return super.isEnabled(userHome);
70
71 UserManager userManager = ((JackrabbitSession) userHome
72 .getSession()).getUserManager();
73 User user = (User) userManager.getAuthorizable(userHome
74 .getSession().getUserID());
75 return !user.isDisabled();
76 } catch (RepositoryException e) {
77 throw new ArgeoException("Cannot check whether " + userHome
78 + " is enabled", e);
79 }
80 }
81
82 }