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;
/**
* Filter checker for body inputstream
*/
@Priority(GlobalDataRest.SECOND_PRIORITY_FILTER)
public class SanityCheckerInputStreamFilter implements ContainerRequestFilter {
private static final String CHECK_SANITY = "CHECK_SANITY";
private static final String CODE_VITAM = "code_vitam";
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
// Check if Transfer-Encoding header exists : this header indicates that the request was sent with chunked mode
// transfer
if (!requestContext.getHeaders().containsKey(GlobalDataRest.TRANSFER_ENCODING_HEADER)) {
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());
}
}