mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)
75026: Merged WAT2 (5.0/Cloud) to HEAD-BUG-FIX (5.0/Cloud) 71710: Raises a ContentReadEvent when content is downloaded via webdav git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@75354 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -77,6 +77,7 @@
|
||||
<property name="urlPathPrefix">
|
||||
<value>${system.webdav.url.path.prefix}</value>
|
||||
</property>
|
||||
<property name="eventPublisher" ref="eventPublisher" />
|
||||
</bean>
|
||||
|
||||
<bean id="defaultImageResolver" class="org.alfresco.repo.utils.FacesImageResolver" />
|
||||
|
@@ -314,6 +314,7 @@ public class GetMethod extends WebDAVMethod
|
||||
{
|
||||
if (byteRanges != null && byteRanges.startsWith(RANGE_HEADER_UNIT_SPECIFIER))
|
||||
{
|
||||
m_davHelper.publishReadEvent(realNodeInfo, reader.getMimetype(), reader.getSize(), byteRanges.substring(6), reader.getEncoding());
|
||||
HttpRangeProcessor rangeProcessor = new HttpRangeProcessor(getContentService());
|
||||
String userAgent = m_request.getHeader(WebDAV.HEADER_USER_AGENT);
|
||||
|
||||
@@ -336,7 +337,7 @@ public class GetMethod extends WebDAVMethod
|
||||
// there is content associated with the node
|
||||
m_response.setHeader(WebDAV.HEADER_CONTENT_LENGTH, Long.toString(reader.getSize()));
|
||||
m_response.setHeader(WebDAV.HEADER_CONTENT_TYPE, reader.getMimetype());
|
||||
|
||||
m_davHelper.publishReadEvent(realNodeInfo, reader.getMimetype(), reader.getSize(), null, reader.getEncoding());
|
||||
// copy the content to the response output stream
|
||||
reader.getContent(m_response.getOutputStream());
|
||||
}
|
||||
|
@@ -32,8 +32,13 @@ import java.util.regex.Pattern;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.alfresco.events.types.ContentReadEvent;
|
||||
import org.alfresco.events.types.ContentReadRangeEvent;
|
||||
import org.alfresco.events.types.Event;
|
||||
import org.alfresco.jlan.util.IPAddress;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.events.EventPreparator;
|
||||
import org.alfresco.repo.events.EventPublisher;
|
||||
import org.alfresco.repo.lock.LockUtils;
|
||||
import org.alfresco.repo.model.filefolder.HiddenAspect;
|
||||
import org.alfresco.repo.policy.BehaviourFilter;
|
||||
@@ -56,6 +61,7 @@ import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.cmr.site.SiteService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.util.EqualsHelper;
|
||||
import org.alfresco.util.FileFilterMode.Client;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.extensions.surf.util.URLDecoder;
|
||||
@@ -103,6 +109,7 @@ public class WebDAVHelper
|
||||
private PermissionService m_permissionService;
|
||||
private TenantService m_tenantService;
|
||||
private HiddenAspect m_hiddenAspect;
|
||||
private EventPublisher eventPublisher;
|
||||
|
||||
// pattern is tested against full path after it has been lower cased.
|
||||
private Pattern m_renameShufflePattern = Pattern.compile("(.*/\\..*)|(.*[a-f0-9]{8}+$)|(.*\\.tmp$)|(.*\\.wbk$)|(.*\\.bak$)|(.*\\~$)|(.*backup.*\\.do[ct]{1}[x]?[m]?$)|(.*\\.sb\\-\\w{8}\\-\\w{6}$)");
|
||||
@@ -318,6 +325,14 @@ public class WebDAVHelper
|
||||
this.m_namespaceService = namespaceService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param eventPublisher the eventPublisher service
|
||||
*/
|
||||
public void setEventPublisher(EventPublisher eventPublisher)
|
||||
{
|
||||
this.eventPublisher = eventPublisher;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param dictionaryService the dictionary service
|
||||
*/
|
||||
@@ -1063,6 +1078,39 @@ public class WebDAVHelper
|
||||
return urlStr.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies listeners that a read has taken place
|
||||
* @param nodeRef
|
||||
* @param propertyQName
|
||||
* @param attach
|
||||
* @param mimetype
|
||||
* @param size
|
||||
*/
|
||||
protected void publishReadEvent(final FileInfo realNodeInfo, final String mimetype, final Long size, final String contentEncoding, final String range)
|
||||
{
|
||||
|
||||
eventPublisher.publishEvent(new EventPreparator(){
|
||||
@Override
|
||||
public Event prepareEvent(String user, String networkId, String transactionId)
|
||||
{
|
||||
SiteService siteService = getServiceRegistry().getSiteService();
|
||||
final String siteId = siteService.getSiteShortName(realNodeInfo.getNodeRef());
|
||||
|
||||
if (StringUtils.hasText(range))
|
||||
{
|
||||
return new ContentReadRangeEvent(user, networkId, transactionId, realNodeInfo.getNodeRef().getId(),
|
||||
siteId, realNodeInfo.getType().toString(), Client.webdav, mimetype, size, contentEncoding, range);
|
||||
}
|
||||
else
|
||||
{
|
||||
return new ContentReadEvent(ContentReadEvent.DOWNLOAD, user, networkId, transactionId, realNodeInfo.getNodeRef().getId(),
|
||||
siteId, realNodeInfo.getType().toString(), Client.webdav, mimetype, size, contentEncoding);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public String getRepositoryPath(HttpServletRequest request)
|
||||
{
|
||||
// Try and get the path
|
||||
|
Reference in New Issue
Block a user