RuoliApiServiceImpl.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.core.config.rs.server.api.impl.ruoli;

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

  23. import org.apache.commons.lang.StringEscapeUtils;
  24. import org.openspcoop2.core.commons.Filtri;
  25. import org.openspcoop2.core.commons.Liste;
  26. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  27. import org.openspcoop2.core.config.rs.server.api.RuoliApi;
  28. import org.openspcoop2.core.config.rs.server.api.impl.Enums;
  29. import org.openspcoop2.core.config.rs.server.api.impl.Helper;
  30. import org.openspcoop2.core.config.rs.server.config.ServerProperties;
  31. import org.openspcoop2.core.config.rs.server.model.ContestoEnum;
  32. import org.openspcoop2.core.config.rs.server.model.FonteEnum;
  33. import org.openspcoop2.core.config.rs.server.model.ListaRuoli;
  34. import org.openspcoop2.core.config.rs.server.model.Ruolo;
  35. import org.openspcoop2.core.id.IDRuolo;
  36. import org.openspcoop2.utils.service.BaseImpl;
  37. import org.openspcoop2.utils.service.authorization.AuthorizationConfig;
  38. import org.openspcoop2.utils.service.authorization.AuthorizationManager;
  39. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  40. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  41. import org.openspcoop2.utils.service.context.IContext;
  42. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  43. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  44. import org.openspcoop2.web.ctrlstat.servlet.ruoli.RuoliUtilities;
  45. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  46. /**
  47.  * RuoliApiServiceImpl
  48.  *
  49.  * @author $Author$
  50.  * @version $Rev$, $Date$
  51.  *
  52.  */
  53. public class RuoliApiServiceImpl extends BaseImpl implements RuoliApi {

  54.     public RuoliApiServiceImpl(){
  55.         super(org.slf4j.LoggerFactory.getLogger(RuoliApiServiceImpl.class));
  56.     }

  57.     private AuthorizationConfig getAuthorizationConfig() throws Exception{
  58.         return new AuthorizationConfig(ServerProperties.getInstance().getProperties());
  59.     }

  60.     /**
  61.      * Creazione di un ruolo
  62.      *
  63.      * Questa operazione consente di creare un ruolo
  64.      *
  65.      */
  66.     @Override
  67.     public void createRuolo(Ruolo body) {
  68.         IContext context = this.getContext();
  69.         try {
  70.             context.getLogger().info("Invocazione in corso ...");    

  71.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  72.             context.getLogger().debug("Autorizzazione completata con successo");
  73.            
  74.             BaseHelper.throwIfNull(body);
  75.                        
  76.             Ruolo ruolo = body;
  77.                    
  78.             RuoliEnv env = new RuoliEnv(context.getServletRequest(),context);
  79.             RuoliApiHelper.overrideRuoloParams(ruolo, env.requestWrapper);
  80.            
  81.             org.openspcoop2.core.registry.Ruolo regRuolo = null;
  82.             try {
  83.                 regRuolo = RuoliApiHelper.apiRuoloToRuoloRegistro(ruolo, env.userLogin);
  84.             } catch (Exception e) {
  85.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(e.getMessage());
  86.             }
  87.            
  88.             if(env.ruoliCore.existsRuolo(ruolo.getNome())){
  89.                 throw FaultCode.CONFLITTO.toException("Un ruolo con nome '" + ruolo.getNome() + "' risulta giĆ  stato registrato");
  90.             }
  91.            
  92.             if (!env.ruoliHelper.ruoloCheckData(TipoOperazione.ADD, null)) {
  93.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  94.             }
  95.            
  96.             env.ruoliCore.performCreateOperation(env.userLogin, false, regRuolo);          
  97.        
  98.             context.getLogger().info("Invocazione completata con successo");
  99.        
  100.             // Bug Fix: altrimenti viene generato 204
  101.             context.getServletResponse().setStatus(201);
  102.         }
  103.         catch(javax.ws.rs.WebApplicationException e) {
  104.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  105.             throw e;
  106.         }
  107.         catch(Throwable e) {
  108.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  109.             throw FaultCode.ERRORE_INTERNO.toException(e);
  110.         }
  111.     }
  112.    
  113.     /**
  114.      * Elimina un ruolo
  115.      *
  116.      * Questa operazione consente di eliminare un ruolo identificato dal nome
  117.      *
  118.      */
  119.     @Override
  120.     public void deleteRuolo(String nome) {
  121.         IContext context = this.getContext();
  122.         try {
  123.             context.getLogger().info("Invocazione in corso ...");    

  124.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  125.             context.getLogger().debug("Autorizzazione completata con successo");    
  126.                        
  127.             String userLogin = context.getAuthentication().getName();
  128.             RuoliEnv rEnv = new RuoliEnv(context.getServletRequest(),context);
  129.                        
  130.             final org.openspcoop2.core.registry.Ruolo regRuolo = BaseHelper.evalnull( () -> rEnv.ruoliCore.getRuolo(nome) );
  131.            
  132.             if ( regRuolo != null ) {
  133.                 StringBuilder inUsoMessage = new StringBuilder();
  134.                 RuoliUtilities.deleteRuolo(regRuolo, userLogin, rEnv.ruoliCore, rEnv.ruoliHelper, inUsoMessage, System.lineSeparator());
  135.                
  136.                 if (inUsoMessage.length() > 0) {
  137.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
  138.                 }
  139.             }
  140.            
  141.             if (rEnv.delete_404 && regRuolo == null) {
  142.                 throw FaultCode.NOT_FOUND.toException("Nessun ruolo corrisponde al nome indicato");
  143.             }
  144.    
  145.             context.getLogger().info("Invocazione completata con successo");
  146.         }
  147.         catch(javax.ws.rs.WebApplicationException e) {
  148.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  149.             throw e;
  150.         }
  151.         catch(Throwable e) {
  152.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  153.             throw FaultCode.ERRORE_INTERNO.toException(e);
  154.         }
  155.     }
  156.    
  157.     /**
  158.      * Ricerca ruoli
  159.      *
  160.      * Elenca i ruoli registrati
  161.      *
  162.      */
  163.     @Override
  164.     public ListaRuoli findAllRuoli(String q, Integer limit, Integer offset, FonteEnum fonte, ContestoEnum contesto) {
  165.         IContext context = this.getContext();
  166.         try {
  167.             context.getLogger().info("Invocazione in corso ...");    

  168.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  169.             context.getLogger().debug("Autorizzazione completata con successo");    
  170.            
  171.             RuoliEnv rEnv = new RuoliEnv(context.getServletRequest(), context);
  172.                        
  173.             int idLista = Liste.RUOLI;
  174.             ConsoleSearch ricerca =  Helper.setupRicercaPaginata(q, limit, offset, idLista);
  175.            
  176.             if (fonte != null)
  177.                 ricerca.addFilter(idLista, Filtri.FILTRO_RUOLO_TIPOLOGIA, Enums.apiFonteToRegistroTipologia(fonte).toString());
  178.             if (contesto != null)
  179.                 ricerca.addFilter(idLista, Filtri.FILTRO_RUOLO_CONTESTO, Enums.apiContestoToRegistroContesto(contesto).toString());


  180.             List<org.openspcoop2.core.registry.Ruolo> lista = new ArrayList<>();
  181.             try {
  182.                 lista = rEnv.ruoliCore.ruoliList(null, ricerca);
  183.             } catch (Exception e) {
  184.                 throw FaultCode.NOT_FOUND.toException(e.getMessage());
  185.             }          
  186.            
  187.            
  188.             if ( rEnv.findall_404 && lista.isEmpty() ) {
  189.                 throw FaultCode.NOT_FOUND.toException("Nessun ruolo corrisponde ai criteri di ricerca specificati");
  190.             }
  191.            
  192.             final ListaRuoli ret = ListaUtils.costruisciListaPaginata(
  193.                     context.getUriInfo(),
  194.                     ricerca.getIndexIniziale(idLista),
  195.                     ricerca.getPageSize(idLista),
  196.                     ricerca.getNumEntries(idLista),
  197.                     ListaRuoli.class
  198.                 );
  199.            
  200.             lista.forEach( regRuolo -> ret.addItemsItem(
  201.                     RuoliApiHelper.ruoloApiToRuoloItem(RuoliApiHelper.ruoloRegistroToApiRuolo(regRuolo))
  202.                     )
  203.             );
  204.            
  205.             context.getLogger().info("Invocazione completata con successo");
  206.             return ret;
  207.         }
  208.         catch(javax.ws.rs.WebApplicationException e) {
  209.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  210.             throw e;
  211.         }
  212.         catch(Throwable e) {
  213.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  214.             throw FaultCode.ERRORE_INTERNO.toException(e);
  215.         }
  216.     }
  217.    
  218.     /**
  219.      * Restituisce il dettaglio di un ruolo
  220.      *
  221.      * Questa operazione consente di ottenere il dettaglio di un ruolo identificato dal nome
  222.      *
  223.      */
  224.     @Override
  225.     public Ruolo getRuolo(String nome) {
  226.         IContext context = this.getContext();
  227.         try {
  228.             context.getLogger().info("Invocazione in corso ...");    

  229.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  230.             context.getLogger().debug("Autorizzazione completata con successo");    
  231.                        
  232.             RuoliEnv rEnv = new RuoliEnv(context.getServletRequest(), context);
  233.            
  234.             org.openspcoop2.core.registry.Ruolo regRuolo = null;
  235.             try {
  236.                 regRuolo = rEnv.ruoliCore.getRuolo(nome);
  237.             } catch (DriverConfigurazioneException e) { }
  238.            
  239.             if (regRuolo == null) {
  240.                 throw FaultCode.NOT_FOUND.toException("Non esiste nessun ruolo con nome " + nome);
  241.             }
  242.        
  243.             context.getLogger().info("Invocazione completata con successo");
  244.             return RuoliApiHelper.ruoloRegistroToApiRuolo(regRuolo);    
  245.         }
  246.         catch(javax.ws.rs.WebApplicationException e) {
  247.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  248.             throw e;
  249.         }
  250.         catch(Throwable e) {
  251.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  252.             throw FaultCode.ERRORE_INTERNO.toException(e);
  253.         }
  254.     }
  255.    
  256.     /**
  257.      * Modifica i dati di un ruolo
  258.      *
  259.      * Questa operazione consente di aggiornare i dati di un ruolo identificato dal nome
  260.      *
  261.      */
  262.     @Override
  263.     public void updateRuolo(Ruolo body, String nome) {
  264.         IContext context = this.getContext();
  265.         try {
  266.             context.getLogger().info("Invocazione in corso ...");    

  267.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  268.             context.getLogger().debug("Autorizzazione completata con successo");
  269.            
  270.             BaseHelper.throwIfNull(body);
  271.                                
  272.             RuoliEnv rEnv = new RuoliEnv(context.getServletRequest(), context);
  273.             RuoliApiHelper.overrideRuoloParams(body, rEnv.requestWrapper);
  274.            
  275.             org.openspcoop2.core.registry.Ruolo oldRuolo = null;
  276.             try {
  277.                 oldRuolo = rEnv.ruoliCore.getRuolo(nome);
  278.             } catch (Exception e) {
  279.                 // ignore
  280.             }
  281.             if (oldRuolo == null) throw FaultCode.NOT_FOUND.toException("Nessun ruolo da aggiornare corrisponde al nome: " + nome);
  282.            
  283.             org.openspcoop2.core.registry.Ruolo ruoloNEW = RuoliApiHelper.apiRuoloToRuoloRegistro(body, rEnv.userLogin);
  284.             ruoloNEW.setOldIDRuoloForUpdate(new IDRuolo(oldRuolo.getNome()));   // Qui nella versione della controlstation parte dal nuovo nome assumendo che siano identici.
  285.            
  286.             if (!rEnv.ruoliHelper.ruoloCheckData(TipoOperazione.CHANGE, oldRuolo)) {
  287.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(rEnv.pd.getMessage()));
  288.             }

  289.             List<Object> listOggettiDaAggiornare = new ArrayList<>();
  290.             listOggettiDaAggiornare.add(ruoloNEW);
  291.            
  292.             if(oldRuolo.getNome().equals(ruoloNEW.getNome())==false) {                  
  293.                 IDRuolo oldIdRuolo = ruoloNEW.getOldIDRuoloForUpdate();
  294.                 oldIdRuolo.setNome(nome);
  295.                
  296.                 RuoliUtilities.findOggettiDaAggiornare(oldIdRuolo, ruoloNEW, rEnv.ruoliCore, listOggettiDaAggiornare);
  297.             }
  298.            
  299.             rEnv.ruoliCore.performUpdateOperation(rEnv.userLogin, false, listOggettiDaAggiornare.toArray());
  300.             context.getLogger().info("Invocazione completata con successo");
  301.         }
  302.         catch(javax.ws.rs.WebApplicationException e) {
  303.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  304.             throw e;
  305.         }
  306.         catch(Throwable e) {
  307.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  308.             throw FaultCode.ERRORE_INTERNO.toException(e);
  309.         }
  310.     }

  311.    
  312.    
  313. }