mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
ACE-3433 "Alfresco 5.0b mt cannot authenticate mobile users"
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@90269 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -743,6 +743,7 @@
|
|||||||
<property name="baseUrlGenerator" ref="baseUrlGenerator" />
|
<property name="baseUrlGenerator" ref="baseUrlGenerator" />
|
||||||
<property name="version" value="1.0"/>
|
<property name="version" value="1.0"/>
|
||||||
<property name="cmisVersion" value="1.0"/>
|
<property name="cmisVersion" value="1.0"/>
|
||||||
|
<property name="tenantAdminService" ref="tenantAdminService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="cmisAtomPubDispatcher1.1" class="org.alfresco.opencmis.PublicApiAtomPubCMISDispatcher" init-method="init">
|
<bean id="cmisAtomPubDispatcher1.1" class="org.alfresco.opencmis.PublicApiAtomPubCMISDispatcher" init-method="init">
|
||||||
@@ -753,6 +754,7 @@
|
|||||||
<property name="baseUrlGenerator" ref="baseUrlGenerator" />
|
<property name="baseUrlGenerator" ref="baseUrlGenerator" />
|
||||||
<property name="version" value="1.1"/>
|
<property name="version" value="1.1"/>
|
||||||
<property name="cmisVersion" value="1.1"/>
|
<property name="cmisVersion" value="1.1"/>
|
||||||
|
<property name="tenantAdminService" ref="tenantAdminService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="cmisBrowserDispatcher1.1" class="org.alfresco.opencmis.PublicApiBrowserCMISDispatcher" init-method="init">
|
<bean id="cmisBrowserDispatcher1.1" class="org.alfresco.opencmis.PublicApiBrowserCMISDispatcher" init-method="init">
|
||||||
@@ -763,6 +765,7 @@
|
|||||||
<property name="serviceName" value="cmis" />
|
<property name="serviceName" value="cmis" />
|
||||||
<property name="version" value="1.1"/>
|
<property name="version" value="1.1"/>
|
||||||
<property name="cmisVersion" value="1.1"/>
|
<property name="cmisVersion" value="1.1"/>
|
||||||
|
<property name="tenantAdminService" ref="tenantAdminService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="webscript.org.alfresco.api.opencmis.OpenCMIS.get"
|
<bean id="webscript.org.alfresco.api.opencmis.OpenCMIS.get"
|
||||||
|
@@ -36,6 +36,9 @@ import javax.servlet.http.HttpServletRequest;
|
|||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
import org.alfresco.opencmis.CMISDispatcherRegistry.Binding;
|
import org.alfresco.opencmis.CMISDispatcherRegistry.Binding;
|
||||||
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
|
import org.alfresco.repo.tenant.TenantAdminService;
|
||||||
|
import org.alfresco.repo.tenant.TenantService;
|
||||||
import org.alfresco.repo.tenant.TenantUtil;
|
import org.alfresco.repo.tenant.TenantUtil;
|
||||||
import org.alfresco.repo.web.scripts.TenantWebScriptServletRequest;
|
import org.alfresco.repo.web.scripts.TenantWebScriptServletRequest;
|
||||||
import org.alfresco.service.descriptor.Descriptor;
|
import org.alfresco.service.descriptor.Descriptor;
|
||||||
@@ -63,7 +66,8 @@ public class CMISHttpServletRequest implements HttpServletRequest
|
|||||||
protected Binding binding;
|
protected Binding binding;
|
||||||
protected Descriptor currentDescriptor;
|
protected Descriptor currentDescriptor;
|
||||||
|
|
||||||
public CMISHttpServletRequest(WebScriptRequest req, String serviceName, BaseUrlGenerator baseUrlGenerator, Binding binding, Descriptor currentDescriptor)
|
public CMISHttpServletRequest(WebScriptRequest req, String serviceName, BaseUrlGenerator baseUrlGenerator, Binding binding, Descriptor currentDescriptor,
|
||||||
|
TenantAdminService tenantAdminService)
|
||||||
{
|
{
|
||||||
this.req = req;
|
this.req = req;
|
||||||
this.serviceName = serviceName;
|
this.serviceName = serviceName;
|
||||||
@@ -75,7 +79,25 @@ public class CMISHttpServletRequest implements HttpServletRequest
|
|||||||
if(!pathInfo.startsWith("/cmis") && (baseReq instanceof TenantWebScriptServletRequest))
|
if(!pathInfo.startsWith("/cmis") && (baseReq instanceof TenantWebScriptServletRequest))
|
||||||
{
|
{
|
||||||
TenantWebScriptServletRequest servletReq = (TenantWebScriptServletRequest)baseReq;
|
TenantWebScriptServletRequest servletReq = (TenantWebScriptServletRequest)baseReq;
|
||||||
this.networkId = servletReq.getTenant();
|
|
||||||
|
String tenant = servletReq.getTenant();
|
||||||
|
if(tenant.equalsIgnoreCase(TenantUtil.DEFAULT_TENANT))
|
||||||
|
{
|
||||||
|
String user = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||||
|
String domain = tenantAdminService.getUserDomain(user);
|
||||||
|
if(domain == null || domain.equals(TenantService.DEFAULT_DOMAIN))
|
||||||
|
{
|
||||||
|
this.networkId = tenant;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.networkId = domain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.networkId = tenant;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Match match = req.getServiceMatch();
|
Match match = req.getServiceMatch();
|
||||||
|
@@ -39,6 +39,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.opencmis.CMISDispatcherRegistry.Binding;
|
import org.alfresco.opencmis.CMISDispatcherRegistry.Binding;
|
||||||
import org.alfresco.opencmis.CMISDispatcherRegistry.Endpoint;
|
import org.alfresco.opencmis.CMISDispatcherRegistry.Endpoint;
|
||||||
|
import org.alfresco.repo.tenant.TenantAdminService;
|
||||||
import org.alfresco.service.descriptor.Descriptor;
|
import org.alfresco.service.descriptor.Descriptor;
|
||||||
import org.alfresco.service.descriptor.DescriptorService;
|
import org.alfresco.service.descriptor.DescriptorService;
|
||||||
import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
|
import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
|
||||||
@@ -66,6 +67,12 @@ public abstract class CMISServletDispatcher implements CMISDispatcher
|
|||||||
protected BaseUrlGenerator baseUrlGenerator;
|
protected BaseUrlGenerator baseUrlGenerator;
|
||||||
protected String version;
|
protected String version;
|
||||||
protected CmisVersion cmisVersion;
|
protected CmisVersion cmisVersion;
|
||||||
|
protected TenantAdminService tenantAdminService;
|
||||||
|
|
||||||
|
public void setTenantAdminService(TenantAdminService tenantAdminService)
|
||||||
|
{
|
||||||
|
this.tenantAdminService = tenantAdminService;
|
||||||
|
}
|
||||||
|
|
||||||
public void setDescriptorService(DescriptorService descriptorService)
|
public void setDescriptorService(DescriptorService descriptorService)
|
||||||
{
|
{
|
||||||
@@ -164,7 +171,8 @@ public abstract class CMISServletDispatcher implements CMISDispatcher
|
|||||||
protected CMISHttpServletRequest getHttpRequest(WebScriptRequest req)
|
protected CMISHttpServletRequest getHttpRequest(WebScriptRequest req)
|
||||||
{
|
{
|
||||||
String serviceName = getServiceName();
|
String serviceName = getServiceName();
|
||||||
CMISHttpServletRequest httpReqWrapper = new CMISHttpServletRequest(req, serviceName, baseUrlGenerator, getBinding(), currentDescriptor);
|
CMISHttpServletRequest httpReqWrapper = new CMISHttpServletRequest(req, serviceName, baseUrlGenerator,
|
||||||
|
getBinding(), currentDescriptor, tenantAdminService);
|
||||||
return httpReqWrapper;
|
return httpReqWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -32,7 +32,8 @@ public class PublicApiAtomPubCMISDispatcher extends AtomPubCMISDispatcher
|
|||||||
protected CMISHttpServletRequest getHttpRequest(WebScriptRequest req)
|
protected CMISHttpServletRequest getHttpRequest(WebScriptRequest req)
|
||||||
{
|
{
|
||||||
String serviceName = getServiceName();
|
String serviceName = getServiceName();
|
||||||
CMISHttpServletRequest httpReqWrapper = new PublicApiCMISHttpServletRequest(req, serviceName, baseUrlGenerator, getBinding(), getCurrentDescriptor());
|
CMISHttpServletRequest httpReqWrapper = new PublicApiCMISHttpServletRequest(req, serviceName, baseUrlGenerator,
|
||||||
|
getBinding(), getCurrentDescriptor(), tenantAdminService);
|
||||||
return httpReqWrapper;
|
return httpReqWrapper;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -14,7 +14,8 @@ public class PublicApiBrowserCMISDispatcher extends BrowserCMISDispatcher
|
|||||||
protected CMISHttpServletRequest getHttpRequest(WebScriptRequest req)
|
protected CMISHttpServletRequest getHttpRequest(WebScriptRequest req)
|
||||||
{
|
{
|
||||||
String serviceName = getServiceName();
|
String serviceName = getServiceName();
|
||||||
CMISHttpServletRequest httpReqWrapper = new PublicApiCMISHttpServletRequest(req, serviceName, baseUrlGenerator, getBinding(), getCurrentDescriptor());
|
CMISHttpServletRequest httpReqWrapper = new PublicApiCMISHttpServletRequest(req, serviceName,
|
||||||
|
baseUrlGenerator, getBinding(), getCurrentDescriptor(), tenantAdminService);
|
||||||
return httpReqWrapper;
|
return httpReqWrapper;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,6 +21,7 @@ package org.alfresco.opencmis;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.alfresco.opencmis.CMISDispatcherRegistry.Binding;
|
import org.alfresco.opencmis.CMISDispatcherRegistry.Binding;
|
||||||
|
import org.alfresco.repo.tenant.TenantAdminService;
|
||||||
import org.alfresco.service.descriptor.Descriptor;
|
import org.alfresco.service.descriptor.Descriptor;
|
||||||
import org.springframework.extensions.webscripts.Match;
|
import org.springframework.extensions.webscripts.Match;
|
||||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||||
@@ -31,9 +32,9 @@ import org.springframework.extensions.webscripts.WebScriptRequest;
|
|||||||
public class PublicApiCMISHttpServletRequest extends CMISHttpServletRequest
|
public class PublicApiCMISHttpServletRequest extends CMISHttpServletRequest
|
||||||
{
|
{
|
||||||
public PublicApiCMISHttpServletRequest(WebScriptRequest req, String serviceName, BaseUrlGenerator baseUrlGenerator,
|
public PublicApiCMISHttpServletRequest(WebScriptRequest req, String serviceName, BaseUrlGenerator baseUrlGenerator,
|
||||||
Binding binding, Descriptor currentDescriptor)
|
Binding binding, Descriptor currentDescriptor, TenantAdminService tenantAdminService)
|
||||||
{
|
{
|
||||||
super(req, serviceName, baseUrlGenerator, binding, currentDescriptor);
|
super(req, serviceName, baseUrlGenerator, binding, currentDescriptor, tenantAdminService);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addAttributes()
|
protected void addAttributes()
|
||||||
|
@@ -298,6 +298,11 @@ public class RepoService
|
|||||||
allPeople.put(person.getId().toLowerCase(), person);
|
allPeople.put(person.getId().toLowerCase(), person);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NodeService getNodeService()
|
||||||
|
{
|
||||||
|
return nodeService;
|
||||||
|
}
|
||||||
|
|
||||||
public TestPerson getPerson(String username)
|
public TestPerson getPerson(String username)
|
||||||
{
|
{
|
||||||
return allPeople.get(username.toLowerCase());
|
return allPeople.get(username.toLowerCase());
|
||||||
|
@@ -80,6 +80,7 @@ import org.alfresco.rest.api.tests.client.data.SiteRole;
|
|||||||
import org.alfresco.rest.api.tests.client.data.Tag;
|
import org.alfresco.rest.api.tests.client.data.Tag;
|
||||||
import org.alfresco.service.cmr.lock.LockService;
|
import org.alfresco.service.cmr.lock.LockService;
|
||||||
import org.alfresco.service.cmr.lock.LockType;
|
import org.alfresco.service.cmr.lock.LockType;
|
||||||
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.ContentReader;
|
import org.alfresco.service.cmr.repository.ContentReader;
|
||||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
@@ -108,7 +109,6 @@ import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
|
|||||||
import org.apache.chemistry.opencmis.commons.PropertyIds;
|
import org.apache.chemistry.opencmis.commons.PropertyIds;
|
||||||
import org.apache.chemistry.opencmis.commons.SessionParameter;
|
import org.apache.chemistry.opencmis.commons.SessionParameter;
|
||||||
import org.apache.chemistry.opencmis.commons.data.ContentStream;
|
import org.apache.chemistry.opencmis.commons.data.ContentStream;
|
||||||
import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
|
|
||||||
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
|
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
|
||||||
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
|
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
|
||||||
import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
|
import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
|
||||||
@@ -1960,4 +1960,65 @@ public class TestCMIS extends EnterpriseTestApi
|
|||||||
|
|
||||||
assertNotNull(objectType);
|
assertNotNull(objectType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testACE3433() throws Exception
|
||||||
|
{
|
||||||
|
final TestNetwork network = getTestFixture().getRandomNetwork();
|
||||||
|
|
||||||
|
NodeRef rootNodeRef = TenantUtil.runAsSystemTenant(new TenantRunAsWork<NodeRef>()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public NodeRef doWork() throws Exception
|
||||||
|
{
|
||||||
|
NodeRef rootNodeRef = repoService.getNodeService().getRootNode(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
|
||||||
|
List<ChildAssociationRef> childAssocs = repoService.getNodeService().getChildAssocsByPropertyValue(rootNodeRef,
|
||||||
|
ContentModel.PROP_TITLE, "Company Home");
|
||||||
|
assertEquals(1, childAssocs.size());
|
||||||
|
NodeRef companyHomeNodeRef = childAssocs.get(0).getChildRef();
|
||||||
|
return companyHomeNodeRef;
|
||||||
|
}
|
||||||
|
|
||||||
|
}, network.getId());
|
||||||
|
assertNotNull(rootNodeRef);
|
||||||
|
|
||||||
|
// atom
|
||||||
|
{
|
||||||
|
Binding binding = Binding.atom;
|
||||||
|
String url = httpClient.getPublicApiCmisUrl(TenantUtil.DEFAULT_TENANT, binding, "1.1", null);
|
||||||
|
|
||||||
|
Map<String, String> parameters = new HashMap<String, String>();
|
||||||
|
|
||||||
|
// user credentials
|
||||||
|
parameters.put(SessionParameter.USER, "admin@" + network.getId());
|
||||||
|
parameters.put(SessionParameter.PASSWORD, "admin");
|
||||||
|
parameters.put(SessionParameter.ATOMPUB_URL, url);
|
||||||
|
parameters.put(SessionParameter.BINDING_TYPE, binding.getOpenCmisBinding().value());
|
||||||
|
|
||||||
|
SessionFactory factory = SessionFactoryImpl.newInstance();
|
||||||
|
Repository repository = factory.getRepositories(parameters).get(0);
|
||||||
|
String rootFolderId = repository.getRootFolderId();
|
||||||
|
|
||||||
|
assertEquals(rootNodeRef.getId(), rootFolderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Binding binding = Binding.browser;
|
||||||
|
String url = httpClient.getPublicApiCmisUrl(TenantUtil.DEFAULT_TENANT, binding, "1.1", null);
|
||||||
|
|
||||||
|
Map<String, String> parameters = new HashMap<String, String>();
|
||||||
|
|
||||||
|
// user credentials
|
||||||
|
parameters.put(SessionParameter.USER, "admin@" + network.getId());
|
||||||
|
parameters.put(SessionParameter.PASSWORD, "admin");
|
||||||
|
parameters.put(SessionParameter.BROWSER_URL, url);
|
||||||
|
parameters.put(SessionParameter.BINDING_TYPE, binding.getOpenCmisBinding().value());
|
||||||
|
|
||||||
|
SessionFactory factory = SessionFactoryImpl.newInstance();
|
||||||
|
Repository repository = factory.getRepositories(parameters).get(0);
|
||||||
|
String rootFolderId = repository.getRootFolderId();
|
||||||
|
|
||||||
|
assertEquals(rootNodeRef.getId(), rootFolderId);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user