]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.jcr/src/org/argeo/app/jcr/SuiteJcrUtils.java
1 package org
.argeo
.app
.jcr
;
3 import static org
.argeo
.app
.core
.SuiteUtils
.USER_DEVICES_NODE_NAME
;
4 import static org
.argeo
.app
.core
.SuiteUtils
.USER_SESSIONS_NODE_NAME
;
5 import static org
.argeo
.app
.core
.SuiteUtils
.USER_STATE_NODE_NAME
;
8 import javax
.jcr
.NodeIterator
;
9 import javax
.jcr
.RepositoryException
;
10 import javax
.jcr
.Session
;
11 import javax
.jcr
.nodetype
.NodeType
;
12 import javax
.jcr
.security
.Privilege
;
13 import javax
.security
.auth
.x500
.X500Principal
;
15 import org
.argeo
.api
.acr
.ldap
.LdapAttr
;
16 import org
.argeo
.api
.cms
.CmsConstants
;
17 import org
.argeo
.api
.cms
.CmsSession
;
18 import org
.argeo
.app
.api
.AppUserState
;
19 import org
.argeo
.app
.api
.EntityType
;
20 import org
.argeo
.app
.core
.SuiteUtils
;
21 import org
.argeo
.cms
.RoleNameUtils
;
22 import org
.argeo
.jcr
.JcrException
;
23 import org
.argeo
.jcr
.JcrUtils
;
26 public class SuiteJcrUtils
{
27 /** @deprecated Use {@link AppUserState} instead. */
29 public static Node
getOrCreateUserNode(Session adminSession
, String userDn
) {
31 Node usersBase
= adminSession
.getNode(EntityType
.user
.basePath());
32 String uid
= RoleNameUtils
.getLastRdnValue(userDn
);
34 if (!usersBase
.hasNode(uid
)) {
35 userNode
= usersBase
.addNode(uid
, NodeType
.NT_UNSTRUCTURED
);
36 userNode
.addMixin(EntityType
.user
.get());
37 userNode
.addMixin(NodeType
.MIX_CREATED
);
38 userNode
.setProperty(LdapAttr
.distinguishedName
.get(), userDn
.toString());
39 userNode
.setProperty(LdapAttr
.uid
.get(), uid
);
41 userNode
= usersBase
.getNode(uid
);
44 if (!userNode
.hasNode(USER_SESSIONS_NODE_NAME
)) {
45 // Migrate existing user node
46 Node sessionsNode
= userNode
.addNode(USER_SESSIONS_NODE_NAME
, NodeType
.NT_UNSTRUCTURED
);
47 oldSessions
: for (NodeIterator nit
= userNode
.getNodes(); nit
.hasNext();) {
48 Node child
= nit
.nextNode();
49 if (USER_SESSIONS_NODE_NAME
.equals(child
.getName()) || child
.getName().startsWith("rep:")
50 || child
.getName().startsWith("jcr:"))
52 Node target
= sessionsNode
.addNode(child
.getName());
53 JcrUtils
.copy(child
, target
);
56 Node userStateNode
= userNode
.addNode(USER_STATE_NODE_NAME
, NodeType
.NT_UNSTRUCTURED
);
57 Node userDevicesNode
= userNode
.addNode(USER_DEVICES_NODE_NAME
, NodeType
.NT_UNSTRUCTURED
);
60 // JackrabbitSecurityUtils.denyPrivilege(adminSession, userNode.getPath(), SuiteRole.coworker.dn(),
61 // Privilege.JCR_READ);
62 JcrUtils
.addPrivilege(adminSession
, userNode
.getPath(), new X500Principal(userDn
.toString()).getName(),
64 JcrUtils
.addPrivilege(adminSession
, userNode
.getPath(), CmsConstants
.ROLE_USER_ADMIN
,
67 JcrUtils
.addPrivilege(adminSession
, userStateNode
.getPath(), userDn
, Privilege
.JCR_ALL
);
68 JcrUtils
.addPrivilege(adminSession
, userDevicesNode
.getPath(), userDn
, Privilege
.JCR_ALL
);
71 } catch (RepositoryException e
) {
72 throw new JcrException("Cannot create user node for " + userDn
, e
);
76 /** @deprecated Use {@link AppUserState} instead. */
78 public static Node
getCmsSessionNode(Session session
, CmsSession cmsSession
) {
80 return session
.getNode(SuiteUtils
.getUserNodePath(cmsSession
.getUserDn()) + '/' + USER_SESSIONS_NODE_NAME
81 + '/' + cmsSession
.uuid().toString());
82 } catch (RepositoryException e
) {
83 throw new JcrException("Cannot get session dir for " + cmsSession
, e
);
87 /** @deprecated Use {@link AppUserState} instead. */
89 public static Node
getOrCreateCmsSessionNode(Session adminSession
, CmsSession cmsSession
) {
91 String userDn
= cmsSession
.getUserDn();
92 Node userNode
= getOrCreateUserNode(adminSession
, userDn
);
93 Node sessionsNode
= userNode
.getNode(USER_SESSIONS_NODE_NAME
);
94 String cmsSessionUuid
= cmsSession
.uuid().toString();
96 if (!sessionsNode
.hasNode(cmsSessionUuid
)) {
97 cmsSessionNode
= sessionsNode
.addNode(cmsSessionUuid
, NodeType
.NT_UNSTRUCTURED
);
98 cmsSessionNode
.addMixin(NodeType
.MIX_CREATED
);
100 JcrUtils
.addPrivilege(adminSession
, cmsSessionNode
.getPath(), cmsSession
.getUserRole(),
103 cmsSessionNode
= sessionsNode
.getNode(cmsSessionUuid
);
105 return cmsSessionNode
;
106 } catch (RepositoryException e
) {
107 throw new JcrException("Cannot create session dir for " + cmsSession
, e
);
112 private SuiteJcrUtils() {