/** Utilities around the Argeo Suite APIs. */
public class SuiteUtils {
+ 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;
}
- 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.addMixin(NodeType.MIX_CREATED);
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);
}
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);
}
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) {
import org.argeo.app.api.EntityNames;
import org.argeo.app.api.EntityType;
import org.argeo.app.api.RankedObject;
+import org.argeo.app.core.SuiteUtils;
import org.argeo.cms.AbstractCmsApp;
import org.argeo.cms.LocaleUtils;
import org.argeo.cms.Localized;
import org.argeo.cms.acr.ContentUtils;
import org.argeo.cms.jcr.CmsJcrUtils;
import org.argeo.cms.jcr.acr.JcrContent;
+import org.argeo.cms.jcr.acr.JcrContentProvider;
import org.argeo.cms.swt.CmsSwtUtils;
import org.argeo.cms.swt.acr.SwtUiProvider;
import org.argeo.cms.swt.dialogs.CmsFeedback;
// ACR
private ContentRepository contentRepository;
-// private JcrContentProvider jcrContentProvider;
+ private JcrContentProvider jcrContentProvider;
// JCR
// private Repository repository;
.get(ContentUtils.SLASH + CmsConstants.SYS_WORKSPACE + publicBasePath);
ui.setUserDir(userDir);
} else {
- Content userDir = contentSession.getSessionRunDir();
+ Node userDirNode = jcrContentProvider.doInAdminSession((adminSession) -> {
+ Node node = SuiteUtils.getOrCreateCmsSessionNode(adminSession, cmsSession);
+ return node;
+ });
+ Content userDir = contentSession
+ .get(ContentUtils.SLASH + CmsConstants.SYS_WORKSPACE + userDirNode.getPath());
ui.setUserDir(userDir);
+// Content userDir = contentSession.getSessionRunDir();
+// ui.setUserDir(userDir);
}
}
initLocale(cmsSession);
public void setContentRepository(ContentRepository contentRepository) {
this.contentRepository = contentRepository;
}
+
+ public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
+ this.jcrContentProvider = jcrContentProvider;
+ }
+
}