Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.Principal;
import java.util.Collection;
import java.util.Enumeration;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
Expand All @@ -44,6 +44,7 @@
import org.apache.catalina.valves.ValveBase;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;
import org.apache.coyote.ContinueResponseTiming;
import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.http.ServerCookies;
Expand Down Expand Up @@ -80,7 +81,7 @@ public class WebdavLoggingValve extends ValveBase {
private static final Log LOG = ExoLogger.getLogger(WebdavLoggingValve.class);

@Override
public void invoke(Request request, Response response) throws IOException, ServletException {
public void invoke(Request request, Response response) throws IOException, ServletException { // NOSONAR
if (LOG.isDebugEnabled()) {
UUID reqUuid = UUID.randomUUID();
try { // NOSONAR
Expand All @@ -103,9 +104,9 @@ public void invoke(Request request, Response response) throws IOException, Servl

if (arrayInputStream.available() > 0
&& (arrayInputStream.available() < 2048
|| StringUtils.contains(request.getContentType(), "text/")
|| StringUtils.equals(request.getContentType(), "application/xml")
|| StringUtils.equals(request.getContentType(), "application.json/"))) {
|| Strings.CS.contains(request.getContentType(), "text/")
|| Strings.CS.equals(request.getContentType(), "application/xml")
|| Strings.CS.equals(request.getContentType(), "application.json/"))) {
byte[] bytes = arrayInputStream.readAllBytes();
arrayInputStream.reset();
LOG.debug("[{}] + Request Body: {}", reqUuid, new String(bytes));
Expand All @@ -121,7 +122,7 @@ public void invoke(Request request, Response response) throws IOException, Servl

byte[] responseBytes = wrappedResponse.getBufferedContent();
if (LOG.isTraceEnabled()
&& StringUtils.contains(response.getContentType(), "text/")
&& Strings.CS.contains(response.getContentType(), "text/")
&& responseBytes.length > 0) {
LOG.trace("[{}] + Response Body: {}", reqUuid, new String(responseBytes));
}
Expand Down Expand Up @@ -151,14 +152,39 @@ private class RequestWrapper extends Request {
private ByteArrayInputStream arrayInputStream;

public RequestWrapper(Request request, ByteArrayInputStream arrayInputStream) {
super(request.getConnector());
super(request.getConnector(), request.getCoyoteRequest());
this.request = request;
this.arrayInputStream = arrayInputStream;
}

@Override
public void setCoyoteRequest(org.apache.coyote.Request coyoteRequest) {
request.setCoyoteRequest(coyoteRequest);
public String toString() {
return request.toString();
}

@Override
public void recycleSessionInfo() {
request.recycleSessionInfo();
}

@Override
public void setMaxParameterCount(int maxParameterCount) {
request.setMaxParameterCount(maxParameterCount);
}

@Override
public void setMaxPartCount(int maxPartCount) {
request.setMaxPartCount(maxPartCount);
}

@Override
public void setMaxPartHeaderSize(int maxPartHeaderSize) {
request.setMaxPartHeaderSize(maxPartHeaderSize);
}

@Override
public void setCharacterEncoding(Charset charset) {
request.setCharacterEncoding(charset);
}

@Override
Expand Down Expand Up @@ -602,15 +628,11 @@ public Map<String, String> getTrailerFields() {
}

@Override
@SuppressWarnings("deprecation")
public PushBuilder newPushBuilder() {
return request.newPushBuilder();
}

@Override
public PushBuilder newPushBuilder(HttpServletRequest httpServletRequest) {
return request.newPushBuilder(httpServletRequest);
}

@Override
public <T extends HttpUpgradeHandler> T upgrade(Class<T> httpUpgradeHandlerClass) throws IOException, ServletException {
return request.upgrade(httpUpgradeHandlerClass);
Expand Down Expand Up @@ -811,6 +833,16 @@ public Part getPart(String name) throws IOException, IllegalStateException, Serv
return request.getPart(name);
}

@Override
public int hashCode() {
return request.hashCode();
}

@Override
public boolean equals(Object obj) {
return request.equals(obj);
}

private HttpServletRequestWrapper newHttpServletRequestWrapper(HttpServletRequest httpRequest,
ByteArrayInputStream arrayInputStream) {
return new HttpServletRequestWrapper(httpRequest) {
Expand Down Expand Up @@ -866,9 +898,25 @@ private class ResponseWrapper extends Response {
private Response response;

public ResponseWrapper(Response response) {
super(response.getCoyoteResponse());
this.response = response;
}

@Override
public void sendRedirect(String location, boolean clearBuffer) throws IOException {
response.sendRedirect(location, clearBuffer);
}

@Override
public void setCharacterEncoding(Charset charset) {
response.setCharacterEncoding(charset);
}

@Override
public void sendRedirect(String location, int status, boolean clearBuffer) throws IOException {
response.sendRedirect(location, status, clearBuffer);
}

@Override
public ServletOutputStream getOutputStream() throws IOException {
return bufferOutputStream;
Expand All @@ -882,11 +930,6 @@ public PrintWriter getWriter() throws IOException {
return bufferWriter;
}

@Override
public void setCoyoteResponse(org.apache.coyote.Response coyoteResponse) {
response.setCoyoteResponse(coyoteResponse);
}

@Override
public org.apache.coyote.Response getCoyoteResponse() {
return response.getCoyoteResponse();
Expand All @@ -902,11 +945,6 @@ public void recycle() {
response.recycle();
}

@Override
public List<Cookie> getCookies() {
return response.getCookies();
}

@Override
public long getContentWritten() {
return response.getContentWritten();
Expand Down Expand Up @@ -966,9 +1004,8 @@ public boolean isClosed() {
}

@Override
@SuppressWarnings("deprecation")
public boolean setError() {
return response.setError();
public void setError() {
response.setError();
}

@Override
Expand Down Expand Up @@ -1167,7 +1204,7 @@ public String encodeURL(String url) {
}

@Override
public void sendAcknowledgement(ContinueResponseTiming continueResponseTiming) throws IOException {
public void sendAcknowledgement(ContinueResponseTiming continueResponseTiming) {
response.sendAcknowledgement(continueResponseTiming);
}

Expand Down Expand Up @@ -1216,6 +1253,16 @@ public void setStatus(int status) {
response.setStatus(status);
}

@Override
public int hashCode() {
return response.hashCode();
}

@Override
public boolean equals(Object obj) {
return response.equals(obj);
}

public byte[] getBufferedContent() {
return buffer.toByteArray();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,28 @@
*/
package org.exoplatform.documents.entity;

import lombok.Data;
import org.exoplatform.commons.api.persistence.ExoEntity;

import jakarta.persistence.*;
import java.io.Serializable;
import java.util.Date;

import io.meeds.common.persistence.PortableSequence;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.NamedQuery;
import jakarta.persistence.Table;
import lombok.Data;

@Entity(name = "PublicDocumentAccess")
@ExoEntity
@Table(name = "DOCUMENTS_PUBLIC_ACCESS")
@Data
@NamedQuery(name = "PublicDocumentAccess.getPublicAccessByNodeId", query = "SELECT DISTINCT c FROM PublicDocumentAccess c where c.nodeId = :nodeId")
public class PublicDocumentAccessEntity implements Serializable {

private static final long serialVersionUID = -7234365786103959973L;

@Id
@SequenceGenerator(name = "SEQ_DOCUMENT_PUBLIC_ACCESS_ID", sequenceName = "SEQ_DOCUMENT_PUBLIC_ACCESS_ID", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_DOCUMENT_PUBLIC_ACCESS_ID")
@PortableSequence(name = "SEQ_DOCUMENT_PUBLIC_ACCESS_ID")
@Column(name = "ID", nullable = false)
private Long id;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,13 @@
import org.exoplatform.social.core.manager.IdentityManager;
import org.exoplatform.web.filter.Filter;

import io.meeds.common.ContainerTransactional;

public class DocumentModeRedirectHandler implements Filter {

@SneakyThrows
@Override
@ContainerTransactional
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
DocumentFileService documentFileService = ExoContainerContext.getService(DocumentFileService.class);
IdentityManager identityManager = ExoContainerContext.getService(IdentityManager.class);
Expand Down
1 change: 1 addition & 0 deletions documents-services/src/main/resources/jpa-entities.idx
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
org.exoplatform.documents.entity.PublicDocumentAccessEntity
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package org.exoplatform.documents.service;

import static org.junit.Assert.*;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;

import java.io.ByteArrayInputStream;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1082,14 +1082,24 @@ public void testFoldersThenFilesLoading() throws RepositoryException, ObjectNotF
QueryResult queryResult = mock(QueryResult.class);
when(userSession.getWorkspace()).thenReturn(workspace);

Node folderAbc = createFolderMock("Abc", Calendar.getInstance(), userSession);
Node folderXyz = createFolderMock("Xyz", Calendar.getInstance(), userSession);
Node folderEfg = createFolderMock("Efg", Calendar.getInstance(), userSession);
// Explicitly spaced out timestamps (rather than successive
// Calendar.getInstance() calls) so the created/modified date sort
// assertions below don't depend on the clock resolution of the
// machine running the test.
Calendar folderAbcDate = Calendar.getInstance();
Calendar folderXyzDate = (Calendar) folderAbcDate.clone();
folderXyzDate.add(Calendar.MINUTE, 1);
Calendar folderEfgDate = (Calendar) folderAbcDate.clone();
folderEfgDate.add(Calendar.MINUTE, 2);

Node folderAbc = createFolderMock("Abc", folderAbcDate, userSession);
Node folderXyz = createFolderMock("Xyz", folderXyzDate, userSession);
Node folderEfg = createFolderMock("Efg", folderEfgDate, userSession);
Node file1 = createFileMock("file1", Calendar.getInstance(), userSession);
Node file2 = createFileMock("file2", Calendar.getInstance(), userSession);
Node symlinkFile2 = createSymlinkMock("file2FileIdentifier", "file2");

Node symlinkFolderEfg = createSymlinkMock("EfgIdentifier", "Efg");
Node symlinkFolderEfg = createSymlinkMock("EfgIdentifier", "Efg", folderEfgDate);

when(subItemsIterator.hasNext()).thenReturn(true, true, true, true, true, false);
when(subItemsIterator.nextNode()).thenReturn(file1, symlinkFile2, folderXyz, folderAbc, symlinkFolderEfg);
Expand Down Expand Up @@ -1254,16 +1264,20 @@ private Node createFileMock(String name, Calendar createdDate, Session session)
}

private Node createSymlinkMock(String nodeIdentifier, String nodeName) throws RepositoryException {
return createSymlinkMock(nodeIdentifier, nodeName, Calendar.getInstance());
}

private Node createSymlinkMock(String nodeIdentifier, String nodeName, Calendar createdDate) throws RepositoryException {
Node symlink = mock(NodeImpl.class);
when(symlink.isNodeType(NodeTypeConstants.EXO_SYMLINK)).thenReturn(true);
Property symlinkUUIDProperty = mock(Property.class);
when(symlinkUUIDProperty.getString()).thenReturn(nodeIdentifier);
when(symlink.getProperty(NodeTypeConstants.EXO_SYMLINK_UUID)).thenReturn(symlinkUUIDProperty);
when(symlink.getName()).thenReturn(nodeName + ".lnk");
when(symlink.getPath()).thenReturn("/path/to/" + nodeName);
Property createdDate = mock(Property.class);
when(createdDate.getDate()).thenReturn(Calendar.getInstance());
when(symlink.getProperty(NodeTypeConstants.EXO_DATE_CREATED)).thenReturn(createdDate);
Property createdDateProperty = mock(Property.class);
when(createdDateProperty.getDate()).thenReturn(createdDate);
when(symlink.getProperty(NodeTypeConstants.EXO_DATE_CREATED)).thenReturn(createdDateProperty);
when(symlink.hasProperty(NodeTypeConstants.EXO_DATE_CREATED)).thenReturn(true);
when(((NodeImpl)symlink).getIdentifier()).thenReturn(nodeName + "LinkIdentifier");
return symlink;
Expand Down Expand Up @@ -1677,6 +1691,7 @@ public void getDocumentDownloadItem() throws RepositoryException {
Value mimeTypeValue = mock(Value.class);
when(dataProperty.getValue()).thenReturn(dataValue);
when(dataValue.getStream()).thenReturn(inputStream);
when(dataProperty.getStream()).thenReturn(inputStream);
when(mimeTypeProperty.getValue()).thenReturn(mimeTypeValue);
when(mimeTypeValue.getString()).thenReturn("application/pdf");
when(contentNode.getProperty(NodeTypeConstants.JCR_DATA)).thenReturn(dataProperty);
Expand Down
Loading
Loading