InfoConfigurazione.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.logger.filetrace;

  21. import java.io.Serializable;
  22. import java.util.ArrayList;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;

  26. import org.openspcoop2.core.config.PortaApplicativa;
  27. import org.openspcoop2.core.config.PortaDelegata;
  28. import org.openspcoop2.core.config.Proprieta;
  29. import org.openspcoop2.core.config.ServizioApplicativo;
  30. import org.openspcoop2.core.constants.Costanti;
  31. import org.openspcoop2.core.id.IDPortaApplicativa;
  32. import org.openspcoop2.core.id.IDPortaDelegata;
  33. import org.openspcoop2.core.id.IDServizioApplicativo;
  34. import org.openspcoop2.core.id.IDSoggetto;
  35. import org.openspcoop2.core.registry.Soggetto;
  36. import org.openspcoop2.core.transazioni.Transazione;
  37. import org.openspcoop2.core.transazioni.constants.PddRuolo;
  38. import org.openspcoop2.core.transazioni.utils.CredenzialiMittente;
  39. import org.openspcoop2.core.transazioni.utils.credenziali.CredenzialeTokenClient;
  40. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  41. import org.openspcoop2.pdd.logger.transazioni.TransazioneUtilities;
  42. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  43. import org.openspcoop2.protocol.sdk.Context;
  44. import org.openspcoop2.protocol.sdk.state.RequestInfo;
  45. import org.openspcoop2.utils.MapKey;

  46. /**    
  47.  * InfoConfigurazione
  48.  *
  49.  * @author Poli Andrea (poli@link.it)
  50.  * @author $Author$
  51.  * @version $Rev$, $Date$
  52.  */
  53. public class InfoConfigurazione implements Serializable {

  54.     /**
  55.      *
  56.      */
  57.     private static final long serialVersionUID = 1L;

  58.     protected static final String KEYS_SEPARATOR = ",";
  59.     protected static final String PROPERTY_SEPARATOR = " ";
  60.     protected static final String VALUE_SEPARATOR = "=";
  61.    
  62.     private Map<String, String> context = new HashMap<>();
  63.    
  64.     private Map<String, String> apiImplProperties = new HashMap<>();
  65.    
  66.     private Map<String, String> soggettoFruitoreProperties = new HashMap<>();
  67.     private Map<String, String> soggettoErogatoreProperties = new HashMap<>();
  68.    
  69.     private Map<String, String> applicativoFruitoreProperties = new HashMap<>();
  70.    
  71.     private Map<String, String> tokenClientApplicationProperties = new HashMap<>();
  72.     private Map<String, String> tokenClientOrganizationProperties = new HashMap<>();
  73.    
  74.     private String nomeConnettoriMultipli = null;
  75.    
  76.     public InfoConfigurazione(Transazione transazioneDTO, Context contextGateway, CredenzialiMittente credenzialiMittente) {
  77.        
  78.         if(contextGateway!=null && !contextGateway.isEmpty()) {
  79.             for (MapKey<String> key : contextGateway.keys()) {
  80.                 Object o = contextGateway.getObject(key);
  81.                 if(o!=null && o instanceof String) {
  82.                     String s = (String) o;
  83.                     this.context.put(key.getValue(), s);
  84.                 }
  85.             }
  86.         }
  87.        
  88.        
  89.         ConfigurazionePdDManager configurazionePdDManager = ConfigurazionePdDManager.getInstance();
  90.         RegistroServiziManager registroServiziManager = RegistroServiziManager.getInstance();
  91.                    
  92.         IDSoggetto idSoggettoFruitore = null;
  93.         IDSoggetto idSoggettoErogatore = null;
  94.        
  95.         RequestInfo requestInfo = null;
  96.        
  97.         if(contextGateway!=null) {
  98.            
  99.             this.nomeConnettoriMultipli = TransazioneUtilities.getConnettoriMultipli(contextGateway);
  100.            
  101.             if(contextGateway.containsKey(Costanti.REQUEST_INFO)) {
  102.                 try {
  103.                     requestInfo = (RequestInfo) contextGateway.getObject(Costanti.REQUEST_INFO);                    
  104.                     if(requestInfo.getProtocolContext()!=null) {
  105.                         String nomePorta = requestInfo.getProtocolContext().getInterfaceName();
  106.                         if(PddRuolo.DELEGATA.equals(transazioneDTO.getPddRuolo())) {
  107.                             IDPortaDelegata idPD = new IDPortaDelegata();
  108.                             idPD.setNome(nomePorta);
  109.                             PortaDelegata pd = configurazionePdDManager.getPortaDelegataSafeMethod(idPD, requestInfo);
  110.                             if(pd!=null) {
  111.                                
  112.                                 idSoggettoFruitore = new IDSoggetto(pd.getTipoSoggettoProprietario(), pd.getNomeSoggettoProprietario());
  113.                                 idSoggettoErogatore = new IDSoggetto(pd.getSoggettoErogatore().getTipo(), pd.getSoggettoErogatore().getNome());
  114.                                
  115.                                 if(pd.sizeProprietaList()>0) {
  116.                                     for (Proprieta prop : pd.getProprietaList()) {
  117.                                         if(prop.getNome()!=null && prop.getValore()!=null) {
  118.                                             this.apiImplProperties.put(prop.getNome(), prop.getValore());
  119.                                         }
  120.                                     }
  121.                                 }
  122.                             }
  123.                         }
  124.                         else {
  125.                             IDPortaApplicativa idPA = new IDPortaApplicativa();
  126.                             idPA.setNome(nomePorta);
  127.                             PortaApplicativa pa = configurazionePdDManager.getPortaApplicativaSafeMethod(idPA, requestInfo);
  128.                             if(pa!=null) {
  129.                                
  130.                                 idSoggettoErogatore = new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario());
  131.                                
  132.                                 if(pa.sizeProprietaList()>0) {
  133.                                     for (Proprieta prop : pa.getProprietaList()) {
  134.                                         if(prop.getNome()!=null && prop.getValore()!=null) {
  135.                                             this.apiImplProperties.put(prop.getNome(), prop.getValore());
  136.                                         }
  137.                                     }
  138.                                 }
  139.                             }
  140.                         }
  141.                     }
  142.                 }catch(Throwable t) {}
  143.             }
  144.         }
  145.        
  146.         if(idSoggettoFruitore==null && transazioneDTO.getTipoSoggettoFruitore()!=null && transazioneDTO.getNomeSoggettoFruitore()!=null) {
  147.             idSoggettoFruitore = new IDSoggetto(transazioneDTO.getTipoSoggettoFruitore(), transazioneDTO.getNomeSoggettoFruitore());
  148.         }
  149.         if(idSoggettoFruitore!=null) {
  150.             try {
  151.                 Soggetto soggetto = registroServiziManager.getSoggetto(idSoggettoFruitore, null, requestInfo);
  152.                 if(soggetto.sizeProprietaList()>0) {
  153.                     for (org.openspcoop2.core.registry.Proprieta prop : soggetto.getProprietaList()) {
  154.                         if(prop.getNome()!=null && prop.getValore()!=null) {
  155.                             this.soggettoFruitoreProperties.put(prop.getNome(), prop.getValore());
  156.                         }
  157.                     }
  158.                 }
  159.             }catch(Throwable t) {}
  160.            
  161.             if(transazioneDTO.getServizioApplicativoFruitore()!=null) {
  162.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  163.                 idSA.setNome(transazioneDTO.getServizioApplicativoFruitore());
  164.                 idSA.setIdSoggettoProprietario(idSoggettoFruitore);
  165.                 try {
  166.                     ServizioApplicativo sa = configurazionePdDManager.getServizioApplicativo(idSA, requestInfo);
  167.                     if(sa.sizeProprietaList()>0) {
  168.                         for (Proprieta prop : sa.getProprietaList()) {
  169.                             if(prop.getNome()!=null && prop.getValore()!=null) {
  170.                                 this.applicativoFruitoreProperties.put(prop.getNome(), prop.getValore());
  171.                             }
  172.                         }
  173.                     }
  174.                 }catch(Throwable t) {}
  175.             }
  176.         }
  177.        
  178.         if(idSoggettoErogatore==null && transazioneDTO.getTipoSoggettoErogatore()!=null && transazioneDTO.getNomeSoggettoErogatore()!=null) {
  179.             idSoggettoErogatore = new IDSoggetto(transazioneDTO.getTipoSoggettoErogatore(), transazioneDTO.getNomeSoggettoErogatore());
  180.         }
  181.         if(idSoggettoErogatore!=null) {
  182.             try {
  183.                 Soggetto soggetto = registroServiziManager.getSoggetto(idSoggettoErogatore, null, requestInfo);
  184.                 if(soggetto.sizeProprietaList()>0) {
  185.                     for (org.openspcoop2.core.registry.Proprieta prop : soggetto.getProprietaList()) {
  186.                         if(prop.getNome()!=null && prop.getValore()!=null) {
  187.                             this.soggettoErogatoreProperties.put(prop.getNome(), prop.getValore());
  188.                         }
  189.                     }
  190.                 }
  191.             }catch(Throwable t) {}
  192.         }
  193.        
  194.         try {
  195.             IDServizioApplicativo tokenClientApplication = credenzialiMittente!=null && credenzialiMittente.getTokenClientId()!=null ? CredenzialeTokenClient.convertApplicationDBValueToOriginal(credenzialiMittente.getTokenClientId().getCredenziale()) : null;
  196.             if(tokenClientApplication!=null && tokenClientApplication.getNome()!=null && tokenClientApplication.getIdSoggettoProprietario()!=null &&
  197.                     tokenClientApplication.getIdSoggettoProprietario().getTipo()!=null && tokenClientApplication.getIdSoggettoProprietario().getNome()!=null) {
  198.                 try {
  199.                     ServizioApplicativo sa = configurazionePdDManager.getServizioApplicativo(tokenClientApplication, requestInfo);
  200.                     if(sa.sizeProprietaList()>0) {
  201.                         for (Proprieta prop : sa.getProprietaList()) {
  202.                             if(prop.getNome()!=null && prop.getValore()!=null) {
  203.                                 this.tokenClientApplicationProperties.put(prop.getNome(), prop.getValore());
  204.                             }
  205.                         }
  206.                     }
  207.                 }catch(Throwable t) {}
  208.                 try {
  209.                     Soggetto soggetto = registroServiziManager.getSoggetto(tokenClientApplication.getIdSoggettoProprietario(), null, requestInfo);
  210.                     if(soggetto.sizeProprietaList()>0) {
  211.                         for (org.openspcoop2.core.registry.Proprieta prop : soggetto.getProprietaList()) {
  212.                             if(prop.getNome()!=null && prop.getValore()!=null) {
  213.                                 this.tokenClientOrganizationProperties.put(prop.getNome(), prop.getValore());
  214.                             }
  215.                         }
  216.                     }
  217.                 }catch(Throwable t) {}
  218.             }
  219.         }catch(Throwable t) {}
  220.     }
  221.    
  222.     public String getContextProperty(String nome) {
  223.         return _getProperty(this.context, nome);
  224.     }
  225.     public Map<String, String> getContextProperties(String nome) {
  226.         return this.context;
  227.     }
  228.     public List<String> getContextPropertiesKeys(){
  229.         return _getPropertiesKeys(this.context);
  230.     }
  231.     public String getContextPropertiesKeysAsString(String separator){
  232.         return _getPropertiesKeysAsString(this.context, separator);
  233.     }
  234.     public String getContextPropertiesAsString(String propertySeparator, String valueSeparator){
  235.         return _getPropertiesAsString(this.context, propertySeparator, valueSeparator);
  236.     }
  237.    
  238.     public String getApiImplProperty(String nome) {
  239.         return _getProperty(this.apiImplProperties, nome);
  240.     }
  241.     public Map<String, String> getApiImplProperties(String nome) {
  242.         return this.apiImplProperties;
  243.     }
  244.     public List<String> getApiImplPropertiesKeys(){
  245.         return _getPropertiesKeys(this.apiImplProperties);
  246.     }
  247.     public String getApiImplPropertiesKeysAsString(String separator){
  248.         return _getPropertiesKeysAsString(this.apiImplProperties, separator);
  249.     }
  250.     public String getApiImplPropertiesAsString(String propertySeparator, String valueSeparator){
  251.         return _getPropertiesAsString(this.apiImplProperties, propertySeparator, valueSeparator);
  252.     }
  253.    
  254.     public String getSenderProperty(String nome) {
  255.         return _getProperty(this.soggettoFruitoreProperties, nome);
  256.     }
  257.     public Map<String, String> getSenderProperties(String nome) {
  258.         return this.soggettoFruitoreProperties;
  259.     }
  260.     public List<String> getSenderPropertiesKeys(){
  261.         return _getPropertiesKeys(this.soggettoFruitoreProperties);
  262.     }
  263.     public String getSenderPropertiesKeysAsString(String separator){
  264.         return _getPropertiesKeysAsString(this.soggettoFruitoreProperties, separator);
  265.     }
  266.     public String getSenderPropertiesAsString(String propertySeparator, String valueSeparator){
  267.         return _getPropertiesAsString(this.soggettoFruitoreProperties, propertySeparator, valueSeparator);
  268.     }
  269.    
  270.     public String getProviderProperty(String nome) {
  271.         return _getProperty(this.soggettoErogatoreProperties, nome);
  272.     }
  273.     public Map<String, String> getProviderProperties(String nome) {
  274.         return this.soggettoErogatoreProperties;
  275.     }
  276.     public List<String> getProviderPropertiesKeys(){
  277.         return _getPropertiesKeys(this.soggettoErogatoreProperties);
  278.     }
  279.     public String getProviderPropertiesKeysAsString(String separator){
  280.         return _getPropertiesKeysAsString(this.soggettoErogatoreProperties, separator);
  281.     }
  282.     public String getProviderPropertiesAsString(String propertySeparator, String valueSeparator){
  283.         return _getPropertiesAsString(this.soggettoErogatoreProperties, propertySeparator, valueSeparator);
  284.     }
  285.    
  286.     public String getApplicationProperty(String nome) {
  287.         return _getProperty(this.applicativoFruitoreProperties, nome);
  288.     }
  289.     public Map<String, String> getApplicationProperties(String nome) {
  290.         return this.applicativoFruitoreProperties;
  291.     }
  292.     public List<String> getApplicationPropertiesKeys(){
  293.         return _getPropertiesKeys(this.applicativoFruitoreProperties);
  294.     }
  295.     public String getApplicationPropertiesKeysAsString(String separator){
  296.         return _getPropertiesKeysAsString(this.applicativoFruitoreProperties, separator);
  297.     }
  298.     public String getApplicationPropertiesAsString(String propertySeparator, String valueSeparator){
  299.         return _getPropertiesAsString(this.applicativoFruitoreProperties, propertySeparator, valueSeparator);
  300.     }
  301.    
  302.     public String getTokenClientApplicationProperty(String nome) {
  303.         return _getProperty(this.tokenClientApplicationProperties, nome);
  304.     }
  305.     public Map<String, String> getTokenClientApplicationProperties(String nome) {
  306.         return this.tokenClientApplicationProperties;
  307.     }
  308.     public List<String> getTokenClientApplicationPropertiesKeys(){
  309.         return _getPropertiesKeys(this.tokenClientApplicationProperties);
  310.     }
  311.     public String getTokenClientApplicationPropertiesKeysAsString(String separator){
  312.         return _getPropertiesKeysAsString(this.tokenClientApplicationProperties, separator);
  313.     }
  314.     public String getTokenClientApplicationPropertiesAsString(String propertySeparator, String valueSeparator){
  315.         return _getPropertiesAsString(this.tokenClientApplicationProperties, propertySeparator, valueSeparator);
  316.     }
  317.    
  318.     public String getTokenClientOrganizationProperty(String nome) {
  319.         return _getProperty(this.tokenClientOrganizationProperties, nome);
  320.     }
  321.     public Map<String, String> getTokenClientOrganizationProperties(String nome) {
  322.         return this.tokenClientOrganizationProperties;
  323.     }
  324.     public List<String> getTokenClientOrganizationPropertiesKeys(){
  325.         return _getPropertiesKeys(this.tokenClientOrganizationProperties);
  326.     }
  327.     public String getTokenClientOrganizationPropertiesKeysAsString(String separator){
  328.         return _getPropertiesKeysAsString(this.tokenClientOrganizationProperties, separator);
  329.     }
  330.     public String getTokenClientOrganizationPropertiesAsString(String propertySeparator, String valueSeparator){
  331.         return _getPropertiesAsString(this.tokenClientOrganizationProperties, propertySeparator, valueSeparator);
  332.     }
  333.    
  334.    
  335.     public String getOutConnectorName() {
  336.         return this.nomeConnettoriMultipli;
  337.     }
  338.    
  339.    
  340.     private String _getProperty(Map<String, String> p, String nome) {
  341.         if(p!=null) {
  342.             return p.get(nome);
  343.         }
  344.         return null;
  345.     }
  346.     private List<String> _getPropertiesKeys(Map<String, String> p){
  347.         if(p!=null && !p.isEmpty()) {
  348.             List<String> l = new ArrayList<>();
  349.             l.addAll(p.keySet());
  350.             return l;
  351.         }
  352.         return null;
  353.     }
  354.     private String _getPropertiesKeysAsString(Map<String, String> p, String separator){
  355.         if(p!=null && !p.isEmpty()) {
  356.             StringBuilder sb = new StringBuilder();
  357.             for (String key : p.keySet()) {
  358.                 if(sb.length()>0) {
  359.                     sb.append(separator);
  360.                 }
  361.                 sb.append(key);
  362.             }
  363.             return sb.toString();
  364.         }
  365.         return null;
  366.     }
  367.     private String _getPropertiesAsString(Map<String, String> p, String propertySeparator, String valueSeparator ){
  368.         if(p!=null && !p.isEmpty()) {
  369.             StringBuilder sb = new StringBuilder();
  370.             for (String key : p.keySet()) {
  371.                 if(sb.length()>0) {
  372.                     sb.append(propertySeparator);
  373.                 }
  374.                 sb.append(key);
  375.                 sb.append(valueSeparator);
  376.                 sb.append(p.get(key));
  377.             }
  378.             return sb.toString();
  379.         }
  380.         return null;
  381.     }
  382.    
  383. }