Admin session to the proper content provider workspace
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 12 Aug 2022 07:36:29 +0000 (09:36 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 12 Aug 2022 07:36:29 +0000 (09:36 +0200)
jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/CmsJcrUtils.java
jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java
org.argeo.api.cms/src/org/argeo/api/cms/CmsAuth.java

index 4a28dca772652578b6e031107362835a47c39eb4..3849c5b97fac4c90611a8987f8d93ba7e84f0882 100644 (file)
@@ -20,6 +20,7 @@ import javax.security.auth.login.LoginException;
 
 import org.argeo.api.cms.CmsAuth;
 import org.argeo.api.cms.CmsConstants;
+import org.argeo.jcr.JcrUtils;
 
 /** Utilities related to Argeo model in JCR */
 public class CmsJcrUtils {
@@ -245,7 +246,7 @@ public class CmsJcrUtils {
        public static Session openDataAdminSession(Repository repository, String workspaceName) {
                LoginContext loginContext;
                try {
-                       loginContext = new LoginContext(CmsAuth.LOGIN_CONTEXT_DATA_ADMIN);
+                       loginContext = CmsAuth.DATA_ADMIN.newLoginContext();
                        loginContext.login();
                } catch (LoginException e1) {
                        throw new RuntimeException("Could not login as data admin", e1);
@@ -260,8 +261,8 @@ public class CmsJcrUtils {
                                @Override
                                public Session run() {
                                        try {
-                                               return repository.login(workspaceName);
-                                       } catch (NoSuchWorkspaceException e) {
+                                               return JcrUtils.loginOrCreateWorkspace(repository, workspaceName);
+                                       } catch (NoSuchWorkspaceException e) {// should not happen
                                                throw new IllegalArgumentException("No workspace " + workspaceName + " available", e);
                                        } catch (RepositoryException e) {
                                                throw new RuntimeException("Cannot open data admin session", e);
index 08f0ee12fa48a36ed061bd33314d29cd565d8336..eaa27b7fc631d806fde1f1590c0eca142f786cd7 100644 (file)
@@ -30,6 +30,9 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext {
 
        private String mountPath;
 
+       // cache
+       private String jcrWorkspace;
+
        private Map<ProvidedSession, JcrSessionAdapter> sessionAdapters = Collections.synchronizedMap(new HashMap<>());
 
        public void start(Map<String, String> properties) {
@@ -37,7 +40,8 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext {
                if ("/".equals(mountPath))
                        throw new IllegalArgumentException("JCR content provider cannot be root /");
                Objects.requireNonNull(mountPath);
-               adminSession = CmsJcrUtils.openDataAdminSession(jcrRepository, null);
+               jcrWorkspace = ContentUtils.getParentPath(mountPath)[1];
+               adminSession = CmsJcrUtils.openDataAdminSession(jcrRepository, jcrWorkspace);
        }
 
        public void stop() {
@@ -51,7 +55,6 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext {
 
        @Override
        public ProvidedContent get(ProvidedSession contentSession, String relativePath) {
-               String jcrWorkspace = ContentUtils.getParentPath(mountPath)[1];
                String jcrPath = "/" + relativePath;
                return new JcrContent(contentSession, this, jcrWorkspace, jcrPath);
        }
index 6ecfeba11c6689283b04507e9243c9ea6eaa7df8..31ec8be5071f63dce2eaa4b0e89bb13dfd0c10e6 100644 (file)
@@ -30,6 +30,10 @@ public enum CmsAuth {
                return new LoginContext(getLoginContextName(), subject);
        }
 
+       public LoginContext newLoginContext() throws LoginException {
+               return new LoginContext(getLoginContextName());
+       }
+
        /*
         * LOGIN CONTEXTS
         */