UtentiAdd.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 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.Date;
import java.util.List;
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.utils.crypt.PasswordVerifier;
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.OggettoDialogEnum;
import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
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.MessageType;
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.mvc.TipoOperazione;
import org.openspcoop2.web.lib.users.dao.InterfaceType;
import org.openspcoop2.web.lib.users.dao.Permessi;
import org.openspcoop2.web.lib.users.dao.PermessiUtente;
import org.openspcoop2.web.lib.users.dao.Stato;
import org.openspcoop2.web.lib.users.dao.User;
/**
* suAdd
*
* @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 UtentiAdd 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 {
UtentiCore utentiCore = new UtentiCore();
UtentiHelper utentiHelper = new UtentiHelper(request, pd, session);
boolean loginApplication = utentiCore.isLoginApplication();
String nomesu = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_USERNAME);
String pwsu = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_PW);
String confpwsu = null;
String tipoGui = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_TIPO_GUI);
String tipoModalitaConsoleGestione = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA);
String idSoggettoConsoleGestione = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_ID_SOGGETTO);
String tipoModalitaConsoleMonitoraggio = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA_MONITOR);
String idSoggettoConsoleMonitoraggio = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_ID_SOGGETTO_MONITOR);
String homePageMonitoraggio = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_HOME_PAGE_MONITORAGGIO);
String intervalloTemporaleHomePageConsoleMonitoraggio = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_INTERVALLO_TEMPORALE_HOME_PAGE_MONITORAGGIO);
InterfaceType interfaceType = null;
if(tipoGui==null) {
interfaceType = InterfaceType.STANDARD;
}
else {
interfaceType = InterfaceType.convert(tipoGui, true);
}
// nessun profilo selezionato imposto all
if(tipoModalitaConsoleGestione == null) {
tipoModalitaConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
// nessun soggetto selezionato imposto all
if(idSoggettoConsoleGestione == null) {
idSoggettoConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
// nessun profilo selezionato imposto all
if(tipoModalitaConsoleMonitoraggio == null) {
tipoModalitaConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
// nessun soggetto selezionato imposto all
if(idSoggettoConsoleMonitoraggio == null) {
idSoggettoConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
// nessuna home page selezionata imposto transazioni
if(homePageMonitoraggio == null) {
homePageMonitoraggio = UtentiCostanti.VALUE_PARAMETRO_UTENTI_HOME_PAGE_MONITORAGGIO_TRANSAZIONI;
}
// nessun tipo grafico selezionato imposto ultimi 7 giorni
if(intervalloTemporaleHomePageConsoleMonitoraggio == null) {
intervalloTemporaleHomePageConsoleMonitoraggio = UtentiCostanti.VALUE_PARAMETRO_UTENTI_INTERVALLO_TEMPORALE_HOME_PAGE_MONITORAGGIO_ULTIMI_7_GIORNI;
}
String isServizi = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_SERVIZI);
String isDiagnostica = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_DIAGNOSTICA);
String isReportistica = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_REPORTISTICA);
String isSistema = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_SISTEMA);
String isMessaggi = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_MESSAGGI);
String isUtenti = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_UTENTI);
String isAuditing = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_AUDITING);
String isAccordiCooperazione = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_ACCORDI_COOPERAZIONE);
String isSoggettiAll = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_ABILITAZIONI_SOGGETTI_ALL);
String isServiziAll = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_ABILITAZIONI_SERVIZI_ALL);
String scadenza = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_SCADENZA);
Boolean singlePdD = ServletUtils.getBooleanAttributeFromSession(CostantiControlStation.SESSION_PARAMETRO_SINGLE_PDD, session, request).getValue();
List<String> protocolliRegistratiConsole = utentiCore.getProtocolli();
String [] modalitaScelte = new String[protocolliRegistratiConsole.size()];
for (int i = 0; i < protocolliRegistratiConsole.size() ; i++) {
String protocolloName = protocolliRegistratiConsole.get(i);
modalitaScelte[i] = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_MODALITA_PREFIX + protocolloName);
}
String postBackElementName = utentiHelper.getPostBackElementName();
if (postBackElementName != null) {
// selezione modalita'
if(postBackElementName.startsWith(UtentiCostanti.PARAMETRO_UTENTI_MODALITA_PREFIX)) {
tipoModalitaConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
idSoggettoConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
tipoModalitaConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
idSoggettoConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
// cambio del profilo, reset del valore del soggetto
if(postBackElementName.equals(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA)) {
idSoggettoConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
// cambio del profilo, reset del valore del soggetto
if(postBackElementName.equals(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA_MONITOR)) {
idSoggettoConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
// cambio della home page, reset del valore del grafico
if(postBackElementName.equals(UtentiCostanti.PARAMETRO_UTENTI_HOME_PAGE_MONITORAGGIO)) {
intervalloTemporaleHomePageConsoleMonitoraggio = UtentiCostanti.VALUE_PARAMETRO_UTENTI_INTERVALLO_TEMPORALE_HOME_PAGE_MONITORAGGIO_ULTIMI_7_GIORNI;
}
}
// Preparo il menu
utentiHelper.makeMenu();
// Se nomehid = null, devo visualizzare la pagina per l'inserimento dati
if(utentiHelper.isEditModeInProgress()){
// setto la barra del titolo
ServletUtils.setPageDataTitle(pd,
new Parameter(UtentiCostanti.LABEL_UTENTI ,UtentiCostanti.SERVLET_NAME_UTENTI_LIST),
ServletUtils.getParameterAggiungi());
// preparo i campi
List<DataElement> dati = new ArrayList<>();
dati.add(ServletUtils.getDataElementForEditModeFinished());
if(nomesu==null){
nomesu = "";
}
if(pwsu==null){
pwsu = "";
}
utentiHelper.addUtentiToDati(dati, TipoOperazione.ADD, singlePdD,
nomesu,pwsu,confpwsu,interfaceType,
isServizi,isDiagnostica,isReportistica,isSistema,isMessaggi,isUtenti,isAuditing,isAccordiCooperazione,
null,modalitaScelte, isSoggettiAll, isServiziAll, null, scadenza, null, false,
tipoModalitaConsoleGestione, idSoggettoConsoleGestione, tipoModalitaConsoleMonitoraggio, idSoggettoConsoleMonitoraggio,
homePageMonitoraggio, intervalloTemporaleHomePageConsoleMonitoraggio);
pd.setDati(dati);
ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
return ServletUtils.getStrutsForwardEditModeInProgress(mapping, UtentiCostanti.OBJECT_NAME_UTENTI,ForwardParams.ADD());
}
// Controlli sui campi immessi
boolean isOk = utentiHelper.utentiCheckData(TipoOperazione.ADD,singlePdD,null,false);
if (!isOk) {
// setto la barra del titolo
ServletUtils.setPageDataTitle(pd,
new Parameter(UtentiCostanti.LABEL_UTENTI ,UtentiCostanti.SERVLET_NAME_UTENTI_LIST),
ServletUtils.getParameterAggiungi());
// preparo i campi
List<DataElement> dati = new ArrayList<>();
dati.add(ServletUtils.getDataElementForEditModeFinished());
utentiHelper.addUtentiToDati(dati, TipoOperazione.ADD, singlePdD,
nomesu,pwsu,confpwsu,interfaceType,
isServizi,isDiagnostica,isReportistica,isSistema,isMessaggi,isUtenti,isAuditing,isAccordiCooperazione,
null,modalitaScelte, isSoggettiAll, isServiziAll, null, scadenza, null, false,
tipoModalitaConsoleGestione, idSoggettoConsoleGestione, tipoModalitaConsoleMonitoraggio, idSoggettoConsoleMonitoraggio,
homePageMonitoraggio, intervalloTemporaleHomePageConsoleMonitoraggio);
pd.setDati(dati);
ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
return ServletUtils.getStrutsForwardEditModeCheckError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.ADD());
}
boolean secret = false;
String secretPassword = pwsu;
String secretUser = nomesu;
boolean secretAppId = false;
// Cripto la password
if(utentiCore.isUtenzePasswordEncryptEnabled()) {
secret = true;
pwsu = utentiCore.getUtenzePasswordManager().crypt(pwsu);
}
// Inserisco l'utente nel db
User newU = new User();
newU.setLogin(nomesu);
newU.setPassword(pwsu);
newU.setInterfaceType(interfaceType);
newU.setProtocolloSelezionatoPddConsole(!tipoModalitaConsoleGestione.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? tipoModalitaConsoleGestione : null);
newU.setSoggettoSelezionatoPddConsole(!idSoggettoConsoleGestione.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? idSoggettoConsoleGestione : null);
newU.setProtocolloSelezionatoPddMonitor(!tipoModalitaConsoleMonitoraggio.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? tipoModalitaConsoleMonitoraggio : null);
newU.setSoggettoSelezionatoPddMonitor(!idSoggettoConsoleMonitoraggio.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? idSoggettoConsoleMonitoraggio : null);
String puString = "";
if (ServletUtils.isCheckBoxEnabled(isServizi))
puString = Permessi.SERVIZI.toString();
if (ServletUtils.isCheckBoxEnabled(isDiagnostica)) {
if (puString.equals(""))
puString = Permessi.DIAGNOSTICA.toString();
else
puString = puString+","+Permessi.DIAGNOSTICA.toString();
}
if (ServletUtils.isCheckBoxEnabled(isReportistica)) {
if (puString.equals(""))
puString = Permessi.REPORTISTICA.toString();
else
puString = puString+","+Permessi.REPORTISTICA.toString();
}
if (ServletUtils.isCheckBoxEnabled(isSistema)) {
if (puString.equals(""))
puString = Permessi.SISTEMA.toString();
else
puString = puString+","+Permessi.SISTEMA.toString();
}
if (ServletUtils.isCheckBoxEnabled(isMessaggi)) {
if (puString.equals(""))
puString = Permessi.CODE_MESSAGGI.toString();
else
puString = puString+","+Permessi.CODE_MESSAGGI.toString();
}
if (ServletUtils.isCheckBoxEnabled(isUtenti)) {
if (puString.equals(""))
puString = Permessi.UTENTI.toString();
else
puString = puString+","+Permessi.UTENTI.toString();
}
if (ServletUtils.isCheckBoxEnabled(isAuditing)) {
if (puString.equals(""))
puString = Permessi.AUDITING.toString();
else
puString = puString+","+Permessi.AUDITING.toString();
}
if (ServletUtils.isCheckBoxEnabled(isAccordiCooperazione)) {
if (puString.equals(""))
puString = Permessi.ACCORDI_COOPERAZIONE.toString();
else
puString = puString+","+Permessi.ACCORDI_COOPERAZIONE.toString();
}
newU.setPermessi(PermessiUtente.toPermessiUtente(puString));
newU.clearProtocolliSupportati();
// modalita gateway
for (int i = 0; i < protocolliRegistratiConsole.size() ; i++) {
String protocolloName = protocolliRegistratiConsole.get(i);
if(ServletUtils.isCheckBoxEnabled(modalitaScelte[i])) {
newU.addProtocolloSupportato(protocolloName);
}
}
if (ServletUtils.isCheckBoxEnabled(isDiagnostica) || ServletUtils.isCheckBoxEnabled(isReportistica)) {
if(utentiCore.isMultitenant()) {
newU.setPermitAllSoggetti(ServletUtils.isCheckBoxEnabled(isSoggettiAll));
}
else {
newU.setPermitAllSoggetti(true);
}
newU.setPermitAllServizi(ServletUtils.isCheckBoxEnabled(isServiziAll));
// salvataggio homepage e grafico della console di monitoraggio
Stato statoHomePage = new Stato();
statoHomePage.setOggetto(UtentiCostanti.OGGETTO_STATO_UTENTE_HOME_PAGE);
statoHomePage.setStato(utentiHelper.incapsulaValoreStato(homePageMonitoraggio));
newU.getStati().add(statoHomePage);
Stato statoIntevalloTemporaleHomePage = new Stato();
statoIntevalloTemporaleHomePage.setOggetto(UtentiCostanti.OGGETTO_STATO_UTENTE_INTERVALLO_TEMPORALE_HOME_PAGE);
statoIntevalloTemporaleHomePage.setStato(utentiHelper.incapsulaValoreStato(intervalloTemporaleHomePageConsoleMonitoraggio));
newU.getStati().add(statoIntevalloTemporaleHomePage );
}
// aggiornamento password
PasswordVerifier passwordVerifier = utentiCore.getUtenzePasswordVerifier();
if(utentiCore.isCheckPasswordExpire(passwordVerifier)) {
newU.setCheckLastUpdatePassword(ServletUtils.isCheckBoxEnabled(scadenza));
} else {
newU.setCheckLastUpdatePassword(false);
}
// salvo comunque la data di immissione password
newU.setLastUpdatePassword(new Date());
utentiCore.performCreateOperation(userLogin, utentiHelper.smista(), newU);
// Messaggio 'Please Copy'
if(loginApplication && secret) {
utentiHelper.setSecretPleaseCopy(secretPassword, secretUser, secretAppId, ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC, OggettoDialogEnum.UTENTE, nomesu);
}
// 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, singlePdD);
if(!newU.isConfigurazioneValidaSoggettiAbilitati()) {
pd.setMessage(UtentiCostanti.LABEL_ABILITAZIONI_PUNTUALI_SOGGETTI_DEFINIZIONE_CREATE_NOTE, MessageType.INFO);
}
else if(!newU.isConfigurazioneValidaServiziAbilitati()) {
pd.setMessage(UtentiCostanti.LABEL_ABILITAZIONI_PUNTUALI_SERVIZI_DEFINIZIONE_CREATE_NOTE, MessageType.INFO);
}
ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
return ServletUtils.getStrutsForwardEditModeFinished(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.ADD());
} catch (Exception e) {
return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.ADD());
}
}
}