mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
125686: Merged 5.1.N (5.1.2) to 5.2.N (5.2.1) 125578 adavis: Merged 5.1.1 (5.1.1) to 5.1.N (5.1.2) 125558 ltuca: MNT-16163 : Custom Type - ... in Description 124858: Merged 5.1.N (5.1.2) to 5.2.N (5.2.1) 124799 adavis: Merged 5.0.N (5.0.4) to 5.1.N (5.1.2) 124794 adavis: Merged V4.2-BUG-FIX (4.2.7) to 5.0.N (5.0.4) 124785 adavis: Merged V4.1-BUG-FIX (4.1.11) to V4.2-BUG-FIX (4.2.7) 124784 adavis: Merged V4.1.10 (4.1.10.10) to V4.1-BUG-FIX (4.1.11) 124775 cturlica: MNT-15921: CLONE - 4.1.10: invite and other emails 124817: Merged 5.1.N (5.1.2) to 5.2.N (5.2.1) 124814 adavis: Merged 5.0.N (5.0.4) to 5.1.N (5.1.2) << Similar change required in nb, pt_BR, ru, zh_CN files that don't exist in 5.0.N >> 124691 amukha: Merged V4.2-BUG-FIX (4.2.7) to 5.0.N (5.0.4) 124688 amukha: Merged V4.1-BUG-FIX (4.1.11) to V4.2-BUG-FIX (4.2.7) 124686 amukha: Merged 5.0.2-CLOUD42 (Cloud ) to V4.1-BUG-FIX (4.1.11) 124681 cturlica: MNT-15919: into invite and other emails - on premise email template changes part III, 124697: Merged 5.1.N (5.1.2) to 5.2.N (5.2.1) 124693 amukha: Merged 5.0.N (5.0.4) to 5.1.N (5.1.2) 124691 amukha: Merged V4.2-BUG-FIX (4.2.7) to 5.0.N (5.0.4) 124688 amukha: Merged V4.1-BUG-FIX (4.1.11) to V4.2-BUG-FIX (4.2.7) 124686 amukha: Merged 5.0.2-CLOUD42 (Cloud ) to V4.1-BUG-FIX (4.1.11) 124681 cturlica: MNT-15919: into invite and other emails - on premise email template changes part III, 124634: Merged 5.1.N (5.1.2) to 5.2.N (5.2.1) 124625 amukha: Merged 5.0.N (5.0.4) to 5.1.N (5.1.2) 124619 amukha: Merged V4.2-BUG-FIX (4.2.7) to 5.0.N (5.0.4) 124611 amukha: Merged V4.1-BUG-FIX (4.1.11) to V4.2-BUG-FIX (4.2.7) 124609 amukha: Merged V4.1.10 (4.1.10.10) to V4.1-BUG-FIX (4.1.11) 124606 amukha: MNT-15921: Merged 5.0.2-CLOUD42 (Cloud ) to V4.1.10 (4.1.10.10) 124594 cturlica: MNT-15919: into invite and other emails - on premise email template changes part II, 124633: Merged 5.1.N (5.1.2) to 5.2.N (5.2.1) 124624 amukha: Merged 5.0.N (5.0.4) to 5.1.N (5.1.2) 124618 amukha: Merged V4.2-BUG-FIX (4.2.7) to 5.0.N (5.0.4) 124610 amukha: Merged V4.1-BUG-FIX (4.1.11) to V4.2-BUG-FIX (4.2.7) 124608 amukha: Merged V4.1.10 (4.1.10.10) to V4.1-BUG-FIX (4.1.11) 124605 amukha: MNT-15921: Merged 5.0.2-CLOUD42 (Cloud ) to V4.1.10 (4.1.10.10) 124567 cturlica: MNT-15919: into invite and other emails - on premise email template changes, 124367: Merged 5.1.N (5.1.2) to 5.2.N (5.2.1) 124349 adavis: Merged 5.1.0-CLOUD43 (Cloud ) to 5.1.N (5.1.2) 123596 skopf: ACE-2540 - commits without changes: 123860,123908,124221,124223,124227,124279,124366, 124368,124479,124522,124531,124700,124855,124857,124859,124873,124957, 124961-124962,125057,125154,125234,125236,125325,125348,125389,125519-125520, 125590,125685,125687-125688 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@125701 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
201 lines
6.7 KiB
Java
201 lines
6.7 KiB
Java
package org.alfresco.opencmis;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import org.alfresco.query.PagingRequest;
|
|
import org.alfresco.query.PagingResults;
|
|
import org.alfresco.repo.tenant.Network;
|
|
import org.alfresco.repo.tenant.NetworksService;
|
|
import org.alfresco.repo.tenant.TenantAdminService;
|
|
import org.alfresco.repo.tenant.TenantService;
|
|
import org.alfresco.repo.tenant.TenantUtil;
|
|
import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork;
|
|
import org.alfresco.util.FileFilterMode;
|
|
import org.alfresco.util.FileFilterMode.Client;
|
|
import org.apache.chemistry.opencmis.commons.data.Acl;
|
|
import org.apache.chemistry.opencmis.commons.data.ContentStream;
|
|
import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
|
|
import org.apache.chemistry.opencmis.commons.data.Properties;
|
|
import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
|
|
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
|
|
import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
|
|
import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
|
|
import org.apache.chemistry.opencmis.commons.spi.Holder;
|
|
|
|
/**
|
|
* Override OpenCMIS service object - for public api
|
|
*
|
|
* @author sglover
|
|
* @since PublicApi1.0
|
|
*/
|
|
public class PublicApiAlfrescoCmisService extends AlfrescoCmisServiceImpl
|
|
{
|
|
protected CMISConnector connector;
|
|
protected TenantAdminService tenantAdminService;
|
|
protected NetworksService networksService;
|
|
|
|
public PublicApiAlfrescoCmisService(CMISConnector connector, TenantAdminService tenantAdminService, NetworksService networksService)
|
|
{
|
|
super(connector);
|
|
|
|
this.connector = connector;
|
|
this.networksService = networksService;
|
|
this.tenantAdminService = tenantAdminService;
|
|
}
|
|
|
|
@Override
|
|
public String create(String repositoryId, Properties properties, String folderId,
|
|
ContentStream contentStream, VersioningState versioningState,
|
|
List<String> policies, ExtensionsData extension)
|
|
{
|
|
FileFilterMode.setClient(Client.cmis);
|
|
try
|
|
{
|
|
return super.create(
|
|
repositoryId,
|
|
properties,
|
|
folderId,
|
|
contentStream,
|
|
versioningState,
|
|
policies,
|
|
extension);
|
|
}
|
|
finally
|
|
{
|
|
FileFilterMode.clearClient();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Overridden to capture content upload for publishing to analytics service.
|
|
*/
|
|
@Override
|
|
public String createDocument(String repositoryId, Properties properties, String folderId,
|
|
ContentStream contentStream, VersioningState versioningState,
|
|
List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension)
|
|
{
|
|
String newId = super.createDocument(
|
|
repositoryId,
|
|
properties,
|
|
folderId,
|
|
contentStream,
|
|
versioningState,
|
|
policies,
|
|
addAces,
|
|
removeAces,
|
|
extension);
|
|
return newId;
|
|
}
|
|
|
|
/**
|
|
* Overridden to capture content upload for publishing to analytics service.
|
|
*/
|
|
@Override
|
|
public void setContentStream(String repositoryId, Holder<String> objectId,
|
|
Boolean overwriteFlag, Holder<String> changeToken, ContentStream contentStream,
|
|
ExtensionsData extension)
|
|
{
|
|
FileFilterMode.setClient(Client.cmis);
|
|
try
|
|
{
|
|
super.setContentStream(repositoryId, objectId, overwriteFlag, changeToken, contentStream, extension);
|
|
}
|
|
finally
|
|
{
|
|
FileFilterMode.clearClient();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension)
|
|
{
|
|
// for currently authenticated user
|
|
PagingResults<Network> networks = networksService.getNetworks(new PagingRequest(0, Integer.MAX_VALUE));
|
|
List<Network> page = networks.getPage();
|
|
final List<RepositoryInfo> repoInfos = new ArrayList<RepositoryInfo>(page.size() + 1);
|
|
for (Network network : page)
|
|
{
|
|
repoInfos.add(getRepositoryInfo(network));
|
|
}
|
|
return repoInfos;
|
|
}
|
|
|
|
@Override
|
|
public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension)
|
|
{
|
|
Network network = null;
|
|
|
|
try
|
|
{
|
|
checkRepositoryId(repositoryId);
|
|
network = networksService.getNetwork(repositoryId);
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
// ACE-2540: Avoid information leak. Same response if repository does not exist or if user is not a member
|
|
throw new CmisObjectNotFoundException("Unknown repository '" + repositoryId + "'!");
|
|
}
|
|
|
|
return getRepositoryInfo(network);
|
|
}
|
|
|
|
private RepositoryInfo getRepositoryInfo(final Network network)
|
|
{
|
|
final String networkId = network.getTenantDomain();
|
|
final String tenantDomain = (networkId.equals(TenantUtil.SYSTEM_TENANT) || networkId.equals(TenantUtil.DEFAULT_TENANT)) ? TenantService.DEFAULT_DOMAIN : networkId;
|
|
|
|
return TenantUtil.runAsSystemTenant(new TenantRunAsWork<RepositoryInfo>()
|
|
{
|
|
public RepositoryInfo doWork()
|
|
{
|
|
RepositoryInfoImpl repoInfo = (RepositoryInfoImpl)connector.getRepositoryInfo(getContext().getCmisVersion());
|
|
|
|
repoInfo.setId(!networkId.equals("") ? networkId : TenantUtil.SYSTEM_TENANT);
|
|
repoInfo.setName(tenantDomain);
|
|
repoInfo.setDescription(tenantDomain);
|
|
|
|
return repoInfo;
|
|
}
|
|
}, tenantDomain);
|
|
}
|
|
|
|
@Override
|
|
public void checkRepositoryId(String repositoryId)
|
|
{
|
|
if(repositoryId.equals(TenantUtil.DEFAULT_TENANT) || repositoryId.equals(TenantUtil.SYSTEM_TENANT))
|
|
{
|
|
// TODO check for super admin
|
|
return;
|
|
}
|
|
|
|
if(!tenantAdminService.existsTenant(repositoryId) || !tenantAdminService.isEnabledTenant(repositoryId))
|
|
{
|
|
throw new CmisObjectNotFoundException("Unknown repository '" + repositoryId + "'!");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void beforeCall()
|
|
{
|
|
// NOTE: Don't invoke super beforeCall to exclude authentication which is already supported by
|
|
// Web Script F/W
|
|
//super.beforeCall();
|
|
}
|
|
|
|
@Override
|
|
public void afterCall()
|
|
{
|
|
// NOTE: Don't invoke super afterCall to exclude authentication which is already supported by
|
|
// Web Script F/W
|
|
//super.afterCall();
|
|
}
|
|
|
|
@Override
|
|
public void close()
|
|
{
|
|
super.close();
|
|
}
|
|
}
|