OpenapiLibraryValidatorConfig.java

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

  21. import java.io.Serializable;

  22. /**
  23.  * OpenapiApi4jValidatorConfig
  24.  *
  25.  * @author Andrea Poli (poli@link.it)
  26.  * @author $Author$
  27.  * @version $Rev$, $Date$
  28.  *
  29.  */
  30. public class OpenapiLibraryValidatorConfig implements Serializable {

  31.     private static final long serialVersionUID = 1L;

  32.     private OpenAPILibrary openApiLibrary = OpenAPILibrary.json_schema;
  33.    
  34.     private boolean mergeAPISpec = false;
  35.    
  36.     private boolean validateAPISpec = true;
  37.    
  38.     private boolean validateRequestPath = true;
  39.     private boolean validateRequestQuery = true;
  40.     /* utilizzato solo in swagger_request_validator per disabilitare il controllo.
  41.      * Da specifica i parametri ulteriori vanno ignorati, mentre la libreria swagger_request_validator li valida
  42.      * Per default quindi questa opzione viene disabilitata
  43.      */
  44.     private boolean validateRequestUnexpectedQueryParam = false;
  45.     private boolean validateRequestHeaders = true;
  46.     private boolean validateRequestCookie = true;
  47.     private boolean validateRequestBody = true;
  48.    
  49.     private boolean validateResponseHeaders = true;
  50.     private boolean validateResponseBody = true;
  51.    
  52.     // Dice se trattare il subtype '*' come json e quindi validare lo schema del body passato
  53.     private boolean validateWildcardSubtypeAsJson = true;
  54.    
  55.     // La validazione delle richieste multipart/form-data (o mixed) prevede per default il processamento di tutto lo stream.
  56.     // Poichè le parti "binarie" non richiedono una validazione rispetto ad uno schema e sono tipicamente serializzate dopo i metadati (plain o json)
  57.     // 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
  58.     // la maggior dimensione del messaggio in termini di bytes.
  59.     // 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.
  60.     // Per il motivo precedentemente indicato l'ottimizzazione non è abilitata per default.
  61.     // NOTA: feature supportata solamente dalla libreria openapi4j.
  62.     private boolean validateMultipartOptimization = false;
  63.    
  64.     /* La libreria swagger_request_validator utilizza per default un transformer che aggiunge additionalProperties=false negli schemi (true)
  65.      * Tramite la seguente proprietà è possibile disattivarlo.
  66.      * È necessario disattivarlo per poter validare correttamente gli schemi che definiscono tale proprietà a true.
  67.      * La libreria lo utilizza come workaround per validare strutture allOf
  68.      * Per poterlo disabiltare è stata modificata la libreria di atlassian, nello specifico com.atlassian.oai.validator.schema.SchemaValidator,
  69.      * per rendere pubblica la lista di transformers così da poter rimuovere l'AdditionalPropertiesInjectionTransformer che aggiunge additionalProperties: false negli schemi.
  70.      * Alcuni interventi dove è stata riportata la segnalazione
  71.      * - https://bitbucket.org/atlassian/swagger-request-validator/issues/369/make-the
  72.      * - https://bitbucket.org/atlassian/swagger-request-validator/issues/336/oneof-and-anyof-validations-violate
  73.      * - https://bitbucket.org/atlassian/swagger-request-validator/issues/293/specify-the-schemavalidator-when-creating
  74.      * L'intervento è stato fatto con utente 'FullName'
  75.      * Altri link:
  76.      * - https://bitbucket.org/atlassian/swagger-request-validator/issues/271/composition-with-allof-anyof-or-oneof
  77.      */
  78.     private boolean swaggerRequestValidator_injectingAdditionalPropertiesFalse = false;
  79.        
  80.     /*
  81.      *  Dice se sostituire inline i $ref nello schema con le loro definizioni
  82.      *  Per default viene utilizzato il valore 'false' per non risolvere i combinators,
  83.      *  poichè quando vengono risolti non c'è modo di ricordarsi i singoli attributi degli schemi combinati (oneOf, allOf ecc..)
  84.      */
  85.     private boolean swaggerRequestValidator_resolveFullyApiSpec = false;
  86.    
  87.     public OpenAPILibrary getOpenApiLibrary() {
  88.         return this.openApiLibrary;
  89.     }

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

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

  96.     public void setMergeAPISpec(boolean mergeAPISpec) {
  97.         this.mergeAPISpec = mergeAPISpec;
  98.     }
  99.    
  100.     public boolean isValidateAPISpec() {
  101.         return this.validateAPISpec;
  102.     }

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

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

  109.     public void setValidateRequestPath(boolean validateRequestPath) {
  110.         this.validateRequestPath = validateRequestPath;
  111.     }
  112.    
  113.     public boolean isValidateRequestQuery() {
  114.         return this.validateRequestQuery;
  115.     }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  164.     public void setValidateMultipartOptimization(boolean validateMultipartOptimization) {
  165.         this.validateMultipartOptimization = validateMultipartOptimization;
  166.     }
  167.    
  168.     public boolean isSwaggerRequestValidator_InjectingAdditionalPropertiesFalse() {
  169.         return this.swaggerRequestValidator_injectingAdditionalPropertiesFalse;
  170.     }

  171.     public void setSwaggerRequestValidator_InjectingAdditionalPropertiesFalse(boolean isInjectingAdditionalProperties) {
  172.         this.swaggerRequestValidator_injectingAdditionalPropertiesFalse = isInjectingAdditionalProperties;
  173.     }
  174.    
  175.     public boolean isSwaggerRequestValidator_ResolveFullyApiSpec() {
  176.         return this.swaggerRequestValidator_resolveFullyApiSpec;
  177.     }

  178.     public void setSwaggerRequestValidator_ResolveFullyApiSpec(boolean resolveFullyApiSpec) {
  179.         this.swaggerRequestValidator_resolveFullyApiSpec = resolveFullyApiSpec;
  180.     }
  181.    
  182. }