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