Loader.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.pdd.config.loader.cli;

  21. import java.io.File;
  22. import java.io.InputStream;
  23. import java.sql.Connection;
  24. import java.sql.DriverManager;
  25. import java.sql.SQLException;
  26. import java.util.HashMap;
  27. import java.util.Map;
  28. import java.util.Properties;

  29. import javax.naming.Context;
  30. import javax.naming.InitialContext;
  31. import javax.naming.NamingException;
  32. import javax.sql.DataSource;

  33. import org.apache.commons.lang.StringUtils;
  34. import org.openspcoop2.core.commons.CoreException;
  35. import org.openspcoop2.core.config.driver.ExtendedInfoManager;
  36. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
  37. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  38. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  39. import org.openspcoop2.monitor.engine.dynamic.CorePluginLoader;
  40. import org.openspcoop2.monitor.engine.dynamic.PluginLoader;
  41. import org.openspcoop2.pdd.core.byok.BYOKMapProperties;
  42. import org.openspcoop2.pdd.core.dynamic.DynamicInfo;
  43. import org.openspcoop2.pdd.core.dynamic.DynamicUtils;
  44. import org.openspcoop2.pdd.services.ServicesUtils;
  45. import org.openspcoop2.protocol.basic.registry.ConfigIntegrationReader;
  46. import org.openspcoop2.protocol.basic.registry.RegistryReader;
  47. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  48. import org.openspcoop2.protocol.engine.archive.ArchiveValidator;
  49. import org.openspcoop2.protocol.engine.archive.DeleterArchiveUtils;
  50. import org.openspcoop2.protocol.engine.archive.ImportInformationMissingCollection;
  51. import org.openspcoop2.protocol.engine.archive.ImporterArchiveUtils;
  52. import org.openspcoop2.protocol.sdk.ConfigurazionePdD;
  53. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  54. import org.openspcoop2.protocol.sdk.archive.Archive;
  55. import org.openspcoop2.protocol.sdk.archive.ArchiveEsitoDelete;
  56. import org.openspcoop2.protocol.sdk.archive.ArchiveEsitoImport;
  57. import org.openspcoop2.protocol.sdk.archive.ArchiveMode;
  58. import org.openspcoop2.protocol.sdk.archive.ArchiveModeType;
  59. import org.openspcoop2.protocol.sdk.archive.IArchive;
  60. import org.openspcoop2.protocol.sdk.archive.MapPlaceholder;
  61. import org.openspcoop2.utils.LoggerWrapperFactory;
  62. import org.openspcoop2.utils.certificate.byok.BYOKManager;
  63. import org.openspcoop2.utils.certificate.hsm.HSMManager;
  64. import org.openspcoop2.utils.certificate.hsm.HSMUtils;
  65. import org.openspcoop2.utils.crypt.CryptConfig;
  66. import org.openspcoop2.utils.crypt.PasswordVerifier;
  67. import org.openspcoop2.utils.properties.MapProperties;
  68. import org.openspcoop2.utils.resources.FileSystemUtilities;
  69. import org.openspcoop2.utils.security.ProviderUtils;
  70. import org.openspcoop2.web.ctrlstat.core.Connettori;
  71. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  72. import org.openspcoop2.web.ctrlstat.core.DBManager;
  73. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationDB;
  74. import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiveEngine;
  75. import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiviCore;
  76. import org.slf4j.Logger;
  77. import org.springframework.jdbc.datasource.SingleConnectionDataSource;

  78. /**
  79.  *  Loader
  80.  *
  81.  * @author Poli Andrea (apoli@link.it)
  82.  * @author $Author$
  83.  * @version $Rev$, $Date$
  84.  */
  85. public class Loader {

  86.     private static Logger logCore = LoggerWrapperFactory.getLogger(Loader.class);
  87.     private static void logCoreDebug(String msg) {
  88.         logCore.debug(msg);
  89.     }
  90.     private static void logCoreInfo(String msg) {
  91.         logCore.info(msg);
  92.     }
  93.     private static void logCoreError(String msg, Exception e) {
  94.         logCore.error(msg,e);
  95.     }
  96.     private static Logger logSql = LoggerWrapperFactory.getLogger(Loader.class);
  97.    
  98.     private static boolean delete = false;
  99.     private static boolean updateAbilitato = true;
  100.    
  101.     private static ArchiveMode mode = org.openspcoop2.protocol.basic.Costanti.OPENSPCOOP_ARCHIVE_MODE;
  102.        
  103.     public static final String DS_JNDI_NAME = "org.govway.datasource.console";
  104.    
  105.     public static void main(String[] args) throws CoreException, SQLException {
  106.        
  107.         Connection connectionSQL = null;
  108.         try {
  109.        
  110.             // Logger
  111.             initLogger();
  112.             logCore=LoggerWrapperFactory.getLogger("config_loader.core");  
  113.             logSql=LoggerWrapperFactory.getLogger("config_loader.sql");
  114.            
  115.            
  116.             logCoreDebug("Raccolta parametri in corso...");
  117.            
  118.             // costanti
  119.             ArchiveModeType modeType = org.openspcoop2.protocol.basic.Costanti.OPENSPCOOP_ARCHIVE_MODE_TYPE;
  120.             boolean validateDocuments = true;
  121.             MapPlaceholder importInformationMissingGlobalPlaceholder = new MapPlaceholder();
  122.             boolean showCorrelazioneAsincronaInAccordi = true;
  123.             boolean smista = false;
  124.            
  125.             // properties
  126.             LoaderProperties loaderProperties = LoaderProperties.getInstance();
  127.             String confDir = null; // non sembra servire
  128.             String protocolloDefault = loaderProperties.getProtocolloDefault();
  129.             String userLogin = loaderProperties.getUtente();
  130.            

  131.            
  132.             // args
  133.             String utilizzoErrato = "Usage error: Loader <operationType> <archivePath>";
  134.             if(args.length<2 || args[0]==null || args[1]==null) {
  135.                 throw new CoreException(utilizzoErrato);
  136.             }
  137.             LoaderOperationType opType = parseOperationType(utilizzoErrato, args);
  138.             switch (opType) {
  139.             case CREATE:
  140.                 delete=false;
  141.                 updateAbilitato = false;
  142.                 break;
  143.             case CREATE_UPDATE:
  144.                 delete=false;
  145.                 updateAbilitato = true;
  146.                 break;
  147.             case DELETE:
  148.                 delete=true;
  149.                 updateAbilitato = false;
  150.                 break;
  151.             }
  152.            
  153.             String filePath = args[1].trim();
  154.             File fFilePath = new File(filePath);
  155.             String prefix = "L'archivio indicato ("+fFilePath.getAbsolutePath()+") ";
  156.             if(!fFilePath.exists()) {
  157.                 throw new CoreException(prefix+"non esiste");
  158.             }
  159.             if(!fFilePath.canRead()) {
  160.                 throw new CoreException(prefix+"non è accessibile");
  161.             }
  162.             if(!fFilePath.isFile()) {
  163.                 throw new CoreException(prefix+"non è un file");
  164.             }
  165.             byte [] archiveFile = FileSystemUtilities.readBytesFromFile(fFilePath);
  166.            
  167.             logCoreDebug("Raccolta parametri terminata");
  168.            
  169.             // Inizializzo Controlli connessioni
  170.             disableCheckSingleConnectionDataSource();
  171.            
  172.             // Map (environment)
  173.             initMap(loaderProperties);
  174.            
  175.             // Load Security Provider
  176.             if(loaderProperties.isSecurityLoadBouncyCastleProvider()) {
  177.                 initBouncyCastle();
  178.             }
  179.            
  180.             // inizializzo HSM Manager
  181.             initHsm(loaderProperties);
  182.            
  183.             // inizializzo BYOK Manager
  184.             BYOKManager byokManager = initBYOK(loaderProperties);
  185.            
  186.             // Secrets (environment)
  187.             initSecrets(loaderProperties, byokManager);
  188.            
  189.            
  190.             logCoreDebug("Inizializzazione connessione database in corso...");
  191.            
  192.             LoaderDatabaseProperties databaseProperties = LoaderDatabaseProperties.getInstance();
  193.             String tipoDatabase = databaseProperties.getTipoDatabase();
  194.             String driver = databaseProperties.getDriver();
  195.             String username = databaseProperties.getUsername();
  196.             String password = databaseProperties.getPassword();
  197.             String connectionURL = databaseProperties.getConnectionUrl();

  198.             org.openspcoop2.utils.resources.Loader.getInstance().newInstance(driver);
  199.             if(username!=null && password!=null){
  200.                 connectionSQL = DriverManager.getConnection(connectionURL,username,password);
  201.             }else{
  202.                 connectionSQL = DriverManager.getConnection(connectionURL);
  203.             }
  204.            
  205.             DataSource ds = new SingleConnectionDataSource(connectionSQL, true);
  206.             System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
  207.             System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming");
  208.             bindDatasource(ds, DS_JNDI_NAME);
  209.            
  210.             logCoreDebug("Inizializzazione connessione database terminata");
  211.            
  212.            
  213.            
  214.             logCoreDebug("Inizializzazione risorse libreria in corso...");
  215.            
  216.             ConfigurazionePdD configPdD = initProtocolFactory(protocolloDefault);
  217.            
  218.             initExtendedInfoManager();
  219.            
  220.             initCorePluginLoader(configPdD, loaderProperties, databaseProperties);
  221.            
  222.             Properties p = new Properties();
  223.             p.put("dataSource", DS_JNDI_NAME);
  224.             p.put("tipoDatabase", tipoDatabase);
  225.             if(!org.openspcoop2.web.ctrlstat.config.DatasourceProperties.initialize(p,logCore)){
  226.                 throw new CoreException("Inizializzazione fallita");
  227.             }
  228.        
  229.             initUtenze(loaderProperties);
  230.            
  231.             initConnettori(confDir, protocolloDefault);
  232.                        
  233.             logCoreDebug("Inizializzazione risorse libreria terminata");

  234.            

  235.             logCoreDebug("Inizializzazione driver ...");
  236.            
  237.             // istanzio il driver
  238.             DriverConfigurazioneDB driverConfigDB = new DriverConfigurazioneDB(connectionSQL, logSql, tipoDatabase);
  239.             DriverRegistroServiziDB driverRegistroDB = new DriverRegistroServiziDB(connectionSQL, logSql,tipoDatabase);
  240.                        
  241.             // Reader
  242.             RegistryReader registryReader = new RegistryReader(driverRegistroDB,logSql);
  243.             ConfigIntegrationReader configReader = new ConfigIntegrationReader(driverConfigDB,logSql);
  244.                        
  245.             // istanzio driver per Plugins
  246.             ServiceManagerProperties propertiesPlugins = new ServiceManagerProperties();
  247.             propertiesPlugins.setDatabaseType(tipoDatabase);
  248.             propertiesPlugins.setShowSql(true);
  249.             org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager jdbcServiceManagerPlugins =
  250.                     new org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager(connectionSQL, propertiesPlugins, logSql);
  251.            
  252.             // istanzio driver per ControlloTraffico
  253.             ServiceManagerProperties propertiesControlloTraffico = new ServiceManagerProperties();
  254.             propertiesControlloTraffico.setDatabaseType(tipoDatabase);
  255.             propertiesControlloTraffico.setShowSql(true);
  256.             org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager jdbcServiceManagerControlloTraffico =
  257.                     new org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager(connectionSQL, propertiesControlloTraffico, logSql);
  258.            
  259.             // istanzio driver per Allarmi
  260.             ServiceManagerProperties propertiesAllarmi = new ServiceManagerProperties();
  261.             propertiesAllarmi.setDatabaseType(tipoDatabase);
  262.             propertiesAllarmi.setShowSql(true);
  263.             org.openspcoop2.core.allarmi.dao.jdbc.JDBCServiceManager jdbcServiceManagerAllarmi =
  264.                     new org.openspcoop2.core.allarmi.dao.jdbc.JDBCServiceManager(connectionSQL, propertiesAllarmi, logSql);
  265.            
  266.             // Istanzio ArchiviEngineControlStation
  267.             ControlStationCore core = new ControlStationCore(true, null, protocolloDefault);
  268.             ArchiviCore archiviCore = new ArchiviCore(core);
  269.             ArchiveEngine importerEngine = new ArchiveEngine(driverRegistroDB,
  270.                     driverConfigDB,
  271.                     jdbcServiceManagerPlugins,
  272.                     jdbcServiceManagerControlloTraffico,
  273.                     jdbcServiceManagerAllarmi,
  274.                     archiviCore, smista, userLogin);
  275.            
  276.             logCoreDebug("Inizializzazione driver terminata");
  277.            
  278.             logCoreInfo("Inizializzazione engine terminata");          
  279.            
  280.            
  281.            
  282.             // parsing
  283.             logCoreInfo("Lettura archivio ...");
  284.             IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocolloDefault);
  285.             IArchive archiveEngine = pf.createArchive();
  286.             Archive archive = archiveEngine.importArchive(archiveFile, mode, modeType, registryReader, configReader,
  287.                     validateDocuments, importInformationMissingGlobalPlaceholder);
  288.             logCoreInfo("Lettura archivio effettuata");
  289.            
  290.            
  291.             // validate
  292.             logCoreInfo("Validazione archivio ...");
  293.             ArchiveValidator validator = new ArchiveValidator(registryReader);
  294.             ImportInformationMissingCollection importInformationMissingCollection = new ImportInformationMissingCollection();
  295.             validator.validateArchive(archive, protocolloDefault, validateDocuments, importInformationMissingCollection, userLogin,
  296.                     showCorrelazioneAsincronaInAccordi,delete);
  297.             logCoreInfo("Validazione archivio effettuata");
  298.            
  299.             // finalize
  300.             logCoreInfo("Finalizzazione archivio ...");
  301.             archiveEngine.finalizeImportArchive(archive, mode, modeType, registryReader, configReader,
  302.                     validateDocuments, importInformationMissingGlobalPlaceholder);
  303.             logCoreInfo("Finalizzazione archivio effettuata");
  304.            
  305.             // store
  306.             process(importerEngine, userLogin, loaderProperties,
  307.                     archiveEngine, archive);        
  308.         }
  309.         catch(Exception t) {
  310.             if(logCore!=null) {
  311.                 logCore.error(t.getMessage(),t);
  312.             }
  313.             throw new CoreException(t.getMessage(),t);
  314.         }
  315.         finally {
  316.             if(connectionSQL!=null) {
  317.                 connectionSQL.close();
  318.             }
  319.         }

  320.     }
  321.    
  322.     private static void process(ArchiveEngine importerEngine, String userLogin, LoaderProperties loaderProperties,
  323.             IArchive archiveEngine, Archive archive) throws Exception {
  324.        
  325.         boolean importDeletePolicyConfig = loaderProperties.isPolicyEnable();
  326.         boolean importDeletePluginConfig = loaderProperties.isPluginEnable();
  327.         boolean importCheckPluginReferences = loaderProperties.isPluginCheckReferences();
  328.         boolean importConfig = loaderProperties.isConfigurazioneGeneraleEnable();
  329.         boolean isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto = loaderProperties.isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto();
  330.         boolean isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto = loaderProperties.isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto();
  331.         boolean isSoggettiApplicativiCredenzialiBasicPermitSameCredentials = loaderProperties.isSoggettiApplicativiCredenzialiBasicPermitSameCredentials();
  332.         boolean isSoggettiApplicativiCredenzialiSslPermitSameCredentials = loaderProperties.isSoggettiApplicativiCredenzialiSslPermitSameCredentials();
  333.         boolean isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials = loaderProperties.isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials();
  334.        
  335.         String importNomePddOperativa = loaderProperties.getNomePddOperativa();
  336.         String importTipoPddArchivi = loaderProperties.getTipoPddArchivio();
  337.                
  338.         boolean isShowGestioneWorkflowStatoDocumenti = false;
  339.         boolean isShowAccordiColonnaAzioni = false;
  340.                
  341.         String esito = null;
  342.         if(delete){
  343.            
  344.             logCoreInfo("Eliminazione in corso ...");
  345.            
  346.             DeleterArchiveUtils deleterArchiveUtils =
  347.                     new DeleterArchiveUtils(importerEngine, logCore, userLogin,
  348.                             importDeletePolicyConfig,
  349.                             importDeletePluginConfig);
  350.            
  351.             ArchiveEsitoDelete esitoDelete = deleterArchiveUtils.deleteArchive(archive, userLogin);
  352.            
  353.             esito = archiveEngine.toString(esitoDelete, mode);
  354.            
  355.             logCoreInfo("Eliminazione completata");
  356.            
  357.         }else{
  358.            
  359.             logCoreInfo("Importazione (aggiornamento:"+updateAbilitato+") in corso ...");
  360.            
  361.             ImporterArchiveUtils importerArchiveUtils =
  362.                     new ImporterArchiveUtils(importerEngine, logCore, userLogin, importNomePddOperativa, importTipoPddArchivi,
  363.                             isShowGestioneWorkflowStatoDocumenti, updateAbilitato,
  364.                             importDeletePolicyConfig,
  365.                             importDeletePluginConfig, importCheckPluginReferences,
  366.                             importConfig);
  367.            
  368.             ArchiveEsitoImport esitoImport = importerArchiveUtils.importArchive(archive, userLogin,
  369.                     isShowAccordiColonnaAzioni,
  370.                     isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto,
  371.                     isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto,
  372.                     isSoggettiApplicativiCredenzialiBasicPermitSameCredentials,
  373.                     isSoggettiApplicativiCredenzialiSslPermitSameCredentials,
  374.                     isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials);
  375.            
  376.             esito = archiveEngine.toString(esitoImport, mode);
  377.            
  378.             logCoreInfo("Importazione (aggiornamento:"+updateAbilitato+") completata");
  379.         }
  380.        
  381.         logCoreInfo("Operazione terminata con esito:\n"+esito);

  382.     }

  383.     private static void initLogger() throws CoreException {
  384.         Properties propertiesLog4j = new Properties();
  385.         try (InputStream inPropLog4j = Loader.class.getResourceAsStream("/config_loader.cli.log4j2.properties");){
  386.             propertiesLog4j.load(inPropLog4j);
  387.             LoggerWrapperFactory.setLogConfiguration(propertiesLog4j);
  388.         } catch(java.lang.Exception e) {
  389.             throw new CoreException("Impossibile leggere i dati dal file 'config_loader.cli.log4j2.properties': "+e.getMessage());
  390.         }
  391.     }
  392.     private static LoaderOperationType parseOperationType(String utilizzoErrato,String [] args) throws CoreException{
  393.         LoaderOperationType opType = null;
  394.         try {
  395.             opType = LoaderOperationType.toEnumConstant(args[0].trim(), true);
  396.         }catch(Exception e) {
  397.             throw new CoreException(utilizzoErrato+"\nIl tipo di operazione indicato ("+args[0].trim()+") non è gestito, valori ammessi: "+
  398.                     LoaderOperationType.CREATE.getValue()+","+LoaderOperationType.CREATE_UPDATE.getValue()+","+LoaderOperationType.DELETE.getValue());
  399.         }
  400.         return opType;
  401.     }
  402.     private static InitialContext bindDatasource(DataSource ds, String jndiName) throws NamingException {
  403.         InitialContext ic = new InitialContext();
  404.         try{
  405.             ic.bind(jndiName, ds);
  406.         }catch(javax.naming.NameAlreadyBoundException already){
  407.             logSql.debug("Bind failed: "+already.getMessage(),already);
  408.             //  capita in caso di più threads
  409.         }
  410.        
  411.         // Creazione su tomcat (per db audit appender)
  412.         boolean notFoundJava = false;
  413.         try {
  414.             ic.createSubcontext("java:");
  415.         }
  416.         catch (javax.naming.NameNotFoundException notFound) {
  417.             // il contesto java: non esiste
  418.             notFoundJava = true;
  419.             logSql.debug("CreateSubcontex java notFound: "+notFound.getMessage(),notFound);
  420.         }
  421.         catch (javax.naming.NameAlreadyBoundException already) {
  422.             logSql.debug("CreateSubcontext java failed: "+already.getMessage(),already);
  423.             // Il contesto esiste già, nessuna azione necessaria
  424.         }
  425.         try {
  426.             ic.createSubcontext("java:/comp");
  427.         }
  428.         catch (javax.naming.NameNotFoundException notFound) {
  429.             // il contesto java: non esiste
  430.             notFoundJava = true;
  431.             logSql.debug("CreateSubcontex comp notFound: "+notFound.getMessage(),notFound);
  432.         }
  433.         catch (javax.naming.NameAlreadyBoundException already) {
  434.             logSql.debug("CreateSubcontext comp failed: "+already.getMessage(),already);
  435.             // Il contesto esiste già, nessuna azione necessaria
  436.         }
  437.         try {
  438.             ic.createSubcontext("java:/comp/env");
  439.         }
  440.         catch (javax.naming.NameNotFoundException notFound) {
  441.             // il contesto java: non esiste
  442.             notFoundJava = true;
  443.             logSql.debug("CreateSubcontext comp/env notFound: "+notFound.getMessage(),notFound);
  444.         }
  445.         catch (javax.naming.NameAlreadyBoundException already) {
  446.             logSql.debug("CreateSubcontext comp/env failed: "+already.getMessage(),already);
  447.             // Il contesto esiste già, nessuna azione necessaria
  448.         }
  449.         if(!notFoundJava) {
  450.             try {
  451.                 ic.bind("java:/comp/env/"+jndiName, ds);
  452.             } catch (javax.naming.NameAlreadyBoundException already) {
  453.                 logSql.debug("Bind comp failed: "+already.getMessage(),already);
  454.                 // capita in caso di più threads
  455.             }
  456.         }
  457.        
  458.         return ic;
  459.     }
  460.     private static void initBouncyCastle() throws CoreException {
  461.         try{
  462.             ProviderUtils.addBouncyCastleAfterSun(true);
  463.             logCoreInfo("Aggiunto Security Provider org.bouncycastle.jce.provider.BouncyCastleProvider");
  464.         }catch(Exception e){
  465.             throw new CoreException(e.getMessage(),e);
  466.         }
  467.     }
  468.     private static void disableCheckSingleConnectionDataSource() throws CoreException {
  469.         // Inizializzo Controlli connessioni
  470.         try {
  471.             Logger logR = logSql;
  472.             ServicesUtils.initCheckConnectionDB(logR, false, false);
  473.            
  474.             DriverControlStationDB.setCheckLogger(logR);
  475.             DriverControlStationDB.setCheckIsClosed(false);
  476.             DriverControlStationDB.setCheckAutocommit(false);
  477.             DBManager.setCheckLogger(logR);
  478.             DBManager.setCheckIsClosed(false);
  479.             DBManager.setCheckAutocommit(false);
  480.         } catch (Exception e) {
  481.             doError("Inizializzazione controlli connessione non riuscita",e);
  482.         }
  483.     }
  484.     private static void initMap(LoaderProperties loaderProperties) throws CoreException {
  485.         try {
  486.             String mapConfig = loaderProperties.getEnvMapConfig();
  487.             if(StringUtils.isNotEmpty(mapConfig)) {
  488.                 logCoreInfo("Inizializzazione environment in corso...");
  489.                 MapProperties.initialize(logCore, mapConfig, loaderProperties.isEnvMapConfigRequired());
  490.                 MapProperties mapProperties = MapProperties.getInstance();
  491.                 mapProperties.initEnvironment();
  492.                 String msgInit = "Environment inizializzato con le variabili definite nel file '"+mapConfig+"'"+
  493.                         "\n\tJavaProperties: "+mapProperties.getJavaMap().keys()+
  494.                         "\n\tEnvProperties: "+mapProperties.getEnvMap().keys()+
  495.                         "\n\tObfuscateMode: "+mapProperties.getObfuscateModeDescription()+
  496.                         "\n\tObfuscatedJavaKeys: "+mapProperties.getObfuscatedJavaKeys()+
  497.                         "\n\tObfuscatedEnvKeys: "+mapProperties.getObfuscatedEnvKeys();
  498.                 logCoreInfo(msgInit);
  499.             }
  500.         } catch (Exception e) {
  501.             doError("Errore durante l'inizializzazione dell'ambiente",e);
  502.         }
  503.     }
  504.     private static void initHsm(LoaderProperties loaderProperties) throws CoreException {
  505.         // inizializzo HSM Manager
  506.         try {
  507.             String hsmConfig = loaderProperties.getHSMConfigurazione();
  508.             if(StringUtils.isNotEmpty(hsmConfig)) {
  509.                 logCoreInfo("Inizializzazione HSM in corso...");
  510.                 File f = new File(hsmConfig);
  511.                 HSMManager.init(f, loaderProperties.isHSMRequired(), logCore, false);
  512.                 HSMUtils.setHsmConfigurableKeyPassword(loaderProperties.isHSMKeyPasswordConfigurable());
  513.                 logCoreInfo("Inizializzazione HSM effettuata con successo");
  514.             }
  515.         } catch (Exception e) {
  516.             doError("Errore durante l'inizializzazione del manager HSM",e);
  517.         }
  518.     }
  519.     private static BYOKManager initBYOK(LoaderProperties loaderProperties) throws CoreException {
  520.         BYOKManager byokManager = null;
  521.         try {
  522.             String byokConfig = loaderProperties.getBYOKConfigurazione();
  523.             if(StringUtils.isNotEmpty(byokConfig)) {
  524.                 logCoreInfo("Inizializzazione BYOK in corso...");
  525.                 File f = new File(byokConfig);
  526.                 BYOKManager.init(f, loaderProperties.isBYOKRequired(), logCore);
  527.                 byokManager = BYOKManager.getInstance();
  528.                 String msgInit = "Gestore BYOK inizializzato;"+
  529.                         "\n\tHSM registrati: "+byokManager.getKeystoreTypes()+
  530.                         "\n\tSecurityEngine registrati: "+byokManager.getSecurityEngineTypes()+
  531.                         "\n\tGovWaySecurityEngine: "+byokManager.getSecurityEngineGovWayDescription();
  532.                 logCoreInfo(msgInit);
  533.             }
  534.         } catch (Exception e) {
  535.             doError("Errore durante l'inizializzazione del manager BYOK",e);
  536.         }
  537.         return byokManager;
  538.     }
  539.     private static void initSecrets(LoaderProperties loaderProperties, BYOKManager byokManager) throws CoreException {
  540.         try {
  541.             String secretsConfig = loaderProperties.getBYOKEnvSecretsConfig();
  542.             if(byokManager!=null && StringUtils.isNotEmpty(secretsConfig)) {
  543.                 logCoreInfo("Inizializzazione secrets in corso...");
  544.                
  545.                 Map<String, Object> dynamicMap = new HashMap<>();
  546.                 DynamicInfo dynamicInfo = new  DynamicInfo();
  547.                 DynamicUtils.fillDynamicMap(logCore, dynamicMap, dynamicInfo);
  548.                
  549.                 BYOKMapProperties.initialize(logCore, secretsConfig, loaderProperties.isBYOKEnvSecretsConfigRequired(),
  550.                         true,
  551.                         dynamicMap, true);
  552.                 BYOKMapProperties secretsProperties = BYOKMapProperties.getInstance();
  553.                 secretsProperties.initEnvironment();
  554.                 String msgInit = "Environment inizializzato con i secrets definiti nel file '"+secretsConfig+"'"+
  555.                         "\n\tJavaProperties: "+secretsProperties.getJavaMap().keys()+
  556.                         "\n\tEnvProperties: "+secretsProperties.getEnvMap().keys()+
  557.                         "\n\tObfuscateMode: "+secretsProperties.getObfuscateModeDescription();
  558.                 logCoreInfo(msgInit);
  559.             }
  560.         } catch (Exception e) {
  561.             doError("Errore durante l'inizializzazione dell'ambiente (secrets)",e);
  562.         }  
  563.     }
  564.     private static ConfigurazionePdD initProtocolFactory(String protocolloDefault) throws CoreException {
  565.         ConfigurazionePdD configPdD = null;
  566.         try {
  567.             configPdD = new ConfigurazionePdD();
  568.             configPdD.setAttesaAttivaJDBC(-1);
  569.             configPdD.setCheckIntervalJDBC(-1);
  570.             configPdD.setLoader(new org.openspcoop2.utils.resources.Loader(Loader.class.getClassLoader()));
  571.             configPdD.setLog(logCore);
  572.             ProtocolFactoryManager.initialize(logCore, configPdD,
  573.                     protocolloDefault);
  574.         } catch (Exception e) {
  575.             throw new CoreException("Errore (InitConfigurazione - ProtocolFactoryManager): "+e.getMessage(),e);
  576.         }
  577.         return configPdD;
  578.     }
  579.     private static void initExtendedInfoManager() throws CoreException {
  580.         try{
  581.             ExtendedInfoManager.initialize(new org.openspcoop2.utils.resources.Loader(Loader.class.getClassLoader()), null, null, null);
  582.         }catch(Exception e){
  583.             throw new CoreException("Inizializzazione [ExtendedInfoManager] fallita",e);
  584.         }
  585.     }
  586.     private static void initCorePluginLoader(ConfigurazionePdD configPdD, LoaderProperties loaderProperties, LoaderDatabaseProperties databaseProperties) throws CoreException {
  587.         try{
  588.             CorePluginLoader.initialize(configPdD.getLoader(), logSql,
  589.                     PluginLoader.class,
  590.                     new LoaderRegistroPluginsService(logSql, databaseProperties),
  591.                     loaderProperties.getPluginSeconds());
  592.         }catch(Exception e){
  593.             throw new CoreException("Inizializzazione [PluginManager] fallita",e);
  594.         }
  595.     }
  596.     private static void initUtenze(LoaderProperties loaderProperties) throws CoreException {
  597.         try {
  598.             CryptConfig utenzeCryptConfig = new CryptConfig(loaderProperties.getUtenzePassword());
  599.             CryptConfig applicativiCryptConfig = new CryptConfig(loaderProperties.getApplicativiPassword());
  600.             int applicativiApiKeyPasswordGeneratedLength=loaderProperties.getApplicativiApiKeyPasswordGeneratedLength();
  601.             boolean applicativiBasicPasswordEnableConstraints=loaderProperties.isApplicativiBasicPasswordEnableConstraints();
  602.             CryptConfig soggettiCryptConfig = new CryptConfig(loaderProperties.getSoggettiPassword());
  603.             int soggettiApiKeyPasswordGeneratedLength=loaderProperties.getSoggettiApiKeyPasswordGeneratedLength();
  604.             boolean soggettiBasicPasswordEnableConstraints=loaderProperties.isSoggettiBasicPasswordEnableConstraints();
  605.            
  606.             ControlStationCore.setUtenzePasswordEncryptEngineApiMode(utenzeCryptConfig);
  607.            
  608.             ControlStationCore.setApplicativiPasswordEncryptEngineApiMode(applicativiCryptConfig);
  609.             ControlStationCore.setApplicativiApiKeyPasswordGeneratedLengthApiMode(applicativiApiKeyPasswordGeneratedLength);
  610.             if(applicativiBasicPasswordEnableConstraints) {
  611.                 PasswordVerifier applicativiPasswordVerifier = new PasswordVerifier("/org/openspcoop2/utils/crypt/consolePassword.properties");
  612.                 ControlStationCore.setApplicativiPasswordVerifierEngineApiMode(applicativiPasswordVerifier);
  613.             }
  614.            
  615.             ControlStationCore.setSoggettiPasswordEncryptEngineApiMode(soggettiCryptConfig);
  616.             ControlStationCore.setSoggettiApiKeyPasswordGeneratedLengthApiMode(soggettiApiKeyPasswordGeneratedLength);
  617.             if(soggettiBasicPasswordEnableConstraints) {
  618.                 PasswordVerifier soggettiPasswordVerifier = new PasswordVerifier("/org/openspcoop2/utils/crypt/consolePassword.properties");
  619.                 ControlStationCore.setSoggettiPasswordVerifierEngineApiMode(soggettiPasswordVerifier);
  620.             }
  621.            
  622.         } catch (Exception e) {
  623.             throw new CoreException(e.getMessage(),e);
  624.         }
  625.     }
  626.     private static void initConnettori(String confDir, String protocolloDefault) throws CoreException {
  627.         try{
  628.             Connettori.initialize(logCore, true, confDir, protocolloDefault);
  629.         }catch(Exception e){
  630.             throw new CoreException(e.getMessage(),e);
  631.         }
  632.     }

  633.     private static void doError(String msg,Exception e) throws CoreException {
  634.         String msgErrore = msg+": " + e.getMessage();
  635.         logCoreError(msgErrore,e);
  636.         throw new CoreException(msgErrore,e);
  637.     }
  638. }