]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.suite.core/src/org/argeo/suite/SuiteUtils.java
1 package org
.argeo
.suite
;
4 import javax
.jcr
.RepositoryException
;
5 import javax
.jcr
.Session
;
6 import javax
.jcr
.nodetype
.NodeType
;
7 import javax
.jcr
.security
.Privilege
;
8 import javax
.naming
.ldap
.LdapName
;
9 import javax
.security
.auth
.x500
.X500Principal
;
11 import org
.argeo
.api
.NodeConstants
;
12 import org
.argeo
.cms
.auth
.CmsSession
;
13 import org
.argeo
.entity
.EntityType
;
14 import org
.argeo
.jackrabbit
.security
.JackrabbitSecurityUtils
;
15 import org
.argeo
.jcr
.JcrException
;
16 import org
.argeo
.jcr
.JcrUtils
;
17 import org
.argeo
.naming
.LdapAttrs
;
19 /** Utilities around the Argeo Suite APIs. */
20 public class SuiteUtils
{
22 public static String
getUserNodePath(LdapName userDn
) {
23 String uid
= userDn
.getRdn(userDn
.size() - 1).getValue().toString();
24 return EntityType
.user
.basePath() + '/' + uid
;
27 public static Node
getOrCreateUserNode(Session adminSession
, LdapName userDn
) {
29 Node usersBase
= adminSession
.getNode(EntityType
.user
.basePath());
30 String uid
= userDn
.getRdn(userDn
.size() - 1).getValue().toString();
32 if (!usersBase
.hasNode(uid
)) {
33 userNode
= usersBase
.addNode(uid
, NodeType
.NT_UNSTRUCTURED
);
34 userNode
.addMixin(EntityType
.user
.get());
35 userNode
.addMixin(NodeType
.MIX_CREATED
);
36 userNode
.setProperty(LdapAttrs
.distinguishedName
.property(), userDn
.toString());
37 userNode
.setProperty(LdapAttrs
.uid
.property(), uid
);
39 JackrabbitSecurityUtils
.denyPrivilege(adminSession
, userNode
.getPath(), SuiteRole
.coworker
.dn(),
41 JcrUtils
.addPrivilege(adminSession
, userNode
.getPath(), new X500Principal(userDn
.toString()).getName(),
43 JcrUtils
.addPrivilege(adminSession
, userNode
.getPath(), NodeConstants
.ROLE_USER_ADMIN
,
46 userNode
= usersBase
.getNode(uid
);
49 } catch (RepositoryException e
) {
50 throw new JcrException("Cannot create user node for " + userDn
, e
);
54 public static Node
getCmsSessionNode(Session session
, CmsSession cmsSession
) {
56 return session
.getNode(getUserNodePath(cmsSession
.getUserDn()) + '/' + cmsSession
.getUuid().toString());
57 } catch (RepositoryException e
) {
58 throw new JcrException("Cannot get session dir for " + cmsSession
, e
);
62 public static Node
getOrCreateCmsSessionNode(Session adminSession
, CmsSession cmsSession
) {
64 LdapName userDn
= cmsSession
.getUserDn();
65 // String uid = userDn.get(userDn.size() - 1);
66 Node userNode
= getOrCreateUserNode(adminSession
, userDn
);
67 // if (!usersBase.hasNode(uid)) {
68 // userNode = usersBase.addNode(uid, NodeType.NT_UNSTRUCTURED);
69 // userNode.addMixin(EntityType.user.get());
70 // userNode.addMixin(NodeType.MIX_CREATED);
71 // usersBase.setProperty(LdapAttrs.uid.property(), uid);
72 // usersBase.setProperty(LdapAttrs.distinguishedName.property(), userDn.toString());
73 // adminSession.save();
75 // userNode = usersBase.getNode(uid);
77 String cmsSessionUuid
= cmsSession
.getUuid().toString();
79 if (!userNode
.hasNode(cmsSessionUuid
)) {
80 cmsSessionNode
= userNode
.addNode(cmsSessionUuid
, NodeType
.NT_UNSTRUCTURED
);
81 cmsSessionNode
.addMixin(NodeType
.MIX_CREATED
);
83 JcrUtils
.addPrivilege(adminSession
, cmsSessionNode
.getPath(), cmsSession
.getUserRole(),
86 cmsSessionNode
= userNode
.getNode(cmsSessionUuid
);
88 return cmsSessionNode
;
89 } catch (RepositoryException e
) {
90 throw new JcrException("Cannot create session dir for " + cmsSession
, e
);
95 private SuiteUtils() {