]> git.argeo.org Git - lgpl/argeo-commons.git/blob - JackrabbitAuthorizations.java
2347e8c7b37d644f479e85c31411473a9300d993
[lgpl/argeo-commons.git] / JackrabbitAuthorizations.java
1 package org.argeo.jackrabbit;
2
3 import java.security.Principal;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import javax.jcr.RepositoryException;
8 import javax.jcr.Session;
9
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12 import org.apache.jackrabbit.api.JackrabbitSession;
13 import org.apache.jackrabbit.api.security.user.Authorizable;
14 import org.apache.jackrabbit.api.security.user.UserManager;
15 import org.argeo.ArgeoException;
16 import org.argeo.jcr.security.JcrAuthorizations;
17
18 /** Apply authorizations to a Jackrabbit repository. */
19 public class JackrabbitAuthorizations extends JcrAuthorizations {
20 private final static Log log = LogFactory
21 .getLog(JackrabbitAuthorizations.class);
22
23 private List<String> groupPrefixes = new ArrayList<String>();
24
25 @Override
26 protected Principal getOrCreatePrincipal(Session session,
27 String principalName) throws RepositoryException {
28 UserManager um = ((JackrabbitSession) session).getUserManager();
29 Authorizable authorizable = um.getAuthorizable(principalName);
30 if (authorizable == null) {
31 groupPrefixes: for (String groupPrefix : groupPrefixes) {
32 if (principalName.startsWith(groupPrefix)) {
33 authorizable = um.createGroup(principalName);
34 log.info("Created group " + principalName);
35 break groupPrefixes;
36 }
37 }
38 if (authorizable == null)
39 throw new ArgeoException("Authorizable " + principalName
40 + " not found");
41 }
42 return authorizable.getPrincipal();
43 }
44
45 public void setGroupPrefixes(List<String> groupsToCreate) {
46 this.groupPrefixes = groupsToCreate;
47 }
48 }