import org.apache.commons.io.IOUtils;
import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
import org.argeo.jcr.ArgeoTypes;
import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.osgi.framework.BundleContext;
try {
if (session.hasPendingChanges())
session.save();
- Node userHome = ArgeoJcrUtils.getUserHome(session);
+ Node userHome = UserJcrUtils.getUserHome(session);
if (userHome == null)
throw new ArgeoException("No user home for "
+ session.getUserID());
import javax.jcr.Session;
import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.UserJcrUtils;
import org.argeo.security.UserAdminService;
import org.argeo.security.jcr.JcrUserDetails;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
super.init(site, input);
String username = ((ArgeoUserEditorInput) getEditorInput())
.getUsername();
- userHome = ArgeoJcrUtils.getUserHome(session, username);
+ userHome = UserJcrUtils.getUserHome(session, username);
if (userAdminService.userExists(username)) {
userDetails = (JcrUserDetails) userAdminService
import org.argeo.jcr.ArgeoNames;
import org.argeo.jcr.ArgeoTypes;
import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
import org.argeo.security.ui.admin.commands.OpenArgeoUserEditor;
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.IParameter;
import org.eclipse.core.commands.Parameterization;
import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
userStructureListener = new UserStructureListener();
JcrUtils.addListener(session, userStructureListener, Event.NODE_ADDED
- | Event.NODE_REMOVED, JcrUtils.DEFAULT_HOME_BASE_PATH,
+ | Event.NODE_REMOVED, UserJcrUtils.DEFAULT_HOME_BASE_PATH,
ArgeoTypes.ARGEO_USER_HOME);
}
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.eclipse.ui.ErrorFeedback;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
import org.argeo.jcr.security.SecurityJcrUtils;
import org.argeo.security.UserAdminService;
import org.argeo.security.jcr.JcrUserDetails;
return true;
} catch (Exception e) {
JcrUtils.discardQuietly(session);
- Node userHome = ArgeoJcrUtils.getUserHome(session, username);
+ Node userHome = UserJcrUtils.getUserHome(session, username);
if (userHome != null) {
try {
userHome.remove();
import org.argeo.ArgeoException;
import org.argeo.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.UserJcrUtils;
import org.argeo.security.NodeAuthenticationToken;
import org.springframework.security.Authentication;
import org.springframework.security.AuthenticationException;
String workspace = siteAuth.getSecurityWorkspace();
session = repository.login(sp, workspace);
- Node userHome = ArgeoJcrUtils.getUserHome(session);
+ Node userHome = UserJcrUtils.getUserHome(session);
if (userHome == null || !userHome.hasNode(ArgeoNames.ARGEO_PROFILE))
throw new ArgeoException("No profile for user "
+ siteAuth.getName() + " in security workspace "
import javax.jcr.Session;
import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
import org.argeo.security.jcr.JcrUserDetails;
import org.springframework.ldap.core.DirContextAdapter;
import org.springframework.ldap.core.DirContextOperations;
final String username, GrantedAuthority[] authorities) {
if (ctx == null)
throw new ArgeoException("No LDAP information for user " + username);
- Node userHome = ArgeoJcrUtils.getUserHome(securitySession, username);
+ Node userHome = UserJcrUtils.getUserHome(securitySession, username);
if (userHome == null)
throw new ArgeoException("No JCR information for user " + username);
import org.argeo.eclipse.ui.TreeParent;
import org.argeo.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.RepositoryRegister;
+import org.argeo.jcr.UserJcrUtils;
import org.argeo.jcr.security.JcrKeyring;
import org.argeo.jcr.ui.explorer.model.RepositoriesNode;
import org.argeo.jcr.ui.explorer.model.SingleJcrNode;
return;
if (userSession != null) {
- Node userHome = ArgeoJcrUtils.getUserHome(userSession);
+ Node userHome = UserJcrUtils.getUserHome(userSession);
if (userHome != null) {
// TODO : find a way to dynamically get alias for the node
if (homeNode != null)
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.ErrorFeedback;
import org.argeo.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
import org.argeo.jcr.ArgeoTypes;
import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
import org.argeo.jcr.security.JcrKeyring;
import org.argeo.jcr.security.SecurityJcrUtils;
import org.argeo.jcr.ui.explorer.JcrExplorerConstants;
protected void okPressed() {
try {
Session nodeSession = keyring.getSession();
- Node home = ArgeoJcrUtils.getUserHome(nodeSession);
+ Node home = UserJcrUtils.getUserHome(nodeSession);
// FIXME better deal with non existing home dir
if (home == null)
import org.argeo.eclipse.ui.ErrorFeedback;
import org.argeo.eclipse.ui.TreeParent;
import org.argeo.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
import org.argeo.jcr.RepositoryRegister;
+import org.argeo.jcr.UserJcrUtils;
import org.argeo.jcr.security.JcrKeyring;
/**
protected void addRemoteRepositories(JcrKeyring jcrKeyring)
throws RepositoryException {
Session userSession = jcrKeyring.getSession();
- Node userHome = ArgeoJcrUtils.getUserHome(userSession);
+ Node userHome = UserJcrUtils.getUserHome(userSession);
if (userHome != null && userHome.hasNode(ARGEO_REMOTE)) {
NodeIterator it = userHome.getNode(ARGEO_REMOTE).getNodes();
while (it.hasNext()) {
import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.jackrabbit.server.SessionProvider;
import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
/**
* Implements an open session in view patter: a new JCR session is created for
userGroupIds.add(it.next().getID());
// write roles if needed
- Node userProfile = ArgeoJcrUtils.getUserHome(session).getNode(
+ Node userProfile = UserJcrUtils.getUserHome(session).getNode(
ArgeoNames.ARGEO_PROFILE);
boolean writeRoles = false;
if (userProfile.hasProperty(ArgeoNames.ARGEO_REMOTE_ROLES)) {
public final static String ARGEO_BASE_PATH = "/argeo:system";
public final static String DATA_MODELS_BASE_PATH = ARGEO_BASE_PATH
+ "/argeo:dataModels";
- /** The home base path. Not yet configurable */
- public final static String DEFAULT_HOME_BASE_PATH = "/argeo:home";
// parameters (typically for call to a RepositoryFactory)
public final static String JCR_REPOSITORY_ALIAS = "argeo.jcr.repository.alias";
import java.util.HashMap;
import java.util.Map;
-import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.RepositoryFactory;
-import javax.jcr.Session;
import org.argeo.ArgeoException;
/** Utilities related to Argeo model in JCR */
public class ArgeoJcrUtils implements ArgeoJcrConstants {
- /**
- * Returns the home node of the session user or null if none was found.
- *
- * @param session
- * the session to use in order to perform the search, this can be
- * a session with a different user ID than the one searched,
- * typically when a system or admin session is used.
- * @param username
- * the username of the user
- */
- public static Node getUserHome(Session session, String username) {
- try {
- String homePath = ArgeoJcrUtils.getUserHomePath(username);
- return session.itemExists(homePath) ? session.getNode(homePath)
- : null;
- // kept for example of QOM queries
- // QueryObjectModelFactory qomf = session.getWorkspace()
- // .getQueryManager().getQOMFactory();
- // Selector userHomeSel = qomf.selector(ArgeoTypes.ARGEO_USER_HOME,
- // "userHome");
- // DynamicOperand userIdDop = qomf.propertyValue("userHome",
- // ArgeoNames.ARGEO_USER_ID);
- // StaticOperand userIdSop = qomf.literal(session.getValueFactory()
- // .createValue(username));
- // Constraint constraint = qomf.comparison(userIdDop,
- // QueryObjectModelFactory.JCR_OPERATOR_EQUAL_TO, userIdSop);
- // Query query = qomf.createQuery(userHomeSel, constraint, null,
- // null);
- // Node userHome = JcrUtils.querySingleNode(query);
- } catch (RepositoryException e) {
- throw new ArgeoException("Cannot find home for user " + username, e);
- }
- }
-
- /** Returns the home node of the session user or null if none was found. */
- public static Node getUserHome(Session session) {
- String userID = session.getUserID();
- return getUserHome(session, userID);
- }
-
- /** @deprecated Use {@link #getUserHome(Session, String)} directly */
- @Deprecated
- public static String getUserHomePath(String username) {
- String homeBasePath = DEFAULT_HOME_BASE_PATH;
- return homeBasePath + '/' + JcrUtils.firstCharsToPath(username, 2)
- + '/' + username;
- }
-
/**
* Wraps the call to the repository factory based on parameter
* {@link ArgeoJcrConstants#JCR_REPOSITORY_ALIAS} in order to simplify it
--- /dev/null
+package org.argeo.jcr;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.argeo.ArgeoException;
+
+/** Utilities related to the user home and properties based on Argeo JCR model. */
+public class UserJcrUtils {
+ /** The home base path. Not yet configurable */
+ public final static String DEFAULT_HOME_BASE_PATH = "/argeo:home";
+
+ private UserJcrUtils() {
+ }
+
+ /**
+ * Returns the home node of the session user or null if none was found.
+ *
+ * @param session
+ * the session to use in order to perform the search, this can be
+ * a session with a different user ID than the one searched,
+ * typically when a system or admin session is used.
+ * @param username
+ * the username of the user
+ */
+ public static Node getUserHome(Session session, String username) {
+ try {
+ String homePath = UserJcrUtils.getUserHomePath(username);
+ return session.itemExists(homePath) ? session.getNode(homePath)
+ : null;
+ // kept for example of QOM queries
+ // QueryObjectModelFactory qomf = session.getWorkspace()
+ // .getQueryManager().getQOMFactory();
+ // Selector userHomeSel = qomf.selector(ArgeoTypes.ARGEO_USER_HOME,
+ // "userHome");
+ // DynamicOperand userIdDop = qomf.propertyValue("userHome",
+ // ArgeoNames.ARGEO_USER_ID);
+ // StaticOperand userIdSop = qomf.literal(session.getValueFactory()
+ // .createValue(username));
+ // Constraint constraint = qomf.comparison(userIdDop,
+ // QueryObjectModelFactory.JCR_OPERATOR_EQUAL_TO, userIdSop);
+ // Query query = qomf.createQuery(userHomeSel, constraint, null,
+ // null);
+ // Node userHome = JcrUtils.querySingleNode(query);
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Cannot find home for user " + username, e);
+ }
+ }
+
+ /** Returns the home node of the session user or null if none was found. */
+ public static Node getUserHome(Session session) {
+ String userID = session.getUserID();
+ return getUserHome(session, userID);
+ }
+
+ /** @deprecated Use {@link getUserHome} directly */
+ @Deprecated
+ static String getUserHomePath(String username) {
+ String homeBasePath = DEFAULT_HOME_BASE_PATH;
+ return homeBasePath + '/' + JcrUtils.firstCharsToPath(username, 2)
+ + '/' + username;
+ }
+}
import org.apache.commons.io.IOUtils;
import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
import org.argeo.jcr.ArgeoTypes;
import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
import org.argeo.util.crypto.AbstractKeyring;
import org.argeo.util.crypto.PBEKeySpecCallback;
if (notYetSavedKeyring.get() != null)
return true;
- Node userHome = ArgeoJcrUtils.getUserHome(session);
+ Node userHome = UserJcrUtils.getUserHome(session);
return userHome.hasNode(ARGEO_KEYRING);
} catch (RepositoryException e) {
throw new ArgeoException("Cannot check whether keyring is setup", e);
Binary binary = null;
InputStream in = null;
try {
- Node userHome = ArgeoJcrUtils.getUserHome(session);
+ Node userHome = UserJcrUtils.getUserHome(session);
if (userHome.hasNode(ARGEO_KEYRING))
throw new ArgeoException("Keyring already setup");
Node keyring = userHome.addNode(ARGEO_KEYRING);
@Override
protected void handleKeySpecCallback(PBEKeySpecCallback pbeCallback) {
try {
- Node userHome = ArgeoJcrUtils.getUserHome(session);
+ Node userHome = UserJcrUtils.getUserHome(session);
Node keyring;
if (userHome.hasNode(ARGEO_KEYRING))
keyring = userHome.getNode(ARGEO_KEYRING);
protected Cipher createCipher() {
try {
- Node userHome = ArgeoJcrUtils.getUserHome(session);
+ Node userHome = UserJcrUtils.getUserHome(session);
if (!userHome.hasNode(ARGEO_KEYRING))
throw new ArgeoException("Keyring not setup");
Node keyring = userHome.getNode(ARGEO_KEYRING);
import org.argeo.ArgeoException;
import org.argeo.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
import org.argeo.jcr.ArgeoTypes;
import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
/** Utilities related to Argeo security model in JCR */
public class SecurityJcrUtils implements ArgeoJcrConstants {
}
private static String generateUserHomePath(String username) {
- String homeBasePath = DEFAULT_HOME_BASE_PATH;
+ String homeBasePath = UserJcrUtils.DEFAULT_HOME_BASE_PATH;
return homeBasePath + '/' + JcrUtils.firstCharsToPath(username, 2)
+ '/' + username;
}
*/
public static Node getUserProfile(Session session, String username) {
try {
- Node userHome = ArgeoJcrUtils.getUserHome(session, username);
+ Node userHome = UserJcrUtils.getUserHome(session, username);
if (userHome == null)
return null;
if (userHome.hasNode(ArgeoNames.ARGEO_PROFILE))