UtentiDel.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.utenti;

  21. import java.util.ArrayList;
  22. import java.util.Iterator;
  23. import java.util.List;
  24. import java.util.StringTokenizer;

  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. import javax.servlet.http.HttpSession;

  28. import org.apache.struts.action.Action;
  29. import org.apache.struts.action.ActionForm;
  30. import org.apache.struts.action.ActionForward;
  31. import org.apache.struts.action.ActionMapping;
  32. import org.openspcoop2.core.commons.Liste;
  33. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  34. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  35. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  36. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  37. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  38. import org.openspcoop2.web.lib.mvc.Costanti;
  39. import org.openspcoop2.web.lib.mvc.DataElement;
  40. import org.openspcoop2.web.lib.mvc.ForwardParams;
  41. import org.openspcoop2.web.lib.mvc.GeneralData;
  42. import org.openspcoop2.web.lib.mvc.PageData;
  43. import org.openspcoop2.web.lib.mvc.Parameter;
  44. import org.openspcoop2.web.lib.mvc.ServletUtils;
  45. import org.openspcoop2.web.lib.users.dao.Permessi;
  46. import org.openspcoop2.web.lib.users.dao.User;
  47. import org.openspcoop2.web.lib.users.dao.UserObjects;

  48. /**
  49.  * suDel
  50.  *
  51.  * @author Andrea Poli (apoli@link.it)
  52.  * @author Stefano Corallo (corallo@link.it)
  53.  * @author Sandra Giangrandi (sandra@link.it)
  54.  * @author $Author$
  55.  * @version $Rev$, $Date$
  56.  *
  57.  */
  58. public final class UtentiDel extends Action {

  59.     @Override
  60.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

  61.         HttpSession session = request.getSession(true);

  62.         // Inizializzo PageData
  63.         PageData pd = new PageData();

  64.         GeneralHelper generalHelper = new GeneralHelper(session);

  65.         // Inizializzo GeneralData
  66.         GeneralData gd = generalHelper.initGeneralData(request);

  67.         String userLogin = ServletUtils.getUserLoginFromSession(session);
  68.        
  69.         try {
  70.             UtentiHelper utentiHelper = new UtentiHelper(request, pd, session);
  71.    
  72.             String objToRemove = utentiHelper.getParameter(Costanti.PARAMETER_NAME_OBJECTS_FOR_REMOVE);
  73.             String singleSuServizi = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_SINGLE_SU_SERVIZI);
  74.             String singleSuAccordiCooperazione = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_SINGLE_SU_ACCORDI_COOPERAZIONE);
  75.    
  76.             // Preparo il menu
  77.             utentiHelper.makeMenu();
  78.    
  79.             UtentiCore utentiCore = new UtentiCore();
  80.             SoggettiCore soggettiCore = new SoggettiCore(utentiCore);
  81.            
  82.             // Elimino i superutenti dal db
  83.             StringTokenizer objTok = new StringTokenizer(objToRemove, ",");
  84.             int[] idToRemove = new int[objTok.countTokens()];
  85.             List<User> utentiDaRimuovere = new ArrayList<>();
  86.             List<String> nomiUtentiDaRimuovere = new ArrayList<>();
  87.    
  88.             int k = 0;
  89.             while (objTok.hasMoreElements()) {
  90.                 String id = objTok.nextToken();
  91.                 idToRemove[k++] = Integer.parseInt(id);
  92.                 User user = utentiCore.getUser(Long.parseLong(id));
  93.                 utentiDaRimuovere.add(user);
  94.                 nomiUtentiDaRimuovere.add(user.getLogin());
  95.             }
  96.            
  97.             // controllo protocolli associati agli utenti che provo ad eliminare
  98.             String msgErroreModalita = null;
  99.             List<String> utentiDaNonEliminare = new ArrayList<>();
  100.             for (User user : utentiDaRimuovere) {
  101.                 if(!user.hasOnlyPermessiUtenti())
  102.                     utentiHelper.controlloModalitaUtenteDaEliminare(nomiUtentiDaRimuovere, utentiDaNonEliminare, user);
  103.             }
  104.            
  105.             if(!utentiDaNonEliminare.isEmpty()) {
  106.                 if(utentiDaNonEliminare.size()> 1) {
  107.                     StringBuilder sbUL = new StringBuilder();
  108.                     for (String userL : utentiDaNonEliminare) {
  109.                         if(sbUL.length() >0 )
  110.                             sbUL.append(", ");
  111.                         sbUL.append(userL);
  112.                     }
  113.                     msgErroreModalita = "Gli utenti "+sbUL.toString()+" non sono stati eliminati poich&egrave; sono stati rilevati oggetti, appartenenti a dei "+
  114.                             org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLI_DI_HTML_ESCAPE+", non assegnabili a nessun altro utente";
  115.                 } else {
  116.                     msgErroreModalita = "L'utente " +utentiDaNonEliminare.get(0) +" non &egrave; stato eliminato poich&egrave; sono stati rilevati oggetti, appartenenti a dei "+
  117.                             org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLI_DI_HTML_ESCAPE+", non assegnabili a nessun altro utente";
  118.                 }

  119.                 List<String> newList = new ArrayList<>();
  120.                 for (String uDE : nomiUtentiDaRimuovere) {
  121.                     if(utentiDaNonEliminare.contains(uDE) == false) {
  122.                         newList.add(uDE);
  123.                     }
  124.                 }
  125.                 if(newList.isEmpty()) {
  126.                     List<DataElement> dati = new ArrayList<>();
  127.                    
  128.                     dati.add(ServletUtils.getDataElementForEditModeFinished());
  129.                    
  130.                     pd.disableEditMode();
  131.                    
  132.                     pd.setDati(dati);
  133.                    
  134.                     // Preparo il menu
  135.                     pd.setMessage(msgErroreModalita);

  136.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  137.                    
  138.                     return ServletUtils.getStrutsForwardGeneralError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL());  
  139.                 }
  140.                 else {
  141.                     nomiUtentiDaRimuovere = newList;
  142.                 }
  143.             }
  144.            
  145.            
  146.            
  147.            
  148.             List<String> usersWithU = utentiCore.getUsersWithType(Permessi.UTENTI.toString());
  149.             List<String> usersWithS = utentiCore.getUsersWithType(Permessi.SERVIZI.toString());
  150.            
  151.             String[] uws = null;
  152.             if (usersWithS != null && !usersWithS.isEmpty()) {
  153.                 List<String> usersWithPermessoS = new ArrayList<>();
  154.                 Iterator<String> itUWS = usersWithS.iterator();
  155.                 while (itUWS.hasNext()) {
  156.                     String singleUWS = itUWS.next();
  157.                     if (nomiUtentiDaRimuovere.contains(singleUWS) == false) {
  158.                         // controllo compatibilita
  159.                         boolean compatibile = true;
  160.                         for (String user : nomiUtentiDaRimuovere) {
  161.                             compatibile = utentiHelper.checkUsersModalitaGatewayCompatibili(user,singleUWS);
  162.                            
  163.                             if(!compatibile)
  164.                                 break;
  165.                         }
  166.                         if(compatibile)
  167.                             usersWithPermessoS.add(singleUWS);
  168.                     }
  169.                 }
  170.                 if(!usersWithPermessoS.isEmpty()){
  171.                     uws = new String[1];
  172.                     uws = usersWithPermessoS.toArray(uws);
  173.                 }
  174.             }
  175.            
  176.             // Se singleSuAccordi = null, controllo se l'utente aveva permessi P
  177.             List<String> usersWithP = utentiCore.getUsersWithType(Permessi.ACCORDI_COOPERAZIONE.toString());
  178.            
  179.             String[] uwp = null;
  180.             if (usersWithP != null && !usersWithP.isEmpty()) {
  181.                 List<String> usersWithPermessoP = new ArrayList<>();
  182.                 Iterator<String> itUWS = usersWithP.iterator();
  183.                 while (itUWS.hasNext()) {
  184.                     String singleUWP = itUWS.next();
  185.                     if (!nomiUtentiDaRimuovere.contains(singleUWP)) {
  186.                         // controllo compatibilita
  187.                         boolean compatibile = true;
  188.                         for (String user : nomiUtentiDaRimuovere) {
  189.                             compatibile = utentiHelper.checkUsersModalitaGatewayCompatibili(user,singleUWP);
  190.                             if(!compatibile)
  191.                                 break;
  192.                         }
  193.                        
  194.                         if(compatibile)
  195.                             usersWithPermessoP.add(singleUWP);
  196.                     }
  197.                 }
  198.                 if(!usersWithPermessoP.isEmpty()){
  199.                     uwp = new String[1];
  200.                     uwp = usersWithPermessoP.toArray(uwp);
  201.                 }
  202.             }
  203.            
  204.             String nomesu  = "";
  205.    
  206.             // Se singleSu != null, controllo che il superutente non sia
  207.             // tra quelli da eliminare
  208.             // Se singleSu = null, controllo se almeno uno degli utenti da
  209.             // eliminare aveva permessi S
  210.             String msgServizi = "";
  211.             boolean paginaSuServizi = false;
  212.            
  213.             if(!utentiCore.isVisioneOggettiGlobaleIndipendenteUtente()) {
  214.                 if (singleSuServizi != null) {
  215.                     for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
  216.                         nomesu = nomiUtentiDaRimuovere.get(i);
  217.                         if (nomesu.equals(singleSuServizi)) {
  218.                             paginaSuServizi = true;
  219.                             msgServizi = "Scegliere un utente che non &egrave; stato chiesto di eliminare<br>";
  220.                             break;
  221.                         }
  222.                     }
  223.                 } else {
  224.                     for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
  225.                         nomesu = nomiUtentiDaRimuovere.get(i);
  226.                         if (usersWithS.contains(nomesu)) {
  227.                             if(uws==null){
  228.                                
  229.                                 List<DataElement> dati = new ArrayList<>();
  230.        
  231.                                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  232.                                
  233.                                 pd.disableEditMode();
  234.                                
  235.                                 pd.setDati(dati);
  236.                                
  237.                                 // Preparo il menu
  238.                                 pd.setMessage("Non è possibile eliminare l'utente '"+nomesu+"', poichè non esistono altri utenti con il permesso per la gestione dei 'Servizi'");
  239.        
  240.                                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  241.                                
  242.                                 return ServletUtils.getStrutsForwardGeneralError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL());  
  243.                                
  244.                             }else{
  245.                                 paginaSuServizi = true;
  246.                                 if(nomiUtentiDaRimuovere.size()==1){
  247.                                     msgServizi = "Scegliere un utente a cui verranno assegnati tutti gli oggetti con permessi 'Servizi' appartenenti all'utente '"+nomiUtentiDaRimuovere.get(0)+"'<br>";
  248.                                 }else{
  249.                                     StringBuilder bf = new StringBuilder();
  250.                                     for(int j=0; j<nomiUtentiDaRimuovere.size(); j++){
  251.                                         if(j>0)
  252.                                             bf.append("','");
  253.                                         bf.append(nomiUtentiDaRimuovere.get(j));
  254.                                     }
  255.                                     msgServizi = "Scegliere un utente a cui verranno assegnati tutti gli oggetti con permessi 'Servizi' appartenenti agli utenti '"+bf.toString()+"'<br>";
  256.                                 }
  257.                                 break;
  258.                             }
  259.                         }
  260.                     }
  261.                 }
  262.             }
  263.            
  264.             String msgAccordi = "";
  265.             boolean paginaSuAccordi = false;
  266.             boolean checkOggettiAccordi = false;
  267.             if(!utentiCore.isVisioneOggettiGlobaleIndipendenteUtente()) {
  268.                 if (singleSuAccordiCooperazione  != null) {
  269.                     for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
  270.                         nomesu = nomiUtentiDaRimuovere.get(i);
  271.                         if (nomesu.equals(singleSuAccordiCooperazione)) {
  272.                             paginaSuAccordi = true;
  273.                             msgAccordi = "Scegliere un utente che non &egrave; stato chiesto di eliminare<br>";
  274.                             break;
  275.                         }
  276.                     }
  277.                 } else {
  278.                     for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
  279.                         nomesu = nomiUtentiDaRimuovere.get(i);
  280.                         if (usersWithP.contains(nomesu)) {
  281.                             if(uwp==null){
  282.                                 // controllare che l'utente possieda degli oggetti
  283.                                 checkOggettiAccordi = true;
  284.                             }else{
  285.                                 paginaSuAccordi = true;
  286.                                 if(nomiUtentiDaRimuovere.size()==1){
  287.                                     msgAccordi = "Scegliere un utente a cui verranno assegnati tutti gli oggetti con permessi 'Accordi Cooperazione' appartenenti all'utente '"+nomiUtentiDaRimuovere.get(0)+"'<br>";
  288.                                 }else{
  289.                                     StringBuilder bf = new StringBuilder();
  290.                                     for(int j=0; j<nomiUtentiDaRimuovere.size(); j++){
  291.                                         if(j>0)
  292.                                             bf.append("','");
  293.                                         bf.append(nomiUtentiDaRimuovere.get(j));
  294.                                     }
  295.                                     msgAccordi = "Scegliere un utente a cui verranno assegnati tutti gli oggetti con permessi 'Accordi Cooperazione' appartenenti agli utenti '"+bf.toString()+"'<br>";
  296.                                 }
  297.                                 break;
  298.                             }
  299.                         }
  300.                     }
  301.                 }
  302.             }
  303.            
  304.             boolean paginaSu = paginaSuAccordi || paginaSuServizi;
  305.             // CHECK
  306.             String msg = msgServizi + msgAccordi;
  307.            
  308.             // Se paginaSu = true, propongo una pagina in cui faccio scegliere
  309.             // un superutente con permessi S a cui assegnare gli oggetti
  310.             // degli utenti eliminati
  311.             // In caso contrario, elimino gli utenti, assegnando gli eventuali
  312.             // oggetti a singleSu
  313.             if (paginaSu) {
  314.                 // Faccio scegliere il superutente a cui assegnare gli oggetti
  315.    
  316.                 // Preparo il menu
  317.                 utentiHelper.makeMenu();
  318.    
  319.                 // setto la barra del titolo
  320.                 ServletUtils.setPageDataTitle(pd,
  321.                         new Parameter(UtentiCostanti.LABEL_UTENTI ,UtentiCostanti.SERVLET_NAME_UTENTI_LIST),
  322.                         new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_ELIMINA,null));
  323.                
  324.                 // preparo i campi
  325.                 List<DataElement> dati = new ArrayList<>();
  326.    
  327.                 utentiHelper.addChooseUtenteForPermessiSToDati(dati, objToRemove, paginaSuServizi, uws , paginaSuAccordi , uwp);
  328.                    
  329.                 pd.setDati(dati);
  330.                 pd.setMessage(msg, Costanti.MESSAGE_TYPE_INFO);
  331.    
  332.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  333.                
  334.                 return ServletUtils.getStrutsForward(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL(), UtentiCostanti.STRUTS_FORWARD_INFO);  

  335.             } else {
  336.    
  337.                 // Elimino gli utenti e ritorno la pagina a lista
  338.                 for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
  339.                     nomesu = nomiUtentiDaRimuovere.get(i);
  340.                                        
  341.                     // Non posso rimuovere me stesso
  342.                     if (nomesu.equals(userLogin))
  343.                         msg += "Non è possibile rimuovere l'utente ("+nomesu+") con cui si è collegati all'interfaccia<br>";
  344.                     else {
  345.                         // Non posso rimuovere un utente con permessi U se e' l'unico
  346.                         // presente nel db
  347.                         if (usersWithU.size() == 1 &&
  348.                                 usersWithU.get(0).equals(nomesu)) {
  349.                             msg += nomesu + " non rimosso perch&egrave; deve esistere almeno un utente con permesso 'Utenti'<br><br>";
  350.                         }
  351.                         else {
  352.                             // Elimino l'utente
  353.                             User mySU = utentiCore.getUser(nomesu);
  354.                             // Se singleSu != null, devo recuperare gli oggetti
  355.                             // dell'utente ed assegnarli a singleSu
  356.                             List<Object> oggetti = new ArrayList<>();
  357.                             List<Integer> tipoModifica = new ArrayList<Integer>();
  358.                             if(soggettiCore.isRegistroServiziLocale()){
  359.                                 if (singleSuServizi != null && !singleSuServizi.equals("")) {
  360.                                     UserObjects results = utentiCore.updateUserServizi(nomesu, singleSuServizi);
  361.                                     ControlStationCore.logInfo("Modificata utenza ["+nomesu+"]->["+singleSuServizi+"] per permesso relativo ai servizi (L'utenza '"+nomesu+"' verrà eliminata). Risultati modifica: "+results.toString(false));
  362.                                 }
  363.                             }

  364.                             if(soggettiCore.isRegistroServiziLocale()){
  365.                                 if ((singleSuAccordiCooperazione != null && !singleSuAccordiCooperazione.equals("")) || checkOggettiAccordi) {
  366.                                    
  367.                                     if(checkOggettiAccordi){
  368.                                         UserObjects results = utentiCore.countUserCooperazione(nomesu);
  369.                                         if(results.accordi_accoperazione>0 || results.accordi_parte_comune>0) {
  370.                                             List<DataElement> dati = new ArrayList<>();
  371.                                            
  372.                                             dati.add(ServletUtils.getDataElementForEditModeFinished());
  373.    
  374.                                             pd.disableEditMode();
  375.    
  376.                                             pd.setDati(dati);
  377.    
  378.                                             // Preparo il menu
  379.                                             pd.setMessage("Non è possibile eliminare il permesso 'Accordi Cooperazione', poichè non esistono altri utenti con tale permesso");
  380.    
  381.                                             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  382.    
  383.                                             return ServletUtils.getStrutsForwardGeneralError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());
  384.                                         }
  385.                                     }
  386.                                    
  387.                                     UserObjects results = utentiCore.updateUserCooperazione(nomesu, singleSuAccordiCooperazione);
  388.                                     ControlStationCore.logInfo("Modificata utenza ["+nomesu+"]->["+singleSuAccordiCooperazione+"] per permesso relativo agli accordi di cooperazione (L'utenza '"+nomesu+"' verrà eliminata). Risultati modifica: "+results.toString(true));
  389.                                                                      
  390.                                 }
  391.                             }
  392.                            
  393.                             // Alla fine, elimino l'utente
  394.                             oggetti.add(mySU);
  395.                             tipoModifica.add(CostantiControlStation.PERFORM_OPERATION_DELETE);
  396.                             int[] operationTypes = new int[tipoModifica.size()];
  397.                             for (int cO = 0; cO < tipoModifica.size(); cO++)
  398.                                 operationTypes[cO] = tipoModifica.get(cO);
  399.                             utentiCore.performOperationMultiTypes(userLogin, utentiHelper.smista(), operationTypes, oggetti.toArray());
  400.                             if (usersWithU.contains(nomesu))
  401.                                 usersWithU.remove(nomesu);
  402.                         }
  403.                     }
  404.                 }
  405.                
  406.                 if(msgErroreModalita!=null) {
  407.                     if (!msg.equals("")) {
  408.                         msg += "<br>";
  409.                         msg += msgErroreModalita;
  410.                     }
  411.                     else {
  412.                         msg = msgErroreModalita;
  413.                     }
  414.                 }
  415.                
  416.                 if (!msg.equals(""))
  417.                     pd.setMessage(msg);
  418.        
  419.                 // Preparo la lista
  420.                
  421.                 ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session,ConsoleSearch.class);
  422.        
  423.                 int idLista = Liste.SU;
  424.        
  425.                 ricerca = utentiHelper.checkSearchParameters(idLista, ricerca);
  426.        
  427.                 List<User> lista = utentiCore.userList(ricerca);
  428.        
  429.                 utentiHelper.prepareUtentiList(ricerca, lista, utentiCore.isSinglePdD());
  430.        
  431.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  432.                
  433.                 return ServletUtils.getStrutsForward(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL());  
  434.             }
  435.         } catch (Exception e) {
  436.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  437.                     UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL());
  438.         }
  439.     }
  440.    
  441. }