RuoliUtilities.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.web.ctrlstat.servlet.ruoli;

  21. import java.util.ArrayList;
  22. import java.util.HashMap;
  23. import java.util.List;

  24. import org.openspcoop2.core.commons.ErrorsHandlerCostant;
  25. import org.openspcoop2.core.config.PortaApplicativa;
  26. import org.openspcoop2.core.config.PortaDelegata;
  27. import org.openspcoop2.core.config.ServizioApplicativo;
  28. import org.openspcoop2.core.config.driver.FiltroRicercaPorteApplicative;
  29. import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
  30. import org.openspcoop2.core.config.driver.FiltroRicercaServiziApplicativi;
  31. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  32. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  33. import org.openspcoop2.core.id.IDPortaApplicativa;
  34. import org.openspcoop2.core.id.IDPortaDelegata;
  35. import org.openspcoop2.core.id.IDRuolo;
  36. import org.openspcoop2.core.id.IDServizioApplicativo;
  37. import org.openspcoop2.core.id.IDSoggetto;
  38. import org.openspcoop2.core.registry.Ruolo;
  39. import org.openspcoop2.core.registry.Soggetto;
  40. import org.openspcoop2.core.registry.driver.FiltroRicercaSoggetti;
  41. import org.openspcoop2.protocol.engine.utils.DBOggettiInUsoUtils;
  42. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  43. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  44. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
  45. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
  46. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
  47. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;

  48. /**
  49.  * RuoliUtilities
  50.  *
  51.  * @author Andrea Poli (apoli@link.it)
  52.  * @author $Author$
  53.  * @version $Rev$, $Date$
  54.  *
  55.  */
  56. public class RuoliUtilities {

  57.     public static void findOggettiDaAggiornare(IDRuolo oldIdRuolo, Ruolo ruoloNEW, RuoliCore ruoliCore, List<Object> listOggettiDaAggiornare) throws Exception {
  58.        
  59.        
  60.         // Cerco se utilizzato in soggetti
  61.         SoggettiCore soggettiCore = new SoggettiCore(ruoliCore);
  62.         FiltroRicercaSoggetti filtroRicercaSoggetti = new FiltroRicercaSoggetti();
  63.         filtroRicercaSoggetti.setIdRuolo(oldIdRuolo);
  64.         List<IDSoggetto> listSoggetti = soggettiCore.getAllIdSoggettiRegistro(filtroRicercaSoggetti);
  65.         if(listSoggetti!=null && listSoggetti.size()>0){
  66.             for (IDSoggetto idSoggettoWithRuolo : listSoggetti) {
  67.                 Soggetto soggettoWithRuolo = soggettiCore.getSoggettoRegistro(idSoggettoWithRuolo);
  68.                 if(soggettoWithRuolo.getRuoli()!=null){
  69.                     for (org.openspcoop2.core.registry.RuoloSoggetto ruoloSoggetto : soggettoWithRuolo.getRuoli().getRuoloList()) {
  70.                         if(ruoloSoggetto.getNome().equals(oldIdRuolo.getNome())){
  71.                             ruoloSoggetto.setNome(ruoloNEW.getNome());
  72.                         }
  73.                     }
  74.                 }
  75.                 listOggettiDaAggiornare.add(soggettoWithRuolo);
  76.             }
  77.         }
  78.        
  79.        
  80.        
  81.        
  82.         // Cerco se utilizzato in servizi applicativi
  83.         ServiziApplicativiCore saCore = new ServiziApplicativiCore(ruoliCore);
  84.         FiltroRicercaServiziApplicativi filtroRicercaSA = new FiltroRicercaServiziApplicativi();
  85.         filtroRicercaSA.setIdRuolo(oldIdRuolo);
  86.         List<IDServizioApplicativo> listSA = saCore.getAllIdServiziApplicativi(filtroRicercaSA);
  87.         if(listSA!=null && listSA.size()>0){
  88.             for (IDServizioApplicativo idServizioApplicativo : listSA) {
  89.                 ServizioApplicativo sa = saCore.getServizioApplicativo(idServizioApplicativo);
  90.                 if(sa.getInvocazionePorta()!=null && sa.getInvocazionePorta().getRuoli()!=null){
  91.                     for (org.openspcoop2.core.config.Ruolo ruoloConfig : sa.getInvocazionePorta().getRuoli().getRuoloList()) {
  92.                         if(ruoloConfig.getNome().equals(oldIdRuolo.getNome())){
  93.                             ruoloConfig.setNome(ruoloNEW.getNome());
  94.                         }
  95.                     }
  96.                 }
  97.                 listOggettiDaAggiornare.add(sa);
  98.             }
  99.         }
  100.        
  101.        
  102.         // Cerco se utilizzato in porte delegate
  103.         PorteDelegateCore pdCore = new PorteDelegateCore(ruoliCore);
  104.        
  105.         List<PortaDelegata> listPDdaAggiornare = new ArrayList<PortaDelegata>();
  106.        
  107.         FiltroRicercaPorteDelegate filtroRicercaPD = new FiltroRicercaPorteDelegate();
  108.         filtroRicercaPD.setIdRuolo(oldIdRuolo);
  109.         List<IDPortaDelegata> _listPD = pdCore.getAllIdPorteDelegate(filtroRicercaPD);
  110.         if(_listPD!=null && _listPD.size()>0){
  111.             for (IDPortaDelegata idPD : _listPD) {
  112.                 PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPD);
  113.                 if(portaDelegata.getRuoli()!=null){
  114.                     for (org.openspcoop2.core.config.Ruolo ruoloConfig : portaDelegata.getRuoli().getRuoloList()) {
  115.                         if(ruoloConfig.getNome().equals(oldIdRuolo.getNome())){
  116.                             ruoloConfig.setNome(ruoloNEW.getNome());
  117.                         }
  118.                     }
  119.                 }
  120.                 if(portaDelegata.getAutorizzazioneToken()!=null && portaDelegata.getAutorizzazioneToken().getRuoli()!=null){
  121.                     for (org.openspcoop2.core.config.Ruolo ruoloConfig : portaDelegata.getAutorizzazioneToken().getRuoli().getRuoloList()) {
  122.                         if(ruoloConfig.getNome().equals(oldIdRuolo.getNome())){
  123.                             ruoloConfig.setNome(ruoloNEW.getNome());
  124.                         }
  125.                     }
  126.                 }
  127.                 listPDdaAggiornare.add(portaDelegata);
  128.             }
  129.         }
  130.        
  131.         filtroRicercaPD = new FiltroRicercaPorteDelegate();
  132.         filtroRicercaPD.setIdRuoloToken(oldIdRuolo);
  133.         _listPD = pdCore.getAllIdPorteDelegate(filtroRicercaPD);
  134.         if(_listPD!=null && _listPD.size()>0){
  135.             for (IDPortaDelegata idPD : _listPD) {
  136.                 boolean find = false;
  137.                 if(listPDdaAggiornare!=null && !listPDdaAggiornare.isEmpty()) {
  138.                     for (PortaDelegata pd : listPDdaAggiornare) {
  139.                         if(pd.getNome().equals(idPD.getNome())) {
  140.                             find = true;
  141.                             break;
  142.                         }
  143.                     }
  144.                 }
  145.                 if(!find) {
  146.                     PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPD);
  147.                     if(portaDelegata.getRuoli()!=null){
  148.                         for (org.openspcoop2.core.config.Ruolo ruoloConfig : portaDelegata.getRuoli().getRuoloList()) {
  149.                             if(ruoloConfig.getNome().equals(oldIdRuolo.getNome())){
  150.                                 ruoloConfig.setNome(ruoloNEW.getNome());
  151.                             }
  152.                         }
  153.                     }
  154.                     if(portaDelegata.getAutorizzazioneToken()!=null && portaDelegata.getAutorizzazioneToken().getRuoli()!=null){
  155.                         for (org.openspcoop2.core.config.Ruolo ruoloConfig : portaDelegata.getAutorizzazioneToken().getRuoli().getRuoloList()) {
  156.                             if(ruoloConfig.getNome().equals(oldIdRuolo.getNome())){
  157.                                 ruoloConfig.setNome(ruoloNEW.getNome());
  158.                             }
  159.                         }
  160.                     }
  161.                     listPDdaAggiornare.add(portaDelegata);
  162.                 }
  163.             }
  164.         }
  165.        
  166.         if(listPDdaAggiornare!=null && !listPDdaAggiornare.isEmpty()) {
  167.             for (PortaDelegata pd : listPDdaAggiornare) {
  168.                 listOggettiDaAggiornare.add(pd);
  169.             }
  170.         }
  171.        
  172.        
  173.        
  174.         // Cerco se utilizzato in porte applicative
  175.         PorteApplicativeCore paCore = new PorteApplicativeCore(ruoliCore);
  176.        
  177.         List<PortaApplicativa> listPAdaAggiornare = new ArrayList<PortaApplicativa>();
  178.        
  179.         FiltroRicercaPorteApplicative filtroRicercaPA = new FiltroRicercaPorteApplicative();
  180.         filtroRicercaPA.setIdRuolo(oldIdRuolo);
  181.         List<IDPortaApplicativa> _listPA = paCore.getAllIdPorteApplicative(filtroRicercaPA);
  182.         if(_listPA!=null && _listPA.size()>0){
  183.             for (IDPortaApplicativa idPA : _listPA) {
  184.                 PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPA);
  185.                 if(portaApplicativa.getRuoli()!=null){
  186.                     for (org.openspcoop2.core.config.Ruolo ruoloConfig : portaApplicativa.getRuoli().getRuoloList()) {
  187.                         if(ruoloConfig.getNome().equals(oldIdRuolo.getNome())){
  188.                             ruoloConfig.setNome(ruoloNEW.getNome());
  189.                         }
  190.                     }
  191.                 }
  192.                 if(portaApplicativa.getAutorizzazioneToken()!=null && portaApplicativa.getAutorizzazioneToken().getRuoli()!=null){
  193.                     for (org.openspcoop2.core.config.Ruolo ruoloConfig : portaApplicativa.getAutorizzazioneToken().getRuoli().getRuoloList()) {
  194.                         if(ruoloConfig.getNome().equals(oldIdRuolo.getNome())){
  195.                             ruoloConfig.setNome(ruoloNEW.getNome());
  196.                         }
  197.                     }
  198.                 }
  199.                 listPAdaAggiornare.add(portaApplicativa);
  200.             }
  201.         }
  202.        
  203.         filtroRicercaPA = new FiltroRicercaPorteApplicative();
  204.         filtroRicercaPA.setIdRuoloToken(oldIdRuolo);
  205.         _listPA = paCore.getAllIdPorteApplicative(filtroRicercaPA);
  206.         if(_listPA!=null && _listPA.size()>0){
  207.             for (IDPortaApplicativa idPA : _listPA) {
  208.                 boolean find = false;
  209.                 if(listPAdaAggiornare!=null && !listPAdaAggiornare.isEmpty()) {
  210.                     for (PortaApplicativa pa : listPAdaAggiornare) {
  211.                         if(pa.getNome().equals(idPA.getNome())) {
  212.                             find = true;
  213.                             break;
  214.                         }
  215.                     }
  216.                 }
  217.                 if(!find) {
  218.                     PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPA);
  219.                     if(portaApplicativa.getRuoli()!=null){
  220.                         for (org.openspcoop2.core.config.Ruolo ruoloConfig : portaApplicativa.getRuoli().getRuoloList()) {
  221.                             if(ruoloConfig.getNome().equals(oldIdRuolo.getNome())){
  222.                                 ruoloConfig.setNome(ruoloNEW.getNome());
  223.                             }
  224.                         }
  225.                     }
  226.                     if(portaApplicativa.getAutorizzazioneToken()!=null && portaApplicativa.getAutorizzazioneToken().getRuoli()!=null){
  227.                         for (org.openspcoop2.core.config.Ruolo ruoloConfig : portaApplicativa.getAutorizzazioneToken().getRuoli().getRuoloList()) {
  228.                             if(ruoloConfig.getNome().equals(oldIdRuolo.getNome())){
  229.                                 ruoloConfig.setNome(ruoloNEW.getNome());
  230.                             }
  231.                         }
  232.                     }
  233.                     listPAdaAggiornare.add(portaApplicativa);
  234.                 }
  235.             }
  236.         }
  237.        
  238.         if(listPAdaAggiornare!=null && !listPAdaAggiornare.isEmpty()) {
  239.             for (PortaApplicativa pa : listPAdaAggiornare) {
  240.                 listOggettiDaAggiornare.add(pa);
  241.             }
  242.         }
  243.        
  244.        
  245.        
  246.         // Cerco Rate Limiting policy
  247.         ConfigurazioneCore confCore = new ConfigurazioneCore(ruoliCore);
  248.        
  249.         // Nelle erogazioni
  250.         ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
  251.         List<AttivazionePolicy> listaPolicies = null;
  252.         try {
  253.             listaPolicies = confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.APPLICATIVA, null,
  254.                     null, null, null,
  255.                     null, null,
  256.                     null, oldIdRuolo.getNome());
  257.         }catch(Exception e) {
  258.             // ignore
  259.         }
  260.         if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  261.             for (AttivazionePolicy attivazionePolicy : listaPolicies) {
  262.                 _updateAttivazionePolicy(attivazionePolicy, oldIdRuolo.getNome(), ruoloNEW.getNome());
  263.                 listOggettiDaAggiornare.add(attivazionePolicy);
  264.             }
  265.         }
  266.        
  267.         // Nelle fruizioni
  268.         ricercaPolicies = new ConsoleSearch(true);
  269.         listaPolicies = null;
  270.         try {
  271.             listaPolicies = confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.DELEGATA, null,
  272.                     null, null, null,
  273.                     null, null,
  274.                     null, oldIdRuolo.getNome());
  275.         }catch(Exception e) {
  276.             // ignore
  277.         }
  278.         if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  279.             for (AttivazionePolicy attivazionePolicy : listaPolicies) {
  280.                 _updateAttivazionePolicy(attivazionePolicy, oldIdRuolo.getNome(), ruoloNEW.getNome());
  281.                 listOggettiDaAggiornare.add(attivazionePolicy);
  282.             }
  283.         }
  284.        
  285.         // Globali
  286.         ricercaPolicies = new ConsoleSearch(true);
  287.         listaPolicies = null;
  288.         try {
  289.             listaPolicies = confCore.attivazionePolicyListByFilter(ricercaPolicies, null, null,
  290.                     null, null, null,
  291.                     null, null,
  292.                     null, oldIdRuolo.getNome());
  293.         }catch(Exception e) {
  294.             // ignore
  295.         }
  296.         if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  297.             for (AttivazionePolicy attivazionePolicy : listaPolicies) {
  298.                 _updateAttivazionePolicy(attivazionePolicy, oldIdRuolo.getNome(), ruoloNEW.getNome());
  299.                 listOggettiDaAggiornare.add(attivazionePolicy);
  300.             }
  301.         }
  302.        
  303.     }
  304.    
  305.     private static void _updateAttivazionePolicy(AttivazionePolicy policy, String oldNomeRuolo, String nuovoNomeRuolo) {
  306.         if(policy.getFiltro()!=null) {
  307.             if(oldNomeRuolo.equals(policy.getFiltro().getRuoloFruitore())) {
  308.                 policy.getFiltro().setRuoloFruitore(nuovoNomeRuolo);
  309.             }
  310.             if(oldNomeRuolo.equals(policy.getFiltro().getRuoloErogatore())) {
  311.                 policy.getFiltro().setRuoloErogatore(nuovoNomeRuolo);
  312.             }
  313.         }
  314.     }
  315.    
  316.     public static boolean deleteRuolo(Ruolo ruolo, String userLogin, RuoliCore ruoliCore, RuoliHelper ruoliHelper, StringBuilder inUsoMessage, String newLine) throws Exception {
  317.         HashMap<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
  318.         boolean normalizeObjectIds = !ruoliHelper.isModalitaCompleta();
  319.         boolean ruoloInUso = ruoliCore.isRuoloInUso(ruolo.getNome(),whereIsInUso,normalizeObjectIds);
  320.        
  321.         if (ruoloInUso) {
  322.             inUsoMessage.append(DBOggettiInUsoUtils.toString(new IDRuolo(ruolo.getNome()), whereIsInUso, true, newLine));
  323.             inUsoMessage.append(newLine);

  324.         } else {
  325.             ruoliCore.performDeleteOperation(userLogin, ruoliHelper.smista(), ruolo);
  326.             return true;
  327.         }
  328.        
  329.         return false;
  330.     }
  331. }