
org.swisspush.gateleen.validation.ValidationHandler Maven / Gradle / Ivy
package org.swisspush.gateleen.validation;
import io.vertx.core.http.HttpClient;
import io.vertx.core.http.HttpClientRequest;
import io.vertx.core.http.HttpServerRequest;
import org.slf4j.Logger;
import org.swisspush.gateleen.core.http.RequestLoggerFactory;
import org.swisspush.gateleen.core.storage.ResourceStorage;
import org.swisspush.gateleen.core.util.ExpansionDeltaUtil;
import org.swisspush.gateleen.core.util.StatusCode;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
/**
* Validates incoming and outgoing JSON and issues warnings in logs.
*
* @author https://github.com/lbovet [Laurent Bovet], https://github.com/mcweba [Marc-Andre Weber]
*/
public class ValidationHandler {
public static final String HOOKS_LISTENERS_URI_PART = "/_hooks/listeners/";
public static final String HOOKS_ROUTE_URI_PART = "/_hooks/route";
public static final String ACCEPT = "accept";
private HttpClient httpClient;
private List supportedMethods = Arrays.asList("PUT", "GET", "POST");
private List outMethods = Arrays.asList("GET", "POST");
private List inMethods = Arrays.asList("PUT", "POST");
private static final String VALID_HEADER = "X-Valid";
private static final String EXPAND_PARAM = "expand";
private static final int TIMEOUT = 120000;
private static final Pattern noExtension = Pattern.compile(".*/[^/\\.]*$");
private Validator validator;
private ValidationResourceManager validationResourceManager;
private boolean failOnError = true;
public ValidationHandler(ValidationResourceManager validationResourceManager, ResourceStorage storage, HttpClient httpClient, String schemaRoot) {
this.validationResourceManager = validationResourceManager;
this.httpClient = httpClient;
this.validator = new Validator(storage, schemaRoot);
}
/**
* Returns true when the {@link ValidationHandler} must be applied to this request.
*
* @param request request
* @return boolean
*/
public boolean isToValidate(HttpServerRequest request) {
final Logger log = RequestLoggerFactory.getLogger(ValidationHandler.class, request);
boolean doValidate = supportedMethods.contains(request.method().name()) &&
isJsonRequest(request) &&
!(request.headers().names().contains(VALID_HEADER)) &&
!(request.params().names().contains(EXPAND_PARAM));
if (!doValidate) {
return false;
}
// Exclude Hooks from validation
if(request.uri().contains(HOOKS_ROUTE_URI_PART) || request.uri().contains(HOOKS_LISTENERS_URI_PART)){
return false; // do not validate
}
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy