diff --git a/config/alfresco/public-rest-context.xml b/config/alfresco/public-rest-context.xml index 6a2055e1c2..ca49b16bb9 100644 --- a/config/alfresco/public-rest-context.xml +++ b/config/alfresco/public-rest-context.xml @@ -487,6 +487,7 @@ + @@ -1080,4 +1081,9 @@ + + + + + diff --git a/source/java/org/alfresco/rest/api/PublicApiDeclarativeRegistry.java b/source/java/org/alfresco/rest/api/PublicApiDeclarativeRegistry.java index 943bb39e85..8ecebd355a 100644 --- a/source/java/org/alfresco/rest/api/PublicApiDeclarativeRegistry.java +++ b/source/java/org/alfresco/rest/api/PublicApiDeclarativeRegistry.java @@ -41,6 +41,7 @@ import org.alfresco.rest.framework.core.exceptions.UnsupportedResourceOperationE import org.alfresco.rest.framework.resource.actions.interfaces.BinaryResourceAction; import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction; import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction; +import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceBinaryAction; import org.alfresco.rest.framework.resource.actions.interfaces.ResourceAction; import org.alfresco.rest.framework.resource.content.BinaryResource; import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; @@ -158,6 +159,10 @@ public class PublicApiDeclarativeRegistry extends DeclarativeRegistry { resAction = BinaryResourceAction.Read.class; } + else if (RelationshipResourceBinaryAction.Read.class.isAssignableFrom(rwm.getResource().getClass())) + { + resAction = RelationshipResourceBinaryAction.Read.class; + } break; default: break; diff --git a/source/java/org/alfresco/rest/api/QuickShareLinks.java b/source/java/org/alfresco/rest/api/QuickShareLinks.java index 2d8a271296..7e98432396 100644 --- a/source/java/org/alfresco/rest/api/QuickShareLinks.java +++ b/source/java/org/alfresco/rest/api/QuickShareLinks.java @@ -45,16 +45,17 @@ public interface QuickShareLinks QuickShareLink readById(String sharedId, Parameters parameters); /** - * Download content via shared link. + * Download file content (or rendition content) via shared link. * * Note: does *not* require authenticated access for (public) shared link. * * @param sharedId + * @param renditionId - optional * @param parameters {@link Parameters} * @return * @throws EntityNotFoundException */ - BinaryResource readProperty(String sharedId, final Parameters parameters) throws EntityNotFoundException; + BinaryResource readProperty(String sharedId, String renditionId, Parameters parameters) throws EntityNotFoundException; /** * Delete the shared link. diff --git a/source/java/org/alfresco/rest/api/impl/QuickShareLinksImpl.java b/source/java/org/alfresco/rest/api/impl/QuickShareLinksImpl.java index 9fc27d1bf4..82c5255cbd 100644 --- a/source/java/org/alfresco/rest/api/impl/QuickShareLinksImpl.java +++ b/source/java/org/alfresco/rest/api/impl/QuickShareLinksImpl.java @@ -27,6 +27,7 @@ import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.repo.tenant.TenantUtil; import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.QuickShareLinks; +import org.alfresco.rest.api.Renditions; import org.alfresco.rest.api.model.ContentInfo; import org.alfresco.rest.api.model.QuickShareLink; import org.alfresco.rest.api.model.QuickShareLinkEmailRequest; @@ -87,6 +88,8 @@ public class QuickShareLinksImpl implements QuickShareLinks, InitializingBean private ServiceRegistry sr; private QuickShareService quickShareService; private Nodes nodes; + private Renditions renditions; + private NodeService nodeService; private PersonService personService; private AuthorityService authorityService; @@ -109,6 +112,11 @@ public class QuickShareLinksImpl implements QuickShareLinks, InitializingBean this.nodes = nodes; } + public void setRenditions(Renditions renditions) + { + this.renditions = renditions; + } + public void setEnabled(boolean enabled) { this.enabled = enabled; @@ -165,11 +173,12 @@ public class QuickShareLinksImpl implements QuickShareLinks, InitializingBean * Note: does *not* require authenticated access for (public) shared link. * * @param sharedId + * @param renditionId - optional * @param parameters {@link Parameters} * @return * @throws EntityNotFoundException */ - public BinaryResource readProperty(String sharedId, final Parameters parameters) throws EntityNotFoundException + public BinaryResource readProperty(String sharedId, final String renditionId, final Parameters parameters) throws EntityNotFoundException { checkEnabled(); checkValidShareId(sharedId); @@ -191,7 +200,16 @@ public class QuickShareLinksImpl implements QuickShareLinks, InitializingBean throw new InvalidNodeRefException(nodeRef); } - return nodes.getContent(nodeRef.getId(), parameters); + String nodeId = nodeRef.getId(); + + if (renditionId != null) + { + return renditions.getContent(nodeId, renditionId, parameters); + } + else + { + return nodes.getContent(nodeId, parameters); + } } }, networkTenantDomain); } diff --git a/source/java/org/alfresco/rest/api/quicksharelinks/QuickShareLinkEntityResource.java b/source/java/org/alfresco/rest/api/quicksharelinks/QuickShareLinkEntityResource.java index 7e8e103e25..f9af094604 100644 --- a/source/java/org/alfresco/rest/api/quicksharelinks/QuickShareLinkEntityResource.java +++ b/source/java/org/alfresco/rest/api/quicksharelinks/QuickShareLinkEntityResource.java @@ -92,9 +92,9 @@ public class QuickShareLinkEntityResource implements EntityResourceAction.ReadBy @WebApiDescription(title = "Download shared link content", description = "Download content for shared link") @WebApiNoAuth @BinaryProperties({"content"}) - public BinaryResource readProperty(String sharedId, final Parameters parameters) throws EntityNotFoundException + public BinaryResource readProperty(String sharedId, Parameters parameters) throws EntityNotFoundException { - return quickShareLinks.readProperty(sharedId, parameters); + return quickShareLinks.readProperty(sharedId, null, parameters); } /** diff --git a/source/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java b/source/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java index b8bfb2b04a..58c9dfdbfc 100644 --- a/source/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java +++ b/source/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java @@ -46,6 +46,7 @@ import org.alfresco.rest.framework.core.exceptions.ApiException; import org.alfresco.rest.framework.jacksonextensions.JacksonHelper; import org.alfresco.rest.framework.resource.actions.ActionExecutor; import org.alfresco.rest.framework.resource.actions.interfaces.BinaryResourceAction; +import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceBinaryAction; import org.alfresco.rest.framework.resource.content.BinaryResource; import org.alfresco.rest.framework.resource.content.ContentInfo; import org.alfresco.rest.framework.resource.content.FileBinaryResource; @@ -112,7 +113,21 @@ public abstract class AbstractResourceWebScript extends ApiWebScript implements if (toSerialize instanceof BinaryResource) { // TODO review (experimental) - can we move earlier & wrap complete execute ? Also for QuickShare (in MT/Cloud) needs to be tenant for the nodeRef (TBC). - boolean noAuth = resource.getMetaData().isNoAuth(BinaryResourceAction.Read.class); + boolean noAuth = false; + + if (BinaryResourceAction.Read.class.isAssignableFrom(resource.getResource().getClass())) + { + noAuth = resource.getMetaData().isNoAuth(BinaryResourceAction.Read.class); + } + else if (RelationshipResourceBinaryAction.Read.class.isAssignableFrom(resource.getResource().getClass())) + { + noAuth = resource.getMetaData().isNoAuth(RelationshipResourceBinaryAction.Read.class); + } + else + { + logger.warn("Unexpected"); + } + if (noAuth) { String networkTenantDomain = TenantUtil.getCurrentDomain();