PorteApplicativeGestioneCors.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.pa;

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

  23. import javax.servlet.http.HttpServletRequest;
  24. import javax.servlet.http.HttpServletResponse;
  25. import javax.servlet.http.HttpSession;

  26. import org.apache.commons.lang.StringUtils;
  27. import org.apache.struts.action.Action;
  28. import org.apache.struts.action.ActionForm;
  29. import org.apache.struts.action.ActionForward;
  30. import org.apache.struts.action.ActionMapping;
  31. import org.openspcoop2.core.config.Configurazione;
  32. import org.openspcoop2.core.config.CorsConfigurazione;
  33. import org.openspcoop2.core.config.CorsConfigurazioneHeaders;
  34. import org.openspcoop2.core.config.CorsConfigurazioneMethods;
  35. import org.openspcoop2.core.config.CorsConfigurazioneOrigin;
  36. import org.openspcoop2.core.config.PortaApplicativa;
  37. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  38. import org.openspcoop2.core.config.constants.TipoGestioneCORS;
  39. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  40. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  41. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  42. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  43. import org.openspcoop2.web.lib.mvc.Costanti;
  44. import org.openspcoop2.web.lib.mvc.DataElement;
  45. import org.openspcoop2.web.lib.mvc.ForwardParams;
  46. import org.openspcoop2.web.lib.mvc.GeneralData;
  47. import org.openspcoop2.web.lib.mvc.PageData;
  48. import org.openspcoop2.web.lib.mvc.Parameter;
  49. import org.openspcoop2.web.lib.mvc.ServletUtils;
  50. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  51. /***
  52.  *
  53.  * PorteApplicativeGestioneCors
  54.  *
  55.  * @author Giuliano Pintori (pintori@link.it)
  56.  * @author $Author$
  57.  * @version $Rev$, $Date$
  58.  */
  59. public class PorteApplicativeGestioneCors extends Action {

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

  62.         TipoOperazione tipoOperazione = TipoOperazione.OTHER;

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

  64.         // Inizializzo PageData
  65.         PageData pd = new PageData();

  66.         GeneralHelper generalHelper = new GeneralHelper(session);

  67.         // Inizializzo GeneralData
  68.         GeneralData gd = generalHelper.initGeneralData(request);

  69.         String userLogin = ServletUtils.getUserLoginFromSession(session);  

  70.         try {

  71.             PorteApplicativeHelper porteApplicativeHelper = new PorteApplicativeHelper(request, pd, session);
  72.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione delle porte applicative
  73.             Integer parentPA = ServletUtils.getIntegerAttributeFromSession(PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT, session, request);
  74.             if(parentPA == null) parentPA = PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_NONE;
  75.            
  76.             String id = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID);
  77.             int idInt = Integer.parseInt(id);
  78.             String idsogg = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_SOGGETTO);
  79.             String idAsps = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_ASPS);
  80.             if(idAsps == null)
  81.                 idAsps = "";

  82.             // Preparo il menu
  83.             porteApplicativeHelper.makeMenu();

  84.             PorteApplicativeCore porteApplicativeCore = new PorteApplicativeCore();
  85.             ConfigurazioneCore confCore = new ConfigurazioneCore(porteApplicativeCore);

  86.             boolean showStato = true;
  87.             String statoCorsPorta = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_STATO_PORTA);
  88.             String statoCorsTmp = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_STATO);
  89.             boolean corsStato = ServletUtils.isCheckBoxEnabled(statoCorsTmp);
  90.             String corsTipoTmp = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_TIPO);
  91.             TipoGestioneCORS corsTipo = corsTipoTmp != null ? TipoGestioneCORS.toEnumConstant(corsTipoTmp) : TipoGestioneCORS.GATEWAY;
  92.             String corsAllAllowOriginsTmp = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALL_ALLOW_ORIGINS);
  93.             boolean corsAllAllowOrigins = ServletUtils.isCheckBoxEnabled(corsAllAllowOriginsTmp);
  94.             String corsAllAllowHeadersTmp = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALL_ALLOW_HEADERS);
  95.             boolean corsAllAllowHeaders = ServletUtils.isCheckBoxEnabled(corsAllAllowHeadersTmp);
  96.             String corsAllAllowMethodsTmp = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALL_ALLOW_METHODS);
  97.             boolean corsAllAllowMethods = ServletUtils.isCheckBoxEnabled(corsAllAllowMethodsTmp);
  98.             String corsAllowHeaders =  porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALLOW_HEADERS);
  99.             String corsAllowOrigins =  porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALLOW_ORIGINS);
  100.             String corsAllowMethods =  porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALLOW_METHODS);
  101.             String corsAllowCredentialTmp = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_ALLOW_CREDENTIALS);
  102.             boolean corsAllowCredential =  ServletUtils.isCheckBoxEnabled(corsAllowCredentialTmp);
  103.             String corsExposeHeaders = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_EXPOSE_HEADERS);
  104.             String corsMaxAgeTmp = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_MAX_AGE);
  105.             boolean corsMaxAge =  ServletUtils.isCheckBoxEnabled(corsMaxAgeTmp);
  106.             String corsMaxAgeSecondsTmp = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_MAX_AGE_SECONDS);
  107.             int corsMaxAgeSeconds = -1;
  108.             if(corsMaxAgeSecondsTmp != null) {
  109.                 try {
  110.                     corsMaxAgeSeconds = Integer.parseInt(corsMaxAgeSecondsTmp);
  111.                 }catch(Exception e) {
  112.                     // ignore
  113.                 }
  114.             }

  115.             PortaApplicativa pa = porteApplicativeCore.getPortaApplicativa(idInt);
  116.             String idporta = pa.getNome();

  117.             CorsConfigurazione oldConfigurazione = pa.getGestioneCors();

  118.             boolean initConfigurazione = false;
  119.             String postBackElementName = porteApplicativeHelper.getPostBackElementName();
  120.             if(postBackElementName != null ){
  121.                 if(postBackElementName.equalsIgnoreCase(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_STATO_PORTA)){
  122.                     initConfigurazione = true;
  123.                 }
  124.                
  125.                 if(postBackElementName.equalsIgnoreCase(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CORS_STATO)){
  126.                     if(!porteApplicativeHelper.isCorsAbilitato(oldConfigurazione) && corsStato) {
  127.                         CorsConfigurazione configurazioneTmp = new CorsConfigurazione();
  128.                        
  129.                         corsTipo = configurazioneTmp.getTipo();
  130.                         if(configurazioneTmp.getTipo() != null && configurazioneTmp.getTipo().equals(TipoGestioneCORS.GATEWAY)) {

  131.                             corsAllAllowOrigins = true;
  132.                             if(configurazioneTmp.getAccessControlAllAllowOrigins() != null && configurazioneTmp.getAccessControlAllAllowOrigins().equals(StatoFunzionalita.DISABILITATO)) {
  133.                                 corsAllAllowOrigins = false;

  134.                                 configurazioneTmp.setAccessControlAllowOrigins(new CorsConfigurazioneOrigin());
  135.                                 corsAllowOrigins = StringUtils.join(configurazioneTmp.getAccessControlAllowOrigins().getOriginList(), ",");
  136.                             }

  137.                             corsAllAllowHeaders = false;
  138.                             if(configurazioneTmp.getAccessControlAllAllowHeaders() != null && configurazioneTmp.getAccessControlAllAllowHeaders().equals(StatoFunzionalita.ABILITATO)) {
  139.                                 corsAllAllowHeaders = true;
  140.                             }
  141.                             if(!corsAllAllowHeaders) {
  142.                                 configurazioneTmp.setAccessControlAllowHeaders(new CorsConfigurazioneHeaders());
  143.                                 corsAllowHeaders = StringUtils.join(configurazioneTmp.getAccessControlAllowHeaders().getHeaderList(), ",");
  144.                             }

  145.                             corsAllAllowMethods = false;
  146.                             if(configurazioneTmp.getAccessControlAllAllowMethods() != null && configurazioneTmp.getAccessControlAllAllowMethods().equals(StatoFunzionalita.ABILITATO)) {
  147.                                 corsAllAllowMethods = true;
  148.                             }
  149.                             if(!corsAllAllowMethods) {
  150.                                 configurazioneTmp.setAccessControlAllowMethods(new CorsConfigurazioneMethods());
  151.                                 corsAllowMethods = StringUtils.join(configurazioneTmp.getAccessControlAllowMethods().getMethodList(), ",");
  152.                             }

  153.                             configurazioneTmp.setAccessControlExposeHeaders(new CorsConfigurazioneHeaders());
  154.                             corsExposeHeaders = StringUtils.join(configurazioneTmp.getAccessControlExposeHeaders().getHeaderList(), ",");

  155.                             corsAllowCredential = false;
  156.                             if(configurazioneTmp.getAccessControlAllowCredentials() != null && configurazioneTmp.getAccessControlAllowCredentials().equals(StatoFunzionalita.ABILITATO)) {
  157.                                 corsAllowCredential = true;
  158.                             }

  159.                             corsMaxAge = false;
  160.                             corsMaxAgeSeconds = -1;
  161.                             if(configurazioneTmp.getAccessControlMaxAge() != null ) {
  162.                                 corsMaxAge = true;
  163.                                 corsMaxAgeSeconds = configurazioneTmp.getAccessControlMaxAge();
  164.                             }
  165.                         }
  166.                     }
  167.                 }
  168.             }

  169.             List<Parameter> lstParam = porteApplicativeHelper.getTitoloPA(parentPA, idsogg, idAsps);

  170.             String labelPerPorta = null;
  171.             if(parentPA!=null && (parentPA.intValue() == PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_CONFIGURAZIONE)) {
  172.                 lstParam.remove(lstParam.size()-1);
  173.                 labelPerPorta = porteApplicativeCore.getLabelRegolaMappingErogazionePortaApplicativa(
  174.                         PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CORS_CONFIGURAZIONE_CONFIG_DI,
  175.                         PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CORS_CONFIGURAZIONE,
  176.                         pa);
  177.             }
  178.             else {
  179.                 labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CORS_CONFIGURAZIONE_CONFIG_DI+idporta;
  180.             }

  181.             if(labelPerPorta.contains(CostantiControlStation.LABEL_DEL_GRUPPO)) {
  182.                 labelPerPorta = labelPerPorta.substring(0, labelPerPorta.indexOf(CostantiControlStation.LABEL_DEL_GRUPPO));
  183.             }
  184.            
  185.             lstParam.add(new Parameter(labelPerPorta,  null));

  186.             // imposta menu' contestuale
  187.             porteApplicativeHelper.impostaComandiMenuContestualePA(idsogg, idAsps);
  188.            
  189.             // edit in progress
  190.             if (porteApplicativeHelper.isEditModeInProgress()) {
  191.                 ServletUtils.setPageDataTitle(pd, lstParam);

  192.                 if(statoCorsPorta == null) {
  193.                     if(oldConfigurazione == null) {
  194.                         statoCorsPorta = CostantiControlStation.VALUE_PARAMETRO_CORS_STATO_DEFAULT;
  195.                     } else {
  196.                         statoCorsPorta = CostantiControlStation.VALUE_PARAMETRO_CORS_STATO_RIDEFINITO;
  197.                         if(oldConfigurazione.getStato() != null && oldConfigurazione.getStato().equals(StatoFunzionalita.ABILITATO)) {
  198.                             corsStato = true;

  199.                             corsTipo = oldConfigurazione.getTipo();
  200.                             if(oldConfigurazione.getTipo() != null && oldConfigurazione.getTipo().equals(TipoGestioneCORS.GATEWAY)) {

  201.                                 corsAllAllowOrigins = true;
  202.                                 if(oldConfigurazione.getAccessControlAllAllowOrigins() != null && oldConfigurazione.getAccessControlAllAllowOrigins().equals(StatoFunzionalita.DISABILITATO)) {
  203.                                     corsAllAllowOrigins = false;

  204.                                     if(oldConfigurazione.getAccessControlAllowOrigins() != null) {
  205.                                         corsAllowOrigins = StringUtils.join(oldConfigurazione.getAccessControlAllowOrigins().getOriginList(), ",");
  206.                                     }
  207.                                 }

  208.                                 corsAllAllowHeaders = false;
  209.                                 if(oldConfigurazione.getAccessControlAllAllowHeaders() != null && oldConfigurazione.getAccessControlAllAllowHeaders().equals(StatoFunzionalita.ABILITATO)) {
  210.                                     corsAllAllowHeaders = true;
  211.                                 }
  212.                                 if(!corsAllAllowHeaders &&
  213.                                     oldConfigurazione.getAccessControlAllowHeaders() != null) {
  214.                                     corsAllowHeaders = StringUtils.join(oldConfigurazione.getAccessControlAllowHeaders().getHeaderList(), ",");
  215.                                 }

  216.                                 corsAllAllowMethods = false;
  217.                                 if(oldConfigurazione.getAccessControlAllAllowMethods() != null && oldConfigurazione.getAccessControlAllAllowMethods().equals(StatoFunzionalita.ABILITATO)) {
  218.                                     corsAllAllowMethods = true;
  219.                                 }
  220.                                 if(!corsAllAllowMethods &&
  221.                                     oldConfigurazione.getAccessControlAllowMethods() != null) {
  222.                                     corsAllowMethods = StringUtils.join(oldConfigurazione.getAccessControlAllowMethods().getMethodList(), ",");
  223.                                 }

  224.                                 if(oldConfigurazione.getAccessControlExposeHeaders() != null) {
  225.                                     corsExposeHeaders = StringUtils.join(oldConfigurazione.getAccessControlExposeHeaders().getHeaderList(), ",");
  226.                                 }

  227.                                 corsAllowCredential = false;
  228.                                 if(oldConfigurazione.getAccessControlAllowCredentials() != null && oldConfigurazione.getAccessControlAllowCredentials().equals(StatoFunzionalita.ABILITATO)) {
  229.                                     corsAllowCredential = true;
  230.                                 }

  231.                                 corsMaxAge = false;
  232.                                 corsMaxAgeSeconds = -1;
  233.                                 if(oldConfigurazione.getAccessControlMaxAge() != null ) {
  234.                                     corsMaxAge = true;
  235.                                     corsMaxAgeSeconds = oldConfigurazione.getAccessControlMaxAge();
  236.                                 }
  237.                             }

  238.                         }
  239.                     }
  240.                 }

  241.                 if(initConfigurazione) {
  242.                     if(statoCorsPorta.equals(CostantiControlStation.VALUE_PARAMETRO_CORS_STATO_RIDEFINITO)) {
  243.                         Configurazione configurazione = confCore.getConfigurazioneGenerale();
  244.                         oldConfigurazione = configurazione.getGestioneCors();
  245.                         corsStato = false;
  246.                         if(oldConfigurazione != null) {
  247.                             if(oldConfigurazione.getStato() != null && oldConfigurazione.getStato().equals(StatoFunzionalita.ABILITATO)) {
  248.                                 corsStato = true;

  249.                                 corsTipo = oldConfigurazione.getTipo();
  250.                                 if(oldConfigurazione.getTipo() != null && oldConfigurazione.getTipo().equals(TipoGestioneCORS.GATEWAY)) {

  251.                                     corsAllAllowOrigins = true;
  252.                                     if(oldConfigurazione.getAccessControlAllAllowOrigins() != null && oldConfigurazione.getAccessControlAllAllowOrigins().equals(StatoFunzionalita.DISABILITATO)) {
  253.                                         corsAllAllowOrigins = false;

  254.                                         if(oldConfigurazione.getAccessControlAllowOrigins() != null) {
  255.                                             corsAllowOrigins = StringUtils.join(oldConfigurazione.getAccessControlAllowOrigins().getOriginList(), ",");
  256.                                         }
  257.                                     }

  258.                                     corsAllAllowHeaders = false;
  259.                                     if(oldConfigurazione.getAccessControlAllAllowHeaders() != null && oldConfigurazione.getAccessControlAllAllowHeaders().equals(StatoFunzionalita.ABILITATO)) {
  260.                                         corsAllAllowHeaders = true;
  261.                                     }
  262.                                     if(!corsAllAllowHeaders &&
  263.                                         oldConfigurazione.getAccessControlAllowHeaders() != null) {
  264.                                         corsAllowHeaders = StringUtils.join(oldConfigurazione.getAccessControlAllowHeaders().getHeaderList(), ",");
  265.                                     }

  266.                                     corsAllAllowMethods = false;
  267.                                     if(oldConfigurazione.getAccessControlAllAllowMethods() != null && oldConfigurazione.getAccessControlAllAllowMethods().equals(StatoFunzionalita.ABILITATO)) {
  268.                                         corsAllAllowMethods = true;
  269.                                     }
  270.                                     if(!corsAllAllowMethods &&
  271.                                         oldConfigurazione.getAccessControlAllowMethods() != null) {
  272.                                         corsAllowMethods = StringUtils.join(oldConfigurazione.getAccessControlAllowMethods().getMethodList(), ",");
  273.                                     }

  274.                                     if(oldConfigurazione.getAccessControlExposeHeaders() != null) {
  275.                                         corsExposeHeaders = StringUtils.join(oldConfigurazione.getAccessControlExposeHeaders().getHeaderList(), ",");
  276.                                     }

  277.                                     corsAllowCredential = false;
  278.                                     if(oldConfigurazione.getAccessControlAllowCredentials() != null && oldConfigurazione.getAccessControlAllowCredentials().equals(StatoFunzionalita.ABILITATO)) {
  279.                                         corsAllowCredential = true;
  280.                                     }

  281.                                     corsMaxAge = false;
  282.                                     corsMaxAgeSeconds = -1;
  283.                                     if(oldConfigurazione.getAccessControlMaxAge() != null ) {
  284.                                         corsMaxAge = true;
  285.                                         corsMaxAgeSeconds = oldConfigurazione.getAccessControlMaxAge();
  286.                                     }
  287.                                 }
  288.                             }
  289.                             else {
  290.                                 corsStato = true;
  291.                                
  292.                                 CorsConfigurazione configurazioneTmp = new CorsConfigurazione();
  293.                                
  294.                                 corsTipo = configurazioneTmp.getTipo();
  295.                                 if(configurazioneTmp.getTipo() != null && configurazioneTmp.getTipo().equals(TipoGestioneCORS.GATEWAY)) {

  296.                                     corsAllAllowOrigins = true;
  297.                                     if(configurazioneTmp.getAccessControlAllAllowOrigins() != null && configurazioneTmp.getAccessControlAllAllowOrigins().equals(StatoFunzionalita.DISABILITATO)) {
  298.                                         corsAllAllowOrigins = false;

  299.                                         configurazioneTmp.setAccessControlAllowOrigins(new CorsConfigurazioneOrigin());
  300.                                         corsAllowOrigins = StringUtils.join(configurazioneTmp.getAccessControlAllowOrigins().getOriginList(), ",");
  301.                                     }

  302.                                     corsAllAllowHeaders = false;
  303.                                     if(configurazioneTmp.getAccessControlAllAllowHeaders() != null && configurazioneTmp.getAccessControlAllAllowHeaders().equals(StatoFunzionalita.ABILITATO)) {
  304.                                         corsAllAllowHeaders = true;
  305.                                     }
  306.                                     if(!corsAllAllowHeaders) {
  307.                                         configurazioneTmp.setAccessControlAllowHeaders(new CorsConfigurazioneHeaders());
  308.                                         corsAllowHeaders = StringUtils.join(configurazioneTmp.getAccessControlAllowHeaders().getHeaderList(), ",");
  309.                                     }

  310.                                     corsAllAllowMethods = false;
  311.                                     if(configurazioneTmp.getAccessControlAllAllowMethods() != null && configurazioneTmp.getAccessControlAllAllowMethods().equals(StatoFunzionalita.ABILITATO)) {
  312.                                         corsAllAllowMethods = true;
  313.                                     }
  314.                                     if(!corsAllAllowMethods) {
  315.                                         configurazioneTmp.setAccessControlAllowMethods(new CorsConfigurazioneMethods());
  316.                                         corsAllowMethods = StringUtils.join(configurazioneTmp.getAccessControlAllowMethods().getMethodList(), ",");
  317.                                     }

  318.                                     configurazioneTmp.setAccessControlExposeHeaders(new CorsConfigurazioneHeaders());
  319.                                     corsExposeHeaders = StringUtils.join(configurazioneTmp.getAccessControlExposeHeaders().getHeaderList(), ",");

  320.                                     corsAllowCredential = false;
  321.                                     if(configurazioneTmp.getAccessControlAllowCredentials() != null && configurazioneTmp.getAccessControlAllowCredentials().equals(StatoFunzionalita.ABILITATO)) {
  322.                                         corsAllowCredential = true;
  323.                                     }

  324.                                     corsMaxAge = false;
  325.                                     corsMaxAgeSeconds = -1;
  326.                                     if(configurazioneTmp.getAccessControlMaxAge() != null ) {
  327.                                         corsMaxAge = true;
  328.                                         corsMaxAgeSeconds = configurazioneTmp.getAccessControlMaxAge();
  329.                                     }
  330.                                 }
  331.                             }
  332.                         }
  333.                     }
  334.                 }

  335.                 // preparo i campi
  336.                 List<DataElement> dati = new ArrayList<>();
  337.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  338.                 porteApplicativeHelper.addConfigurazioneCorsPorteToDati(tipoOperazione, dati, showStato, statoCorsPorta,
  339.                         corsStato, corsTipo, corsAllAllowOrigins, corsAllAllowHeaders, corsAllAllowMethods, corsAllowHeaders, corsAllowOrigins, corsAllowMethods, corsAllowCredential, corsExposeHeaders, corsMaxAge, corsMaxAgeSeconds);

  340.                 dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.OTHER,id, idsogg, null, idAsps, dati);

  341.                 pd.setDati(dati);

  342.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  343.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_GESTIONE_CORS,   ForwardParams.OTHER(""));
  344.             }

  345.             // Controlli sui campi immessi
  346.             boolean isOk = porteApplicativeHelper.checkDataConfigurazioneCorsPorta(tipoOperazione, showStato, statoCorsPorta);
  347.             if (!isOk) {

  348.                 ServletUtils.setPageDataTitle(pd, lstParam);

  349.                 // preparo i campi
  350.                 List<DataElement> dati = new ArrayList<>();
  351.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  352.                 porteApplicativeHelper.addConfigurazioneCorsPorteToDati(tipoOperazione, dati, showStato, statoCorsPorta,
  353.                         corsStato, corsTipo, corsAllAllowOrigins, corsAllAllowHeaders, corsAllAllowMethods,
  354.                         corsAllowHeaders, corsAllowOrigins, corsAllowMethods, corsAllowCredential, corsExposeHeaders, corsMaxAge, corsMaxAgeSeconds);

  355.                 dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.OTHER,id, idsogg, null, idAsps, dati);

  356.                 pd.setDati(dati);

  357.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  358.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_GESTIONE_CORS,   ForwardParams.OTHER(""));
  359.             }

  360.             CorsConfigurazione newConfigurazione = null;
  361.             if(statoCorsPorta.equals(CostantiControlStation.VALUE_PARAMETRO_CORS_STATO_RIDEFINITO)) {
  362.                 newConfigurazione = porteApplicativeHelper.getGestioneCors(corsStato, corsTipo, corsAllAllowOrigins, corsAllAllowHeaders, corsAllAllowMethods,
  363.                         corsAllowHeaders, corsAllowOrigins, corsAllowMethods, corsAllowCredential, corsExposeHeaders, corsMaxAge, corsMaxAgeSeconds);
  364.             }
  365.            
  366.             pa.setGestioneCors(newConfigurazione);
  367.             porteApplicativeCore.performUpdateOperation(userLogin, porteApplicativeHelper.smista(), pa);
  368.             // Preparo la lista
  369.             pd.setMessage(PorteApplicativeCostanti.LABEL_PORTE_APPLICATIVE_CORS_CON_SUCCESSO, Costanti.MESSAGE_TYPE_INFO);

  370.             pa = porteApplicativeCore.getPortaApplicativa(idInt);
  371.             idporta = pa.getNome();

  372.             ServletUtils.setPageDataTitle(pd, lstParam);

  373.             // preparo i campi
  374.             List<DataElement> dati = new ArrayList<>();
  375.             dati.add(ServletUtils.getDataElementForEditModeFinished());

  376.             // ricarico la configurazione

  377.             CorsConfigurazione configurazioneAggiornata = pa.getGestioneCors();
  378.            
  379.             if(configurazioneAggiornata == null) {
  380.                 statoCorsPorta = CostantiControlStation.VALUE_PARAMETRO_CORS_STATO_DEFAULT;
  381.             } else {
  382.                 statoCorsPorta = CostantiControlStation.VALUE_PARAMETRO_CORS_STATO_RIDEFINITO;
  383.                 if(configurazioneAggiornata.getStato() != null && configurazioneAggiornata.getStato().equals(StatoFunzionalita.ABILITATO)) {
  384.                     corsStato = true;

  385.                     corsTipo = configurazioneAggiornata.getTipo();
  386.                     if(configurazioneAggiornata.getTipo() != null && configurazioneAggiornata.getTipo().equals(TipoGestioneCORS.GATEWAY)) {

  387.                         corsAllAllowOrigins = true;
  388.                         if(configurazioneAggiornata.getAccessControlAllAllowOrigins() != null && configurazioneAggiornata.getAccessControlAllAllowOrigins().equals(StatoFunzionalita.DISABILITATO)) {
  389.                             corsAllAllowOrigins = false;

  390.                             if(configurazioneAggiornata.getAccessControlAllowOrigins() != null) {
  391.                                 corsAllowOrigins = StringUtils.join(configurazioneAggiornata.getAccessControlAllowOrigins().getOriginList(), ",");
  392.                             }
  393.                         }

  394.                         corsAllAllowHeaders = false;
  395.                         if(configurazioneAggiornata.getAccessControlAllAllowHeaders() != null && configurazioneAggiornata.getAccessControlAllAllowHeaders().equals(StatoFunzionalita.ABILITATO)) {
  396.                             corsAllAllowHeaders = true;
  397.                         }
  398.                         if(!corsAllAllowHeaders &&
  399.                             configurazioneAggiornata.getAccessControlAllowHeaders() != null) {
  400.                             corsAllowHeaders = StringUtils.join(configurazioneAggiornata.getAccessControlAllowHeaders().getHeaderList(), ",");
  401.                         }

  402.                         corsAllAllowMethods = false;
  403.                         if(configurazioneAggiornata.getAccessControlAllAllowMethods() != null && configurazioneAggiornata.getAccessControlAllAllowMethods().equals(StatoFunzionalita.ABILITATO)) {
  404.                             corsAllAllowMethods = true;
  405.                         }
  406.                         if(!corsAllAllowMethods &&
  407.                             configurazioneAggiornata.getAccessControlAllowMethods() != null) {
  408.                             corsAllowMethods = StringUtils.join(configurazioneAggiornata.getAccessControlAllowMethods().getMethodList(), ",");
  409.                         }

  410.                         if(configurazioneAggiornata.getAccessControlExposeHeaders() != null) {
  411.                             corsExposeHeaders = StringUtils.join(configurazioneAggiornata.getAccessControlExposeHeaders().getHeaderList(), ",");
  412.                         }

  413.                         corsAllowCredential = false;
  414.                         if(configurazioneAggiornata.getAccessControlAllowCredentials() != null && configurazioneAggiornata.getAccessControlAllowCredentials().equals(StatoFunzionalita.ABILITATO)) {
  415.                             corsAllowCredential = true;
  416.                         }

  417.                         corsMaxAge = false;
  418.                         corsMaxAgeSeconds = -1;
  419.                         if(configurazioneAggiornata.getAccessControlMaxAge() != null ) {
  420.                             corsMaxAge = true;
  421.                             corsMaxAgeSeconds = configurazioneAggiornata.getAccessControlMaxAge();
  422.                         }
  423.                     }

  424.                 }
  425.             }

  426.             porteApplicativeHelper.addConfigurazioneCorsPorteToDati(tipoOperazione, dati, showStato, statoCorsPorta,
  427.                     corsStato, corsTipo, corsAllAllowOrigins, corsAllAllowHeaders, corsAllAllowMethods,
  428.                     corsAllowHeaders, corsAllowOrigins, corsAllowMethods, corsAllowCredential, corsExposeHeaders, corsMaxAge, corsMaxAgeSeconds);

  429.             dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.OTHER,id, idsogg, null, idAsps, dati);

  430.             pd.setDati(dati);

  431.             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  432.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_GESTIONE_CORS, ForwardParams.OTHER(""));
  433.         } catch (Exception e) {
  434.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  435.                     PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_GESTIONE_CORS, ForwardParams.OTHER(""));
  436.         }
  437.     }

  438. }