X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FCmsFsProvider.java;h=614ff6c497ebda2ce6dd0554c4dd11f8cd64ad71;hb=d728b305c8c8e97b4434a75e5b47e73fa287cc51;hp=04db97833798f6b507952a1c73e47736dc626a90;hpb=79a227ecbb3d99595a129602e2e65a74427d9d09;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsFsProvider.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsFsProvider.java index 04db97833..614ff6c49 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsFsProvider.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsFsProvider.java @@ -8,15 +8,19 @@ import java.nio.file.Path; import java.util.HashMap; import java.util.Map; +import javax.jcr.Node; import javax.jcr.Repository; +import javax.jcr.RepositoryFactory; import javax.jcr.Session; import org.argeo.cms.CmsException; import org.argeo.cms.auth.CurrentUser; import org.argeo.jackrabbit.fs.AbstractJackrabbitFsProvider; +import org.argeo.jcr.JcrUtils; import org.argeo.jcr.fs.JcrFileSystem; import org.argeo.jcr.fs.JcrFsException; import org.argeo.node.NodeConstants; +import org.argeo.node.NodeUtils; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; @@ -40,12 +44,23 @@ public class CmsFsProvider extends AbstractJackrabbitFsProvider { throw new FileSystemAlreadyExistsException("CMS file system already exists for user " + username); try { - Repository repository = bc - .getService(bc.getServiceReferences(Repository.class, "(cn=node)").iterator().next()); - Session session = repository.login(); - JcrFileSystem fileSystem = new JcrFileSystem(this, session); - fileSystems.put(username, fileSystem); - return fileSystem; + String host = uri.getHost(); + if (host != null && !host.trim().equals("")) { + URI repoUri = new URI("http", uri.getUserInfo(), uri.getHost(), uri.getPort(), "/jcr/node", null, null); + RepositoryFactory repositoryFactory = bc.getService(bc.getServiceReference(RepositoryFactory.class)); + Repository repository = NodeUtils.getRepositoryByUri(repositoryFactory, repoUri.toString()); + Session session = repository.login("main"); + JcrFileSystem fileSystem = new JcrFileSystem(this, session); + fileSystems.put(username, fileSystem); + return fileSystem; + } else { + Repository repository = bc.getService( + bc.getServiceReferences(Repository.class, "(cn=" + NodeConstants.HOME + ")").iterator().next()); + Session session = repository.login(); + JcrFileSystem fileSystem = new JcrFileSystem(this, session); + fileSystems.put(username, fileSystem); + return fileSystem; + } } catch (Exception e) { throw new CmsException("Cannot open file system " + uri + " for user " + username, e); } @@ -73,4 +88,8 @@ public class CmsFsProvider extends AbstractJackrabbitFsProvider { String username = CurrentUser.getUsername(); return fileSystems.get(username); } + + public Node getUserHome(Session session) { + return NodeUtils.getUserHome(session); + } }