package org.argeo.app.core;
import java.util.HashSet;
-import java.util.Optional;
import java.util.Set;
import javax.jcr.Node;
import javax.xml.namespace.QName;
import org.argeo.api.acr.Content;
+import org.argeo.api.acr.ldap.LdapAttr;
+import org.argeo.api.acr.ldap.LdapObj;
import org.argeo.api.cms.CmsConstants;
import org.argeo.api.cms.CmsSession;
import org.argeo.app.api.EntityType;
-import org.argeo.cms.auth.RoleNameUtils;
+import org.argeo.cms.RoleNameUtils;
import org.argeo.jcr.JcrException;
import org.argeo.jcr.JcrUtils;
-import org.argeo.util.naming.LdapAttrs;
-import org.argeo.util.naming.LdapObjs;
/** Utilities around the Argeo Suite APIs. */
public class SuiteUtils {
- @Deprecated
+ public final static String USER_STATE_NODE_NAME = "state";
+ public final static String USER_DEVICES_NODE_NAME = "devices";
+ public final static String USER_SESSIONS_NODE_NAME = "sessions";
+
public static String getUserNodePath(String userDn) {
String uid = RoleNameUtils.getLastRdnValue(userDn);
return EntityType.user.basePath() + '/' + uid;
}
- @Deprecated
- private static Node getOrCreateUserNode(Session adminSession, String userDn) {
+ public static Node getOrCreateUserNode(Session adminSession, String userDn) {
try {
Node usersBase = adminSession.getNode(EntityType.user.basePath());
String uid = RoleNameUtils.getLastRdnValue(userDn);
userNode = usersBase.addNode(uid, NodeType.NT_UNSTRUCTURED);
userNode.addMixin(EntityType.user.get());
userNode.addMixin(NodeType.MIX_CREATED);
- userNode.setProperty(LdapAttrs.distinguishedName.property(), userDn.toString());
- userNode.setProperty(LdapAttrs.uid.property(), uid);
+ userNode.setProperty(LdapAttr.distinguishedName.get(), userDn.toString());
+ userNode.setProperty(LdapAttr.uid.get(), uid);
+
+ userNode.addNode(USER_SESSIONS_NODE_NAME, NodeType.NT_UNSTRUCTURED);
+ Node userStateNode = userNode.addNode(USER_STATE_NODE_NAME, NodeType.NT_UNSTRUCTURED);
+ Node userDevicesNode = userNode.addNode(USER_DEVICES_NODE_NAME, NodeType.NT_UNSTRUCTURED);
+
adminSession.save();
// JackrabbitSecurityUtils.denyPrivilege(adminSession, userNode.getPath(), SuiteRole.coworker.dn(),
// Privilege.JCR_READ);
Privilege.JCR_READ);
JcrUtils.addPrivilege(adminSession, userNode.getPath(), CmsConstants.ROLE_USER_ADMIN,
Privilege.JCR_ALL);
+
+ JcrUtils.addPrivilege(adminSession, userStateNode.getPath(), userDn, Privilege.JCR_ALL);
+ JcrUtils.addPrivilege(adminSession, userDevicesNode.getPath(), userDn, Privilege.JCR_ALL);
+
} else {
userNode = usersBase.getNode(uid);
}
}
}
- @Deprecated
public static Node getCmsSessionNode(Session session, CmsSession cmsSession) {
try {
- return session.getNode(getUserNodePath(cmsSession.getUserDn()) + '/' + cmsSession.getUuid().toString());
+ return session.getNode(getUserNodePath(cmsSession.getUserDn()) + '/' + USER_SESSIONS_NODE_NAME + '/'
+ + cmsSession.getUuid().toString());
} catch (RepositoryException e) {
throw new JcrException("Cannot get session dir for " + cmsSession, e);
}
}
- @Deprecated
public static Node getOrCreateCmsSessionNode(Session adminSession, CmsSession cmsSession) {
try {
String userDn = cmsSession.getUserDn();
-// String uid = userDn.get(userDn.size() - 1);
Node userNode = getOrCreateUserNode(adminSession, userDn);
-// if (!usersBase.hasNode(uid)) {
-// userNode = usersBase.addNode(uid, NodeType.NT_UNSTRUCTURED);
-// userNode.addMixin(EntityType.user.get());
-// userNode.addMixin(NodeType.MIX_CREATED);
-// usersBase.setProperty(LdapAttrs.uid.property(), uid);
-// usersBase.setProperty(LdapAttrs.distinguishedName.property(), userDn.toString());
-// adminSession.save();
-// } else {
-// userNode = usersBase.getNode(uid);
-// }
+ Node sessionsNode = userNode.getNode(USER_SESSIONS_NODE_NAME);
String cmsSessionUuid = cmsSession.getUuid().toString();
Node cmsSessionNode;
- if (!userNode.hasNode(cmsSessionUuid)) {
- cmsSessionNode = userNode.addNode(cmsSessionUuid, NodeType.NT_UNSTRUCTURED);
+ if (!sessionsNode.hasNode(cmsSessionUuid)) {
+ cmsSessionNode = sessionsNode.addNode(cmsSessionUuid, NodeType.NT_UNSTRUCTURED);
cmsSessionNode.addMixin(NodeType.MIX_CREATED);
adminSession.save();
JcrUtils.addPrivilege(adminSession, cmsSessionNode.getPath(), cmsSession.getUserRole(),
Privilege.JCR_ALL);
} else {
- cmsSessionNode = userNode.getNode(cmsSessionUuid);
+ cmsSessionNode = sessionsNode.getNode(cmsSessionUuid);
}
return cmsSessionNode;
} catch (RepositoryException e) {
}
synchronized static public long findNextId(Content hierarchyUnit, QName cclass) {
- if (!hierarchyUnit.hasContentClass(LdapObjs.posixGroup.qName()))
+ if (!hierarchyUnit.hasContentClass(LdapObj.posixGroup.qName()))
throw new IllegalArgumentException(hierarchyUnit + " is not a POSIX group");
-
- long min = hierarchyUnit.get(LdapAttrs.gidNumber.qName(), Long.class).orElseThrow();
+
+ long min = hierarchyUnit.get(LdapAttr.gidNumber.qName(), Long.class).orElseThrow();
long currentMax = 0l;
for (Content childHu : hierarchyUnit) {
- if (!childHu.hasContentClass(LdapObjs.organizationalUnit.qName()))
+ if (!childHu.hasContentClass(LdapObj.organizationalUnit.qName()))
continue;
// FIXME filter out functional hierarchy unit
for (Content role : childHu) {
if (role.hasContentClass(cclass)) {
- if (LdapObjs.posixAccount.qName().equals(cclass)) {
- Long id = role.get(LdapAttrs.uidNumber.qName(), Long.class).orElseThrow();
+ if (LdapObj.posixAccount.qName().equals(cclass)) {
+ Long id = role.get(LdapAttr.uidNumber.qName(), Long.class).orElseThrow();
if (id > currentMax)
currentMax = id;
}