YamlSnakeLimits.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.json;

  21. import java.io.InputStream;
  22. import java.util.Properties;

  23. import org.openspcoop2.utils.LoggerWrapperFactory;
  24. import org.slf4j.Logger;

  25. /**
  26.  * YamlSnakeLimits
  27.  *
  28.  * @author Poli Andrea (apoli@link.it)
  29.  * @author $Author$
  30.  * @version $Rev$, $Date$
  31.  */
  32. public class YamlSnakeLimits {

  33.     private static boolean DEBUG = false;
  34.     public static boolean isDEBUG() {
  35.         return DEBUG;
  36.     }
  37.     public static void setDEBUG(boolean dEBUG) {
  38.         DEBUG = dEBUG;
  39.     }
  40.    
  41.     private static Logger log = LoggerWrapperFactory.getLogger(YamlSnakeLimits.class);
  42.    
  43.     private static boolean initialized = false;
  44.     public static void initialize() {
  45.         _initialize();
  46.     }
  47.     private static synchronized void _initialize() {
  48.          if(initialized==false) {
  49.              try {
  50.                  try(InputStream is = YamlSnakeLimits.class.getResourceAsStream("/org/openspcoop2/utils/json/yamlSnakeLimits.properties")){
  51.                      Properties p = new Properties();
  52.                      p.load(is);
  53.                      initialize(log, p);
  54.                  }
  55.              }catch(Throwable t) {
  56.                  log.error(t.getMessage(),t);
  57.              }
  58.              initialized = true;
  59.          }
  60.     }
  61.     public static void initialize(Logger logger, Properties p) {
  62.         if(p!=null) {
  63.            
  64.             String pName = "allowDuplicateKeys";
  65.             try {
  66.                 String tmp = p.getProperty(pName);
  67.                 if(tmp!=null) {
  68.                     tmp = tmp.trim();
  69.                     boolean v = Boolean.parseBoolean(tmp);
  70.                     org.yaml.snakeyaml.LoaderOptions.getDefaultValues().setAllowDuplicateKeys(v);
  71.                     logger.info("[YamlSnakeLimits] "+pName+"="+
  72.                                 org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isAllowDuplicateKeys());
  73.                     if(DEBUG) {
  74.                         System.out.println("[YamlSnakeLimits] "+pName+"="+
  75.                                 org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isAllowDuplicateKeys());
  76.                     }
  77.                 }
  78.             }catch(Throwable t) {
  79.                 logger.error("["+pName+"] Invalid limit value: "+t.getMessage(),t);
  80.             }
  81.            
  82.             pName = "wrappedToRootException";
  83.             try {
  84.                 String tmp = p.getProperty(pName);
  85.                 if(tmp!=null) {
  86.                     tmp = tmp.trim();
  87.                     boolean v = Boolean.parseBoolean(tmp);
  88.                     org.yaml.snakeyaml.LoaderOptions.getDefaultValues().setWrappedToRootException(v);
  89.                     logger.info("[YamlSnakeLimits] "+pName+"="+
  90.                             org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isWrappedToRootException());
  91.                     if(DEBUG) {
  92.                         System.out.println("[YamlSnakeLimits] "+pName+"="+
  93.                                 org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isWrappedToRootException());
  94.                     }
  95.                 }
  96.             }catch(Throwable t) {
  97.                 logger.error("["+pName+"] Invalid limit value: "+t.getMessage(),t);
  98.             }
  99.            
  100.             pName = "maxAliasesForCollections";
  101.             try {
  102.                 String tmp = p.getProperty(pName);
  103.                 if(tmp!=null) {
  104.                     tmp = tmp.trim();
  105.                     int v = Integer.valueOf(tmp);
  106.                     org.yaml.snakeyaml.LoaderOptions.getDefaultValues().setMaxAliasesForCollections(v);
  107.                     logger.info("[YamlSnakeLimits] "+pName+"="+
  108.                             org.yaml.snakeyaml.LoaderOptions.getDefaultValues().getMaxAliasesForCollections());
  109.                     if(DEBUG) {
  110.                         System.out.println("[YamlSnakeLimits] "+pName+"="+
  111.                                 org.yaml.snakeyaml.LoaderOptions.getDefaultValues().getMaxAliasesForCollections());
  112.                     }
  113.                 }
  114.             }catch(Throwable t) {
  115.                 logger.error("["+pName+"] Invalid limit value: "+t.getMessage(),t);
  116.             }

  117.             pName = "allowRecursiveKeys";
  118.             try {
  119.                 String tmp = p.getProperty(pName);
  120.                 if(tmp!=null) {
  121.                     tmp = tmp.trim();
  122.                     boolean v = Boolean.parseBoolean(tmp);
  123.                     org.yaml.snakeyaml.LoaderOptions.getDefaultValues().setAllowRecursiveKeys(v);
  124.                     logger.info("[YamlSnakeLimits] "+pName+"="+
  125.                             org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isAllowRecursiveKeys());
  126.                     if(DEBUG) {
  127.                         System.out.println("[YamlSnakeLimits] "+pName+"="+
  128.                                 org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isAllowRecursiveKeys());
  129.                     }
  130.                 }
  131.             }catch(Throwable t) {
  132.                 logger.error("["+pName+"] Invalid limit value: "+t.getMessage(),t);
  133.             }
  134.            
  135.             pName = "processComments";
  136.             try {
  137.                 String tmp = p.getProperty(pName);
  138.                 if(tmp!=null) {
  139.                     tmp = tmp.trim();
  140.                     boolean v = Boolean.parseBoolean(tmp);
  141.                     org.yaml.snakeyaml.LoaderOptions.getDefaultValues().setProcessComments(v);
  142.                     logger.info("[YamlSnakeLimits] "+pName+"="+
  143.                             org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isProcessComments());
  144.                     if(DEBUG) {
  145.                         System.out.println("[YamlSnakeLimits] "+pName+"="+
  146.                                 org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isProcessComments());
  147.                     }
  148.                 }
  149.             }catch(Throwable t) {
  150.                 logger.error("["+pName+"] Invalid limit value: "+t.getMessage(),t);
  151.             }
  152.            
  153.             pName = "enumCaseSensitive";
  154.             try {
  155.                 String tmp = p.getProperty(pName);
  156.                 if(tmp!=null) {
  157.                     tmp = tmp.trim();
  158.                     boolean v = Boolean.parseBoolean(tmp);
  159.                     org.yaml.snakeyaml.LoaderOptions.getDefaultValues().setEnumCaseSensitive(v);
  160.                     logger.info("[YamlSnakeLimits] "+pName+"="+
  161.                             org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isEnumCaseSensitive());
  162.                     if(DEBUG) {
  163.                         System.out.println("[YamlSnakeLimits] "+pName+"="+
  164.                                 org.yaml.snakeyaml.LoaderOptions.getDefaultValues().isEnumCaseSensitive());
  165.                     }
  166.                 }
  167.             }catch(Throwable t) {
  168.                 logger.error("["+pName+"] Invalid limit value: "+t.getMessage(),t);
  169.             }

  170.             pName = "nestingDepthLimit";
  171.             try {
  172.                 String tmp = p.getProperty(pName);
  173.                 if(tmp!=null) {
  174.                     tmp = tmp.trim();
  175.                     int v = Integer.valueOf(tmp);
  176.                     org.yaml.snakeyaml.LoaderOptions.getDefaultValues().setNestingDepthLimit(v);
  177.                     logger.info("[YamlSnakeLimits] "+pName+"="+
  178.                             org.yaml.snakeyaml.LoaderOptions.getDefaultValues().getNestingDepthLimit());
  179.                     if(DEBUG) {
  180.                         System.out.println("[YamlSnakeLimits] "+pName+"="+
  181.                                 org.yaml.snakeyaml.LoaderOptions.getDefaultValues().getNestingDepthLimit());
  182.                     }
  183.                 }
  184.             }catch(Throwable t) {
  185.                 logger.error("["+pName+"] Invalid limit value: "+t.getMessage(),t);
  186.             }
  187.            
  188.             pName = "codePointLimit";
  189.             try {
  190.                 String tmp = p.getProperty(pName);
  191.                 if(tmp!=null) {
  192.                     tmp = tmp.trim();
  193.                     int v = Integer.valueOf(tmp);
  194.                     org.yaml.snakeyaml.LoaderOptions.getDefaultValues().setCodePointLimit(v);
  195.                     logger.info("[YamlSnakeLimits] "+pName+"="+
  196.                             org.yaml.snakeyaml.LoaderOptions.getDefaultValues().getCodePointLimit());
  197.                     if(DEBUG) {
  198.                         System.out.println("[YamlSnakeLimits] "+pName+"="+
  199.                                 org.yaml.snakeyaml.LoaderOptions.getDefaultValues().getCodePointLimit());
  200.                     }
  201.                 }
  202.             }catch(Throwable t) {
  203.                 logger.error("["+pName+"] Invalid limit value: "+t.getMessage(),t);
  204.             }
  205.            
  206.             initialized = true; // devo indicare al costruttore di default di non attivarsi, poiche' e' stata effettuata una configurazione custom
  207.            
  208.         }
  209.     }
  210. }