ModIValidazioneAuditClaimValue.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.protocol.modipa.validator;

  21. import java.util.List;

  22. import org.apache.commons.lang.StringUtils;
  23. import org.openspcoop2.protocol.modipa.config.ModIAuditClaimConfig;
  24. import org.openspcoop2.protocol.sdk.Eccezione;
  25. import org.openspcoop2.protocol.sdk.ProtocolException;
  26. import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;
  27. import org.openspcoop2.protocol.sdk.validator.ValidazioneUtils;
  28. import org.openspcoop2.utils.regexp.RegularExpressionEngine;

  29. import com.fasterxml.jackson.databind.node.TextNode;

  30. /**
  31.  * ModIValidazioneAuditClaimValue
  32.  *
  33.  * @author Poli Andrea (apoli@link.it)
  34.  * @author $Author$
  35.  * @version $Rev$, $Date$
  36.  */
  37. public class ModIValidazioneAuditClaimValue {

  38.     private String claimName;
  39.     private String v;
  40.     private Object o;
  41.     private ModIAuditClaimConfig modIAuditClaimConfig;
  42.    
  43.     // Usato in validazione
  44.     public ModIValidazioneAuditClaimValue(String claimName, String v, Object o, ModIAuditClaimConfig modIAuditClaimConfig){
  45.         this.claimName = claimName;
  46.         this.v = v;
  47.         this.o = o;
  48.         this.modIAuditClaimConfig = modIAuditClaimConfig;
  49.     }
  50.     // Usato in imbustamento
  51.     public ModIValidazioneAuditClaimValue(String claimName, String v, ModIAuditClaimConfig modIAuditClaimConfig, String prefix) throws ProtocolException{
  52.         this.claimName = claimName;
  53.         this.v = v;
  54.         this.modIAuditClaimConfig = modIAuditClaimConfig;
  55.        
  56.         this.parseValue(prefix);
  57.     }
  58.    
  59.     public String getValore() {
  60.         return this.v;
  61.     }
  62.     public Object getRawObject() {
  63.         return this.o;
  64.     }
  65.    
  66.     private String getPrefixInvalidFormatValue() {
  67.         return "Invalid format value '"+this.v+"'; ";
  68.     }
  69.    
  70.     private void parseValue(String prefix) throws ProtocolException {
  71.         if(this.modIAuditClaimConfig.isStringType()) {
  72.             this.o = this.v;
  73.         }
  74.         else {
  75.             if("true".equals(this.v)) {
  76.                 this.o = true;
  77.             }
  78.             else if("false".equals(this.v)) {
  79.                 this.o = false;
  80.             }
  81.             else {
  82.                 String expected = "";
  83.                 try {
  84.                     if(this.v.contains(".")) {
  85.                         expected = "double";
  86.                         double d = Double.parseDouble(this.v);
  87.                         this.o = d;
  88.                     }
  89.                     else {
  90.                         expected = "long";
  91.                         long l = Long.parseLong(this.v);
  92.                         this.o = l;
  93.                     }
  94.                 }catch(Exception e) {
  95.                     String msgErrore = prefix+ModIValidazioneSintatticaRest.getErroreTokenClaimNonValido(this.claimName,
  96.                             new Exception(getPrefixInvalidFormatValue()+"expected "+expected+" primitive type"));
  97.                     processException(null, null, msgErrore, e);
  98.                 }
  99.             }
  100.         }
  101.     }
  102.    
  103.     public void validate(String prefix) throws ProtocolException {
  104.         this.validate(null, null, prefix);
  105.     }
  106.     public void validate(ValidazioneUtils validazioneUtils, List<Eccezione> erroriValidazione, String prefix) throws ProtocolException {
  107.        
  108.         validateValueType(validazioneUtils, erroriValidazione, prefix);
  109.        
  110.         validateValueLength(validazioneUtils, erroriValidazione, prefix);

  111.         validateValueRegexp(validazioneUtils, erroriValidazione, prefix);
  112.        
  113.         validateValueByEnum(validazioneUtils, erroriValidazione, prefix);
  114.        
  115.     }
  116.     private void processException(ValidazioneUtils validazioneUtils, List<Eccezione> erroriValidazione, String msgErrore) throws ProtocolException {
  117.         processException(validazioneUtils, erroriValidazione, msgErrore, null);
  118.     }
  119.     private void processException(ValidazioneUtils validazioneUtils, List<Eccezione> erroriValidazione, String msgErrore, Exception e) throws ProtocolException {
  120.         if(validazioneUtils!=null) {
  121.             erroriValidazione.add(validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.MITTENTE_NON_PRESENTE, msgErrore));
  122.         }
  123.         else {
  124.             if(e!=null) {
  125.                 throw new ProtocolException(msgErrore, e);
  126.             }
  127.             else {
  128.                 throw new ProtocolException(msgErrore);
  129.             }
  130.         }
  131.     }
  132.     private void validateValueType(ValidazioneUtils validazioneUtils, List<Eccezione> erroriValidazione, String prefix) throws ProtocolException {
  133.         if(this.modIAuditClaimConfig.isStringType()) {
  134.             if( !(this.o instanceof TextNode) && !(this.o instanceof String) ) {
  135.                 String msgErrore = prefix+ModIValidazioneSintatticaRest.getErroreTokenClaimNonValido(this.claimName,
  136.                         new Exception(getPrefixInvalidFormatValue()+"expected string type, found '"+this.o.getClass().getName()+"'"));
  137.                 processException(validazioneUtils, erroriValidazione, msgErrore);
  138.             }
  139.         }else {
  140.             if(this.o instanceof TextNode) {
  141.                 String msgErrore = prefix+ModIValidazioneSintatticaRest.getErroreTokenClaimNonValido(this.claimName,
  142.                         new Exception(getPrefixInvalidFormatValue()+"expected primitive type, found string"));
  143.                 processException(validazioneUtils, erroriValidazione, msgErrore);
  144.             }
  145.         }
  146.     }
  147.     private void validateValueLength(ValidazioneUtils validazioneUtils, List<Eccezione> erroriValidazione, String prefix) throws ProtocolException {
  148.         int lengthV = this.v!=null ? this.v.length() : 0;
  149.        
  150.         if(this.modIAuditClaimConfig.getMinLength()>0 && lengthV<this.modIAuditClaimConfig.getMinLength()) {
  151.             String msgErrore = prefix+ModIValidazioneSintatticaRest.getErroreTokenClaimNonValido(this.claimName,
  152.                     new Exception("Invalid value '"+this.v+"'; min length requirement '"+this.modIAuditClaimConfig.getMinLength()+"' not met"));
  153.             processException(validazioneUtils, erroriValidazione, msgErrore);
  154.         }
  155.        
  156.         if(this.modIAuditClaimConfig.getMaxLength()>0 && lengthV>this.modIAuditClaimConfig.getMaxLength()) {
  157.             String msgErrore = prefix+ModIValidazioneSintatticaRest.getErroreTokenClaimNonValido(this.claimName,
  158.                     new Exception("Invalid value '"+this.v+"'; max length requirement '"+this.modIAuditClaimConfig.getMaxLength()+"' not met"));
  159.             processException(validazioneUtils, erroriValidazione, msgErrore);
  160.         }
  161.     }
  162.     private void validateValueRegexp(ValidazioneUtils validazioneUtils, List<Eccezione> erroriValidazione, String prefix) throws ProtocolException {
  163.         if(this.modIAuditClaimConfig.getRegexp()!=null && StringUtils.isNotEmpty(this.modIAuditClaimConfig.getRegexp())) {
  164.             try {
  165.                 if(!RegularExpressionEngine.isMatch(this.v, this.modIAuditClaimConfig.getRegexp())) {
  166.                     throw new ProtocolException("Validation by regexp '"+this.modIAuditClaimConfig.getRegexp()+"' failed: invalid value '"+this.v+"'");
  167.                 }
  168.             }catch(Exception e) {
  169.                 String msgErrore = prefix+ModIValidazioneSintatticaRest.getErroreTokenClaimNonValido(this.claimName, e);
  170.                 processException(validazioneUtils, erroriValidazione, msgErrore, e);
  171.             }
  172.         }
  173.     }
  174.     private void validateValueByEnum(ValidazioneUtils validazioneUtils, List<Eccezione> erroriValidazione, String prefix) throws ProtocolException {
  175.         if(this.modIAuditClaimConfig.getValues()!=null && !this.modIAuditClaimConfig.getValues().isEmpty() &&
  176.                 !this.modIAuditClaimConfig.getValues().contains(this.v)) {
  177.             String msgErrore = prefix+ModIValidazioneSintatticaRest.getErroreTokenClaimNonValido(this.claimName, new Exception("Validation by enum-list failed: value '"+this.v+"' unknown"));
  178.             processException(validazioneUtils, erroriValidazione, msgErrore);
  179.         }
  180.     }
  181. }