UtentiDel.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.web.ctrlstat.servlet.utenti;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import java.util.StringTokenizer;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.apache.struts.action.Action;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.action.ActionForward;
- import org.apache.struts.action.ActionMapping;
- import org.openspcoop2.core.commons.Liste;
- import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
- import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
- import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
- import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
- import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
- import org.openspcoop2.web.lib.mvc.Costanti;
- import org.openspcoop2.web.lib.mvc.DataElement;
- import org.openspcoop2.web.lib.mvc.ForwardParams;
- import org.openspcoop2.web.lib.mvc.GeneralData;
- import org.openspcoop2.web.lib.mvc.PageData;
- import org.openspcoop2.web.lib.mvc.Parameter;
- import org.openspcoop2.web.lib.mvc.ServletUtils;
- import org.openspcoop2.web.lib.users.dao.Permessi;
- import org.openspcoop2.web.lib.users.dao.User;
- import org.openspcoop2.web.lib.users.dao.UserObjects;
- /**
- * suDel
- *
- * @author Andrea Poli (apoli@link.it)
- * @author Stefano Corallo (corallo@link.it)
- * @author Sandra Giangrandi (sandra@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- *
- */
- public final class UtentiDel extends Action {
- @Override
- public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
- HttpSession session = request.getSession(true);
- // Inizializzo PageData
- PageData pd = new PageData();
- GeneralHelper generalHelper = new GeneralHelper(session);
- // Inizializzo GeneralData
- GeneralData gd = generalHelper.initGeneralData(request);
- String userLogin = ServletUtils.getUserLoginFromSession(session);
-
- try {
- UtentiHelper utentiHelper = new UtentiHelper(request, pd, session);
-
- String objToRemove = utentiHelper.getParameter(Costanti.PARAMETER_NAME_OBJECTS_FOR_REMOVE);
- String singleSuServizi = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_SINGLE_SU_SERVIZI);
- String singleSuAccordiCooperazione = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_SINGLE_SU_ACCORDI_COOPERAZIONE);
-
- // Preparo il menu
- utentiHelper.makeMenu();
-
- UtentiCore utentiCore = new UtentiCore();
- SoggettiCore soggettiCore = new SoggettiCore(utentiCore);
-
- // Elimino i superutenti dal db
- StringTokenizer objTok = new StringTokenizer(objToRemove, ",");
- int[] idToRemove = new int[objTok.countTokens()];
- List<User> utentiDaRimuovere = new ArrayList<>();
- List<String> nomiUtentiDaRimuovere = new ArrayList<>();
-
- int k = 0;
- while (objTok.hasMoreElements()) {
- String id = objTok.nextToken();
- idToRemove[k++] = Integer.parseInt(id);
- User user = utentiCore.getUser(Long.parseLong(id));
- utentiDaRimuovere.add(user);
- nomiUtentiDaRimuovere.add(user.getLogin());
- }
-
- // controllo protocolli associati agli utenti che provo ad eliminare
- String msgErroreModalita = null;
- List<String> utentiDaNonEliminare = new ArrayList<>();
- for (User user : utentiDaRimuovere) {
- if(!user.hasOnlyPermessiUtenti())
- utentiHelper.controlloModalitaUtenteDaEliminare(nomiUtentiDaRimuovere, utentiDaNonEliminare, user);
- }
-
- if(!utentiDaNonEliminare.isEmpty()) {
- if(utentiDaNonEliminare.size()> 1) {
- StringBuilder sbUL = new StringBuilder();
- for (String userL : utentiDaNonEliminare) {
- if(sbUL.length() >0 )
- sbUL.append(", ");
- sbUL.append(userL);
- }
- msgErroreModalita = "Gli utenti "+sbUL.toString()+" non sono stati eliminati poichè sono stati rilevati oggetti, appartenenti a dei "+
- org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLI_DI_HTML_ESCAPE+", non assegnabili a nessun altro utente";
- } else {
- msgErroreModalita = "L'utente " +utentiDaNonEliminare.get(0) +" non è stato eliminato poichè sono stati rilevati oggetti, appartenenti a dei "+
- org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLI_DI_HTML_ESCAPE+", non assegnabili a nessun altro utente";
- }
- List<String> newList = new ArrayList<>();
- for (String uDE : nomiUtentiDaRimuovere) {
- if(utentiDaNonEliminare.contains(uDE) == false) {
- newList.add(uDE);
- }
- }
- if(newList.isEmpty()) {
- List<DataElement> dati = new ArrayList<>();
-
- dati.add(ServletUtils.getDataElementForEditModeFinished());
-
- pd.disableEditMode();
-
- pd.setDati(dati);
-
- // Preparo il menu
- pd.setMessage(msgErroreModalita);
- ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
-
- return ServletUtils.getStrutsForwardGeneralError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL());
- }
- else {
- nomiUtentiDaRimuovere = newList;
- }
- }
-
-
-
-
- List<String> usersWithU = utentiCore.getUsersWithType(Permessi.UTENTI.toString());
- List<String> usersWithS = utentiCore.getUsersWithType(Permessi.SERVIZI.toString());
-
- String[] uws = null;
- if (usersWithS != null && !usersWithS.isEmpty()) {
- List<String> usersWithPermessoS = new ArrayList<>();
- Iterator<String> itUWS = usersWithS.iterator();
- while (itUWS.hasNext()) {
- String singleUWS = itUWS.next();
- if (nomiUtentiDaRimuovere.contains(singleUWS) == false) {
- // controllo compatibilita
- boolean compatibile = true;
- for (String user : nomiUtentiDaRimuovere) {
- compatibile = utentiHelper.checkUsersModalitaGatewayCompatibili(user,singleUWS);
-
- if(!compatibile)
- break;
- }
- if(compatibile)
- usersWithPermessoS.add(singleUWS);
- }
- }
- if(!usersWithPermessoS.isEmpty()){
- uws = new String[1];
- uws = usersWithPermessoS.toArray(uws);
- }
- }
-
- // Se singleSuAccordi = null, controllo se l'utente aveva permessi P
- List<String> usersWithP = utentiCore.getUsersWithType(Permessi.ACCORDI_COOPERAZIONE.toString());
-
- String[] uwp = null;
- if (usersWithP != null && !usersWithP.isEmpty()) {
- List<String> usersWithPermessoP = new ArrayList<>();
- Iterator<String> itUWS = usersWithP.iterator();
- while (itUWS.hasNext()) {
- String singleUWP = itUWS.next();
- if (!nomiUtentiDaRimuovere.contains(singleUWP)) {
- // controllo compatibilita
- boolean compatibile = true;
- for (String user : nomiUtentiDaRimuovere) {
- compatibile = utentiHelper.checkUsersModalitaGatewayCompatibili(user,singleUWP);
- if(!compatibile)
- break;
- }
-
- if(compatibile)
- usersWithPermessoP.add(singleUWP);
- }
- }
- if(!usersWithPermessoP.isEmpty()){
- uwp = new String[1];
- uwp = usersWithPermessoP.toArray(uwp);
- }
- }
-
- String nomesu = "";
-
- // Se singleSu != null, controllo che il superutente non sia
- // tra quelli da eliminare
- // Se singleSu = null, controllo se almeno uno degli utenti da
- // eliminare aveva permessi S
- String msgServizi = "";
- boolean paginaSuServizi = false;
-
- if(!utentiCore.isVisioneOggettiGlobaleIndipendenteUtente()) {
- if (singleSuServizi != null) {
- for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
- nomesu = nomiUtentiDaRimuovere.get(i);
- if (nomesu.equals(singleSuServizi)) {
- paginaSuServizi = true;
- msgServizi = "Scegliere un utente che non è stato chiesto di eliminare<br>";
- break;
- }
- }
- } else {
- for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
- nomesu = nomiUtentiDaRimuovere.get(i);
- if (usersWithS.contains(nomesu)) {
- if(uws==null){
-
- List<DataElement> dati = new ArrayList<>();
-
- dati.add(ServletUtils.getDataElementForEditModeFinished());
-
- pd.disableEditMode();
-
- pd.setDati(dati);
-
- // Preparo il menu
- pd.setMessage("Non è possibile eliminare l'utente '"+nomesu+"', poichè non esistono altri utenti con il permesso per la gestione dei 'Servizi'");
-
- ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
-
- return ServletUtils.getStrutsForwardGeneralError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL());
-
- }else{
- paginaSuServizi = true;
- if(nomiUtentiDaRimuovere.size()==1){
- msgServizi = "Scegliere un utente a cui verranno assegnati tutti gli oggetti con permessi 'Servizi' appartenenti all'utente '"+nomiUtentiDaRimuovere.get(0)+"'<br>";
- }else{
- StringBuilder bf = new StringBuilder();
- for(int j=0; j<nomiUtentiDaRimuovere.size(); j++){
- if(j>0)
- bf.append("','");
- bf.append(nomiUtentiDaRimuovere.get(j));
- }
- msgServizi = "Scegliere un utente a cui verranno assegnati tutti gli oggetti con permessi 'Servizi' appartenenti agli utenti '"+bf.toString()+"'<br>";
- }
- break;
- }
- }
- }
- }
- }
-
- String msgAccordi = "";
- boolean paginaSuAccordi = false;
- boolean checkOggettiAccordi = false;
- if(!utentiCore.isVisioneOggettiGlobaleIndipendenteUtente()) {
- if (singleSuAccordiCooperazione != null) {
- for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
- nomesu = nomiUtentiDaRimuovere.get(i);
- if (nomesu.equals(singleSuAccordiCooperazione)) {
- paginaSuAccordi = true;
- msgAccordi = "Scegliere un utente che non è stato chiesto di eliminare<br>";
- break;
- }
- }
- } else {
- for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
- nomesu = nomiUtentiDaRimuovere.get(i);
- if (usersWithP.contains(nomesu)) {
- if(uwp==null){
- // controllare che l'utente possieda degli oggetti
- checkOggettiAccordi = true;
- }else{
- paginaSuAccordi = true;
- if(nomiUtentiDaRimuovere.size()==1){
- msgAccordi = "Scegliere un utente a cui verranno assegnati tutti gli oggetti con permessi 'Accordi Cooperazione' appartenenti all'utente '"+nomiUtentiDaRimuovere.get(0)+"'<br>";
- }else{
- StringBuilder bf = new StringBuilder();
- for(int j=0; j<nomiUtentiDaRimuovere.size(); j++){
- if(j>0)
- bf.append("','");
- bf.append(nomiUtentiDaRimuovere.get(j));
- }
- msgAccordi = "Scegliere un utente a cui verranno assegnati tutti gli oggetti con permessi 'Accordi Cooperazione' appartenenti agli utenti '"+bf.toString()+"'<br>";
- }
- break;
- }
- }
- }
- }
- }
-
- boolean paginaSu = paginaSuAccordi || paginaSuServizi;
- // CHECK
- String msg = msgServizi + msgAccordi;
-
- // Se paginaSu = true, propongo una pagina in cui faccio scegliere
- // un superutente con permessi S a cui assegnare gli oggetti
- // degli utenti eliminati
- // In caso contrario, elimino gli utenti, assegnando gli eventuali
- // oggetti a singleSu
- if (paginaSu) {
- // Faccio scegliere il superutente a cui assegnare gli oggetti
-
- // Preparo il menu
- utentiHelper.makeMenu();
-
- // setto la barra del titolo
- ServletUtils.setPageDataTitle(pd,
- new Parameter(UtentiCostanti.LABEL_UTENTI ,UtentiCostanti.SERVLET_NAME_UTENTI_LIST),
- new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_ELIMINA,null));
-
- // preparo i campi
- List<DataElement> dati = new ArrayList<>();
-
- utentiHelper.addChooseUtenteForPermessiSToDati(dati, objToRemove, paginaSuServizi, uws , paginaSuAccordi , uwp);
-
- pd.setDati(dati);
- pd.setMessage(msg, Costanti.MESSAGE_TYPE_INFO);
-
- ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
-
- return ServletUtils.getStrutsForward(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL(), UtentiCostanti.STRUTS_FORWARD_INFO);
- } else {
-
- // Elimino gli utenti e ritorno la pagina a lista
- for (int i = 0; i < nomiUtentiDaRimuovere.size(); i++) {
- nomesu = nomiUtentiDaRimuovere.get(i);
-
- // Non posso rimuovere me stesso
- if (nomesu.equals(userLogin))
- msg += "Non è possibile rimuovere l'utente ("+nomesu+") con cui si è collegati all'interfaccia<br>";
- else {
- // Non posso rimuovere un utente con permessi U se e' l'unico
- // presente nel db
- if (usersWithU.size() == 1 &&
- usersWithU.get(0).equals(nomesu)) {
- msg += nomesu + " non rimosso perchè deve esistere almeno un utente con permesso 'Utenti'<br><br>";
- }
- else {
- // Elimino l'utente
- User mySU = utentiCore.getUser(nomesu);
- // Se singleSu != null, devo recuperare gli oggetti
- // dell'utente ed assegnarli a singleSu
- List<Object> oggetti = new ArrayList<>();
- List<Integer> tipoModifica = new ArrayList<Integer>();
- if(soggettiCore.isRegistroServiziLocale()){
- if (singleSuServizi != null && !singleSuServizi.equals("")) {
- UserObjects results = utentiCore.updateUserServizi(nomesu, singleSuServizi);
- ControlStationCore.logInfo("Modificata utenza ["+nomesu+"]->["+singleSuServizi+"] per permesso relativo ai servizi (L'utenza '"+nomesu+"' verrà eliminata). Risultati modifica: "+results.toString(false));
- }
- }
- if(soggettiCore.isRegistroServiziLocale()){
- if ((singleSuAccordiCooperazione != null && !singleSuAccordiCooperazione.equals("")) || checkOggettiAccordi) {
-
- if(checkOggettiAccordi){
- UserObjects results = utentiCore.countUserCooperazione(nomesu);
- if(results.accordi_accoperazione>0 || results.accordi_parte_comune>0) {
- List<DataElement> dati = new ArrayList<>();
-
- dati.add(ServletUtils.getDataElementForEditModeFinished());
-
- pd.disableEditMode();
-
- pd.setDati(dati);
-
- // Preparo il menu
- pd.setMessage("Non è possibile eliminare il permesso 'Accordi Cooperazione', poichè non esistono altri utenti con tale permesso");
-
- ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
-
- return ServletUtils.getStrutsForwardGeneralError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());
- }
- }
-
- UserObjects results = utentiCore.updateUserCooperazione(nomesu, singleSuAccordiCooperazione);
- ControlStationCore.logInfo("Modificata utenza ["+nomesu+"]->["+singleSuAccordiCooperazione+"] per permesso relativo agli accordi di cooperazione (L'utenza '"+nomesu+"' verrà eliminata). Risultati modifica: "+results.toString(true));
-
- }
- }
-
- // Alla fine, elimino l'utente
- oggetti.add(mySU);
- tipoModifica.add(CostantiControlStation.PERFORM_OPERATION_DELETE);
- int[] operationTypes = new int[tipoModifica.size()];
- for (int cO = 0; cO < tipoModifica.size(); cO++)
- operationTypes[cO] = tipoModifica.get(cO);
- utentiCore.performOperationMultiTypes(userLogin, utentiHelper.smista(), operationTypes, oggetti.toArray());
- if (usersWithU.contains(nomesu))
- usersWithU.remove(nomesu);
- }
- }
- }
-
- if(msgErroreModalita!=null) {
- if (!msg.equals("")) {
- msg += "<br>";
- msg += msgErroreModalita;
- }
- else {
- msg = msgErroreModalita;
- }
- }
-
- if (!msg.equals(""))
- pd.setMessage(msg);
-
- // Preparo la lista
-
- ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session,ConsoleSearch.class);
-
- int idLista = Liste.SU;
-
- ricerca = utentiHelper.checkSearchParameters(idLista, ricerca);
-
- List<User> lista = utentiCore.userList(ricerca);
-
- utentiHelper.prepareUtentiList(ricerca, lista, utentiCore.isSinglePdD());
-
- ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
-
- return ServletUtils.getStrutsForward(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL());
- }
- } catch (Exception e) {
- return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
- UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.DEL());
- }
- }
-
- }