OpenapiLibraryValidatorConfig.java

/*
 * GovWay - A customizable API Gateway 
 * https://govway.org
 * 
 * Copyright (c) 2005-2024 Link.it srl (https://link.it). 
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3, as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package org.openspcoop2.utils.openapi.validator;

import java.io.Serializable;

/**
 * OpenapiApi4jValidatorConfig
 * 
 * @author Andrea Poli (poli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 *
 */
public class OpenapiLibraryValidatorConfig implements Serializable {

	private static final long serialVersionUID = 1L;

	private OpenAPILibrary openApiLibrary = OpenAPILibrary.json_schema;
	
	private boolean mergeAPISpec = false;
	
	private boolean validateAPISpec = true;
	
	private boolean validateRequestPath = true;
	private boolean validateRequestQuery = true;
	/* utilizzato solo in swagger_request_validator per disabilitare il controllo.
	 * Da specifica i parametri ulteriori vanno ignorati, mentre la libreria swagger_request_validator li valida
	 * Per default quindi questa opzione viene disabilitata
	 */
	private boolean validateRequestUnexpectedQueryParam = false;
	private boolean validateRequestHeaders = true;
	private boolean validateRequestCookie = true;
	private boolean validateRequestBody = true;
	
	private boolean validateResponseHeaders = true;
	private boolean validateResponseBody = true;
	
	// Dice se trattare il subtype '*' come json e quindi validare lo schema del body passato
	private boolean validateWildcardSubtypeAsJson = true;
	
	// La validazione delle richieste multipart/form-data (o mixed) prevede per default il processamento di tutto lo stream.
	// Poichè le parti "binarie" non richiedono una validazione rispetto ad uno schema e sono tipicamente serializzate dopo i metadati (plain o json) 
	// potrebbero essere "saltate" terminando l'analisi dello stream dopo aver validato i metadati in modo da avere benefici prestazionali visto che tipicamente le parti binarie rappresentano 
	// la maggior dimensione del messaggio in termini di bytes.
	// L'ottimizzazione sopra indicata non consente però di verificare se esistono part non definite nella specifica da segnalare come non validi quando viene definito l'additionalProperties=false.
	// Per il motivo precedentemente indicato l'ottimizzazione non è abilitata per default.
	// NOTA: feature supportata solamente dalla libreria openapi4j.
	private boolean validateMultipartOptimization = false;
	
	/* La libreria swagger_request_validator utilizza per default un transformer che aggiunge additionalProperties=false negli schemi (true)
	 * Tramite la seguente proprietà è possibile disattivarlo.
	 * È necessario disattivarlo per poter validare correttamente gli schemi che definiscono tale proprietà a true.
	 * La libreria lo utilizza come workaround per validare strutture allOf
	 * Per poterlo disabiltare è stata modificata la libreria di atlassian, nello specifico com.atlassian.oai.validator.schema.SchemaValidator, 
	 * per rendere pubblica la lista di transformers così da poter rimuovere l'AdditionalPropertiesInjectionTransformer che aggiunge additionalProperties: false negli schemi. 
	 * Alcuni interventi dove è stata riportata la segnalazione
	 * - https://bitbucket.org/atlassian/swagger-request-validator/issues/369/make-the
	 * - https://bitbucket.org/atlassian/swagger-request-validator/issues/336/oneof-and-anyof-validations-violate
	 * - https://bitbucket.org/atlassian/swagger-request-validator/issues/293/specify-the-schemavalidator-when-creating
	 * L'intervento è stato fatto con utente 'FullName'
	 * Altri link:
	 * - https://bitbucket.org/atlassian/swagger-request-validator/issues/271/composition-with-allof-anyof-or-oneof 
	 */
	private boolean swaggerRequestValidator_injectingAdditionalPropertiesFalse = false;
		
	/*
	 *  Dice se sostituire inline i $ref nello schema con le loro definizioni
	 *  Per default viene utilizzato il valore 'false' per non risolvere i combinators, 
	 *  poichè quando vengono risolti non c'è modo di ricordarsi i singoli attributi degli schemi combinati (oneOf, allOf ecc..)
	 */
	private boolean swaggerRequestValidator_resolveFullyApiSpec = false;
	
