package fr.gouv.vitam.common.security.waf; import java.io.IOException; import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import fr.gouv.vitam.common.GlobalDataRest; import fr.gouv.vitam.common.error.VitamError; import fr.gouv.vitam.common.exception.InvalidParseOperationException; import fr.gouv.vitam.common.logging.VitamLogger; import fr.gouv.vitam.common.logging.VitamLoggerFactory; import fr.gouv.vitam.common.security.SanityChecker; /** * Common filter checker for header, uri and parameter */ @Priority(GlobalDataRest.FIRST_PRIORITY_FILTER) public class SanityCheckerCommonFilter implements ContainerRequestFilter { private static final VitamLogger LOGGER = VitamLoggerFactory.getInstance(SanityCheckerCommonFilter.class); private static final String CHECK_SANITY = "CHECK_SANITY"; private static final String CODE_VITAM = "code_vitam"; @Override public void filter(ContainerRequestContext requestContext) throws IOException { try { // 1- Check Headers SanityChecker.checkHeadersMap(requestContext.getHeaders()); // 2- Check Path Parameters SanityChecker.checkUriParametersMap(requestContext.getUriInfo().getPathParameters()); // 3- Check Query Parameters SanityChecker.checkUriParametersMap(requestContext.getUriInfo().getQueryParameters()); } catch (final InvalidParseOperationException | IllegalArgumentException exc) { LOGGER.error(exc); requestContext.abortWith( Response.status(Status.PRECONDITION_FAILED).entity(getErrorEntity(Status.PRECONDITION_FAILED)).build()); } } private VitamError getErrorEntity(Response.Status status) { return new VitamError(status.name()).setHttpCode(status.getStatusCode()).setContext(CHECK_SANITY) .setState(CODE_VITAM).setMessage(status.getReasonPhrase()).setDescription(status.getReasonPhrase()); } }