diff --git a/config/alfresco/messages/rest-framework-messages.properties b/config/alfresco/messages/rest-framework-messages.properties index 024740621f..0061d2c2a7 100644 --- a/config/alfresco/messages/rest-framework-messages.properties +++ b/config/alfresco/messages/rest-framework-messages.properties @@ -12,4 +12,5 @@ framework.exception.StaleEntity=Attempt to update a stale entity framework.exception.UnsupportedResourceOperation=The operation is unsupported framework.exception.DeletedResource=In this version of the API resource {0} has been deleted framework.exception.RequestEntityTooLarge=Request entity too large +framework.exception.InsufficientStorage=Content storage quota exceeded diff --git a/config/alfresco/public-rest-context.xml b/config/alfresco/public-rest-context.xml index ea0959a78d..7f5187378f 100644 --- a/config/alfresco/public-rest-context.xml +++ b/config/alfresco/public-rest-context.xml @@ -144,6 +144,7 @@ + diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index 96f5a5d615..30d5110bd3 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -64,6 +64,7 @@ import org.alfresco.rest.api.model.UserInfo; import org.alfresco.rest.framework.core.exceptions.ApiException; import org.alfresco.rest.framework.core.exceptions.ConstraintViolatedException; import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException; +import org.alfresco.rest.framework.core.exceptions.InsufficientStorageException; import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; import org.alfresco.rest.framework.core.exceptions.PermissionDeniedException; import org.alfresco.rest.framework.core.exceptions.RequestEntityTooLargeException; @@ -1715,11 +1716,11 @@ public class NodesImpl implements Nodes } catch (ContentQuotaException cqe) { - throw new RequestEntityTooLargeException(cqe.getMessage()); + throw new InsufficientStorageException(); } catch (ContentLimitViolationException clv) { - throw new ConstraintViolatedException(clv.getMessage()); + throw new RequestEntityTooLargeException(clv.getMessage()); } catch (Exception ex) { diff --git a/source/java/org/alfresco/rest/framework/core/exceptions/InsufficientStorageException.java b/source/java/org/alfresco/rest/framework/core/exceptions/InsufficientStorageException.java new file mode 100644 index 0000000000..bfb85e903e --- /dev/null +++ b/source/java/org/alfresco/rest/framework/core/exceptions/InsufficientStorageException.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2005-2016 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ + +package org.alfresco.rest.framework.core.exceptions; + +/** + * @author Jamal Kaabi-Mofrad + */ +public class InsufficientStorageException extends ApiException +{ + private static final long serialVersionUID = 4188371184446611887L; + + private static final String DEFAULT_MESSAGE_ID = "framework.exception.InsufficientStorage"; + + public InsufficientStorageException() + { + super(DEFAULT_MESSAGE_ID); + } + + public InsufficientStorageException(String msgId) + { + super(msgId); + } + + public InsufficientStorageException(String msgId, Object[] msgParams) + { + super(msgId, msgParams); + } +} diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java index a4e47de3dc..1e08f6066e 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -28,6 +28,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import org.alfresco.model.ContentModel; import org.alfresco.model.ForumModel; +import org.alfresco.repo.content.ContentLimitProvider.SimpleFixedLimitProvider; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; @@ -867,6 +868,26 @@ public class NodeApiTest extends AbstractBaseApiTest .build(); post(getChildrenUrl(user1Home.getId()), user1, reqBody.getBody(), null, reqBody.getContentType(), 400); + // Test content size limit + final SimpleFixedLimitProvider limitProvider = applicationContext.getBean("defaultContentLimitProvider", SimpleFixedLimitProvider.class); + final long defaultSizeLimit = limitProvider.getSizeLimit(); + limitProvider.setSizeLimitString("20000"); //20 KB + + try + { + // quick.pdf size is about 23 KB + reqBody = MultiPartBuilder.create() + .setFileData(new FileData(fileName, file, MimetypeMap.MIMETYPE_PDF)) + .setAutoRename(true) + .build(); + + // Try to upload a file larger than the configured size limit + post(getChildrenUrl(Nodes.PATH_MY), user1, reqBody.getBody(), null, reqBody.getContentType(), 413); + } + finally + { + limitProvider.setSizeLimitString(Long.toString(defaultSizeLimit)); + } } /**