Search in sources :

Example 11 with ForbiddenAccessException

use of com.yahoo.elide.core.exceptions.ForbiddenAccessException in project elide by yahoo.

the class QueryRunner method handleRuntimeException.

public static ElideResponse handleRuntimeException(Elide elide, RuntimeException error, boolean isVerbose) {
    CustomErrorException mappedException = elide.mapError(error);
    ObjectMapper mapper = elide.getMapper().getObjectMapper();
    if (mappedException != null) {
        return buildErrorResponse(mapper, mappedException, isVerbose);
    }
    if (error instanceof WebApplicationException) {
        WebApplicationException e = (WebApplicationException) error;
        log.debug("WebApplicationException", e);
        String body = e.getResponse().getEntity() != null ? e.getResponse().getEntity().toString() : e.getMessage();
        return ElideResponse.builder().responseCode(e.getResponse().getStatus()).body(body).build();
    }
    if (error instanceof HttpStatusException) {
        HttpStatusException e = (HttpStatusException) error;
        if (e instanceof ForbiddenAccessException) {
            if (log.isDebugEnabled()) {
                log.debug("{}", ((ForbiddenAccessException) e).getLoggedMessage());
            }
        } else {
            log.debug("Caught HTTP status exception {}", e.getStatus(), e);
        }
        return buildErrorResponse(mapper, new HttpStatusException(200, e.getMessage()) {

            @Override
            public int getStatus() {
                return 200;
            }

            @Override
            public Pair<Integer, JsonNode> getErrorResponse() {
                return e.getErrorResponse();
            }

            @Override
            public Pair<Integer, JsonNode> getVerboseErrorResponse() {
                return e.getVerboseErrorResponse();
            }

            @Override
            public String getVerboseMessage() {
                return e.getVerboseMessage();
            }

            @Override
            public String toString() {
                return e.toString();
            }
        }, isVerbose);
    }
    if (error instanceof ConstraintViolationException) {
        ConstraintViolationException e = (ConstraintViolationException) error;
        log.debug("Constraint violation exception caught", e);
        String message = "Constraint violation";
        final ErrorObjects.ErrorObjectsBuilder errorObjectsBuilder = ErrorObjects.builder();
        for (ConstraintViolation<?> constraintViolation : e.getConstraintViolations()) {
            errorObjectsBuilder.addError().withDetail(constraintViolation.getMessage());
            final String propertyPathString = constraintViolation.getPropertyPath().toString();
            if (!propertyPathString.isEmpty()) {
                Map<String, Object> source = new HashMap<>(1);
                source.put("property", propertyPathString);
                errorObjectsBuilder.with("source", source);
            }
        }
        return buildErrorResponse(mapper, new CustomErrorException(HttpStatus.SC_OK, message, errorObjectsBuilder.build()), isVerbose);
    }
    log.error("Error or exception uncaught by Elide", error);
    throw new RuntimeException(error);
}
Also used : ErrorObjects(com.yahoo.elide.core.exceptions.ErrorObjects) WebApplicationException(javax.ws.rs.WebApplicationException) HashMap(java.util.HashMap) HttpStatusException(com.yahoo.elide.core.exceptions.HttpStatusException) ForbiddenAccessException(com.yahoo.elide.core.exceptions.ForbiddenAccessException) ConstraintViolationException(javax.validation.ConstraintViolationException) CustomErrorException(com.yahoo.elide.core.exceptions.CustomErrorException) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Pair(org.apache.commons.lang3.tuple.Pair)

Aggregations

ForbiddenAccessException (com.yahoo.elide.core.exceptions.ForbiddenAccessException)11 ExpressionResult (com.yahoo.elide.core.security.permissions.ExpressionResult)6 PersistentResource (com.yahoo.elide.core.PersistentResource)4 ReadPermission (com.yahoo.elide.annotation.ReadPermission)3 PathElement (com.yahoo.elide.core.Path.PathElement)3 FilterExpression (com.yahoo.elide.core.filter.expression.FilterExpression)3 PermissionExecutor (com.yahoo.elide.core.security.PermissionExecutor)3 LinkedHashSet (java.util.LinkedHashSet)3 CustomErrorException (com.yahoo.elide.core.exceptions.CustomErrorException)2 ErrorObjects (com.yahoo.elide.core.exceptions.ErrorObjects)2 HttpStatusException (com.yahoo.elide.core.exceptions.HttpStatusException)2 AndFilterExpression (com.yahoo.elide.core.filter.expression.AndFilterExpression)2 NotFilterExpression (com.yahoo.elide.core.filter.expression.NotFilterExpression)2 OrFilterExpression (com.yahoo.elide.core.filter.expression.OrFilterExpression)2 FilterPredicate (com.yahoo.elide.core.filter.predicates.FilterPredicate)2 Relationship (com.yahoo.elide.core.request.Relationship)2 Expression (com.yahoo.elide.core.security.permissions.expressions.Expression)2 HashMap (java.util.HashMap)2 ConstraintViolationException (javax.validation.ConstraintViolationException)2 WebApplicationException (javax.ws.rs.WebApplicationException)2