package com.uaihebert.uaimockserver.validator;
import com.uaihebert.uaimockserver.facade.RequestValidatorFacade;
import com.uaihebert.uaimockserver.log.backend.Log;
import com.uaihebert.uaimockserver.model.UaiQueryParam;
import com.uaihebert.uaimockserver.model.UaiRequest;
import io.undertow.server.HttpServerExchange;
import java.util.Deque;
import java.util.Map;
public class OptionalQueryParamValidator implements RequestDataValidator{
private static final String WILD_CARD_USED = "The header [%s] is using the wildcard. Its content will not be checked.";
private static final String OPTIONAL_HEADER_NOT_FOUND = "The optional header [%s] was not found in the request. This route will not be used.";
private static final String HEADER_VALUE_NOT_FOUND_MESSAGE = "%nThe required value %s was not found in the header [%s]";
@Override
public void validate(final UaiRequest uaiRequest, final HttpServerExchange exchange, final RequestValidatorFacade.RequestAnalysisResult result) {
for (UaiQueryParam uaiQueryParam : uaiRequest.getOptionalQueryParamList()) {
final Map<String, Deque<String>> queryParameterMap = exchange.getQueryParameters();
validatedQueryParam(uaiQueryParam, queryParameterMap, result);
}
}
private void validatedQueryParam(final UaiQueryParam uaiQueryParam, final Map<String, Deque<String>> queryParameterMap, final RequestValidatorFacade.RequestAnalysisResult result) {
final Deque<String> valueDeque = queryParameterMap.get(uaiQueryParam.getName());
if (valueDeque == null) {
Log.infoFormatted(OPTIONAL_HEADER_NOT_FOUND, uaiQueryParam.getName());
result.setInvalid();
return;
}
if (uaiQueryParam.isUsingWildCard()) {
Log.infoFormatted(WILD_CARD_USED, uaiQueryParam.getName());
return;
}
if (!valueDeque.containsAll(uaiQueryParam.getValueList())) {
Log.warnFormatted(HEADER_VALUE_NOT_FOUND_MESSAGE, uaiQueryParam.getValueList(), uaiQueryParam.getName());
result.abortTheRequest();
}
}
}