mirror of
https://github.com/sismics/docs.git
synced 2024-11-14 10:27:55 +01:00
Closes #20: Clean error message if document or file does not exist
This commit is contained in:
parent
5cbdb5d87d
commit
86cae53789
@ -9,6 +9,7 @@ import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
@ -55,7 +56,7 @@ public class AuditLogResource extends BaseResource {
|
||||
// Check ACL on the document
|
||||
AclDao aclDao = new AclDao();
|
||||
if (!aclDao.checkPermission(documentId, PermType.READ, principal.getId())) {
|
||||
throw new ForbiddenClientException();
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
criteria.setDocumentId(documentId);
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
@ -92,7 +93,7 @@ public class DocumentResource extends BaseResource {
|
||||
throw new ForbiddenClientException();
|
||||
}
|
||||
} catch (NoResultException e) {
|
||||
throw new ClientException("DocumentNotFound", MessageFormat.format("Document not found: {0}", documentId));
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
JSONObject document = new JSONObject();
|
||||
@ -430,7 +431,7 @@ public class DocumentResource extends BaseResource {
|
||||
try {
|
||||
document = documentDao.getDocument(id, PermType.WRITE, principal.getId());
|
||||
} catch (NoResultException e) {
|
||||
throw new ClientException("DocumentNotFound", MessageFormat.format("Document not found: {0}", id));
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
// Update the document
|
||||
@ -514,7 +515,7 @@ public class DocumentResource extends BaseResource {
|
||||
document = documentDao.getDocument(id, PermType.WRITE, principal.getId());
|
||||
fileList = fileDao.getByDocumentId(principal.getId(), id);
|
||||
} catch (NoResultException e) {
|
||||
throw new ClientException("DocumentNotFound", MessageFormat.format("Document not found: {0}", id));
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
// Delete the document
|
||||
|
@ -102,7 +102,7 @@ public class FileResource extends BaseResource {
|
||||
try {
|
||||
document = documentDao.getDocument(documentId, PermType.WRITE, principal.getId());
|
||||
} catch (NoResultException e) {
|
||||
throw new ClientException("DocumentNotFound", MessageFormat.format("Document not found: {0}", documentId));
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
}
|
||||
|
||||
@ -199,7 +199,7 @@ public class FileResource extends BaseResource {
|
||||
file = fileDao.getFile(id, principal.getId());
|
||||
document = documentDao.getDocument(documentId, PermType.WRITE, principal.getId());
|
||||
} catch (NoResultException e) {
|
||||
throw new ClientException("DocumentNotFound", MessageFormat.format("Document not found: {0}", documentId));
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
// Check that the file is orphan
|
||||
@ -259,7 +259,7 @@ public class FileResource extends BaseResource {
|
||||
try {
|
||||
documentDao.getDocument(documentId, PermType.WRITE, principal.getId());
|
||||
} catch (NoResultException e) {
|
||||
throw new ClientException("DocumentNotFound", MessageFormat.format("Document not found: {0}", documentId));
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
// Reorder files
|
||||
@ -295,13 +295,9 @@ public class FileResource extends BaseResource {
|
||||
|
||||
// Check document visibility
|
||||
if (documentId != null) {
|
||||
try {
|
||||
AclDao aclDao = new AclDao();
|
||||
if (!aclDao.checkPermission(documentId, PermType.READ, shareId == null ? principal.getId() : shareId)) {
|
||||
throw new ForbiddenClientException();
|
||||
}
|
||||
} catch (NoResultException e) {
|
||||
throw new ClientException("DocumentNotFound", MessageFormat.format("Document not found: {0}", documentId));
|
||||
AclDao aclDao = new AclDao();
|
||||
if (!aclDao.checkPermission(documentId, PermType.READ, shareId == null ? principal.getId() : shareId)) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
} else if (!authenticated) {
|
||||
throw new ForbiddenClientException();
|
||||
@ -358,7 +354,7 @@ public class FileResource extends BaseResource {
|
||||
documentDao.getDocument(file.getDocumentId(), PermType.WRITE, principal.getId());
|
||||
}
|
||||
} catch (NoResultException e) {
|
||||
throw new ClientException("FileNotFound", MessageFormat.format("File not found: {0}", id));
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
// Delete the file
|
||||
@ -498,7 +494,7 @@ public class FileResource extends BaseResource {
|
||||
throw new ForbiddenClientException();
|
||||
}
|
||||
} catch (NoResultException e) {
|
||||
throw new ClientException("DocumentNotFound", MessageFormat.format("Document not found: {0}", documentId));
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
// Get files and user associated with this document
|
||||
|
@ -7,6 +7,8 @@ angular.module('docs').controller('DocumentView', function ($scope, $state, $sta
|
||||
// Load document data from server
|
||||
Restangular.one('document', $stateParams.id).get().then(function(data) {
|
||||
$scope.document = data;
|
||||
}, function(response) {
|
||||
$scope.error = response;
|
||||
});
|
||||
|
||||
// Load audit log data from server
|
||||
|
16
docs-web/src/main/webapp/src/app/docs/directive/ImgError.js
Normal file
16
docs-web/src/main/webapp/src/app/docs/directive/ImgError.js
Normal file
@ -0,0 +1,16 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Image error event directive.
|
||||
*/
|
||||
angular.module('docs').directive('imgError', function() {
|
||||
return {
|
||||
restrict: 'A',
|
||||
link: function(scope, element, attrs) {
|
||||
element.bind('error', function() {
|
||||
//call the function that was passed
|
||||
scope.$apply(attrs.imgError);
|
||||
});
|
||||
}
|
||||
};
|
||||
})
|
@ -64,6 +64,7 @@
|
||||
<script src="app/docs/directive/SelectTag.js" type="text/javascript"></script>
|
||||
<script src="app/docs/directive/AuditLog.js" type="text/javascript"></script>
|
||||
<script src="app/docs/directive/InlineEdit.js" type="text/javascript"></script>
|
||||
<script src="app/docs/directive/ImgError.js" type="text/javascript"></script>
|
||||
<!-- endref -->
|
||||
</head>
|
||||
<body>
|
||||
|
@ -1,4 +1,11 @@
|
||||
<img src="img/loader.gif" ng-show="!document" />
|
||||
<img src="img/loader.gif" ng-show="!document && !error" />
|
||||
|
||||
<div ng-show="error" class="well-lg">
|
||||
<p class="text-center" ng-show="error.status == 404">
|
||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||
Document not found
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div ng-show="document">
|
||||
<div class="text-right" ng-show="document.writable">
|
||||
|
@ -22,5 +22,12 @@
|
||||
|
||||
|
||||
<div class="text-center" ng-if="$stateParams.fileId">
|
||||
<img ng-src="../api/file/{{ $stateParams.fileId }}/data?size=web" />
|
||||
<img ng-src="../api/file/{{ $stateParams.fileId }}/data?size=web"
|
||||
ng-init="error = false"
|
||||
img-error="error = true"
|
||||
ng-show="!error" />
|
||||
<p class="well-lg" ng-show="error">
|
||||
<span class="glyphicon glyphicon-warning-sign"></span>
|
||||
File not found
|
||||
</p>
|
||||
</div>
|
||||
|
@ -282,8 +282,7 @@ public class TestDocumentResource extends BaseJerseyTest {
|
||||
documentResource = resource().path("/document/" + document1Id);
|
||||
documentResource.addFilter(new CookieAuthenticationFilter(document1Token));
|
||||
response = documentResource.get(ClientResponse.class);
|
||||
json = response.getEntity(JSONObject.class);
|
||||
Assert.assertEquals(Status.BAD_REQUEST, Status.fromStatusCode(response.getStatus()));
|
||||
Assert.assertEquals(Status.NOT_FOUND, Status.fromStatusCode(response.getStatus()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user