1 package org
.argeo
.security
.jackrabbit
.providers
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Iterator
;
6 import java
.util
.Properties
;
8 import javax
.jcr
.Credentials
;
10 import javax
.jcr
.Repository
;
11 import javax
.jcr
.RepositoryException
;
12 import javax
.jcr
.Session
;
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
;
26 public class JackrabbitAuthenticationProvider
extends JcrAuthenticationProvider
{
28 // protected Repository getRepository(String url, Credentials credentials)
29 // throws RepositoryException {
30 // JackrabbitContainer repository = new JackrabbitContainer();
31 // repository.setUri(url);
32 // repository.setRemoteSystemCredentials(credentials);
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);
46 protected GrantedAuthority
[] getGrantedAuthorities(Session session
) {
48 if (!(session
instanceof JackrabbitSession
))
49 return super.getGrantedAuthorities(session
);
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()));
58 .toArray(new GrantedAuthority
[authorities
.size()]);
59 } catch (RepositoryException e
) {
60 throw new ArgeoException("Cannot retrieve authorities for "
61 + session
.getUserID(), e
);
66 protected Boolean
isEnabled(Node userHome
) {
68 if (!(userHome
.getSession() instanceof JackrabbitSession
))
69 return super.isEnabled(userHome
);
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