	public OpenAPILibrary getOpenApiLibrary() {
		return this.openApiLibrary;
	}

	public void setOpenApiLibrary(OpenAPILibrary openApiLibrary) {
		this.openApiLibrary = openApiLibrary;
	}

	public boolean isMergeAPISpec() {
		return this.mergeAPISpec;
	}

	public void setMergeAPISpec(boolean mergeAPISpec) {
		this.mergeAPISpec = mergeAPISpec;
	}
	
	public boolean isValidateAPISpec() {
		return this.validateAPISpec;
	}

	public void setValidateAPISpec(boolean validateAPISpec) {
		this.validateAPISpec = validateAPISpec;
	}

	public boolean isValidateRequestPath() {
		return this.validateRequestPath;
	}

	public void setValidateRequestPath(boolean validateRequestPath) {
		this.validateRequestPath = validateRequestPath;
	}
	
	public boolean isValidateRequestQuery() {
		return this.validateRequestQuery;
	}

	public void setValidateRequestQuery(boolean validateRequestQuery) {
		this.validateRequestQuery = validateRequestQuery;
	}

	public boolean isValidateRequestHeaders() {
		return this.validateRequestHeaders;
	}

	public void setValidateRequestHeaders(boolean validateRequestHeaders) {
		this.validateRequestHeaders = validateRequestHeaders;
	}

	public boolean isValidateRequestCookie() {
		return this.validateRequestCookie;
	}

	public void setValidateRequestCookie(boolean validateRequestCookie) {
		this.validateRequestCookie = validateRequestCookie;
	}

	public boolean isValidateRequestBody() {
		return this.validateRequestBody;
	}

	public void setValidateRequestBody(boolean validateRequestBody) {
		this.validateRequestBody = validateRequestBody;
	}

	public boolean isValidateResponseHeaders() {
		return this.validateResponseHeaders;
	}

	public void setValidateResponseHeaders(boolean validateResponseHeaders) {
		this.validateResponseHeaders = validateResponseHeaders;
	}

	public boolean isValidateResponseBody() {
		return this.validateResponseBody;
	}

	public void setValidateResponseBody(boolean validateResponseBody) {
		this.validateResponseBody = validateResponseBody;
	}

	public boolean isValidateRequestUnexpectedQueryParam() {
		return this.validateRequestUnexpectedQueryParam;
	}

	public void setValidateRequestUnexpectedQueryParam(boolean isValidateUnexpectedQueryParam) {
		this.validateRequestUnexpectedQueryParam = isValidateUnexpectedQueryParam;
	}

	public boolean isValidateWildcardSubtypeAsJson() {
		return this.validateWildcardSubtypeAsJson;
	}

	public void setValidateWildcardSubtypeAsJson(boolean validateWildcardSubtypeAsJson) {
		this.validateWildcardSubtypeAsJson = validateWildcardSubtypeAsJson;
	}

	public boolean isValidateMultipartOptimization() {
		return this.validateMultipartOptimization;
	}

	public void setValidateMultipartOptimization(boolean validateMultipartOptimization) {
		this.validateMultipartOptimization = validateMultipartOptimization;
	}
	
	public boolean isSwaggerRequestValidator_InjectingAdditionalPropertiesFalse() {
		return this.swaggerRequestValidator_injectingAdditionalPropertiesFalse;
	}

	public void setSwaggerRequestValidator_InjectingAdditionalPropertiesFalse(boolean isInjectingAdditionalProperties) {
		this.swaggerRequestValidator_injectingAdditionalPropertiesFalse = isInjectingAdditionalProperties;
	}
	
	public boolean isSwaggerRequestValidator_ResolveFullyApiSpec() {
		return this.swaggerRequestValidator_resolveFullyApiSpec;
	}

	public void setSwaggerRequestValidator_ResolveFullyApiSpec(boolean resolveFullyApiSpec) {
		this.swaggerRequestValidator_resolveFullyApiSpec = resolveFullyApiSpec;
	}
	
}