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:
Steven Glover
2014-11-11 17:33:00 +00:00
parent ea518630ab
commit 88eb6abecc
8 changed files with 114 additions and 12 deletions

View File

@@ -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"

View File

@@ -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();

View File

@@ -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;
} }

View File

@@ -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;
} }
} }

View File

@@ -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;
} }
} }

View File

@@ -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()

View File

@@ -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());

View File

@@ -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);
}
}
} }