PolicyGestioneToken.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.pdd.core.token;

  21. import java.io.Serializable;
  22. import java.lang.reflect.InvocationTargetException;
  23. import java.text.MessageFormat;
  24. import java.util.List;
  25. import java.util.Properties;

  26. import org.apache.commons.lang.StringUtils;
  27. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  28. import org.openspcoop2.pdd.config.dynamic.PddPluginLoader;
  29. import org.openspcoop2.pdd.core.token.parser.BasicDynamicDiscoveryParser;
  30. import org.openspcoop2.pdd.core.token.parser.BasicTokenParser;
  31. import org.openspcoop2.pdd.core.token.parser.IDynamicDiscoveryParser;
  32. import org.openspcoop2.pdd.core.token.parser.ITokenParser;
  33. import org.openspcoop2.pdd.core.token.parser.TipologiaClaims;
  34. import org.openspcoop2.security.message.constants.SecurityConstants;
  35. import org.openspcoop2.security.message.jose.JOSEUtils;
  36. import org.openspcoop2.utils.resources.ClassLoaderUtilities;
  37. import org.openspcoop2.utils.transport.http.HttpRequestMethod;

  38. /**    
  39.  * PolicyGestioneToken
  40.  *
  41.  * @author Poli Andrea (poli@link.it)
  42.  * @author $Author$
  43.  * @version $Rev$, $Date$
  44.  */
  45. public class PolicyGestioneToken extends AbstractPolicyToken implements Serializable {

  46.     /**
  47.      *
  48.      */
  49.     private static final long serialVersionUID = 1L;
  50.    
  51.     private boolean tokenOpzionale;
  52.    
  53.     private boolean dynamicDiscovery;
  54.    
  55.     private boolean validazioneJWT;
  56.     private boolean validazioneJWTWarningOnly;
  57.    
  58.     private boolean introspection;
  59.     private boolean introspectionWarningOnly;
  60.    
  61.     private boolean userInfo;
  62.     private boolean userInfoWarningOnly;
  63.    
  64.     private boolean forwardToken;
  65.    
  66.    
  67.     public boolean isTokenOpzionale() {
  68.         return this.tokenOpzionale;
  69.     }
  70.     public void setTokenOpzionale(boolean tokenOpzionale) {
  71.         this.tokenOpzionale = tokenOpzionale;
  72.     }
  73.     public boolean isDynamicDiscovery() {
  74.         return this.dynamicDiscovery;
  75.     }
  76.     public void setDynamicDiscovery(boolean dynamicDiscovery) {
  77.         this.dynamicDiscovery = dynamicDiscovery;
  78.     }
  79.     public boolean isValidazioneJWT() {
  80.         return this.validazioneJWT;
  81.     }
  82.     public void setValidazioneJWT(boolean validazioneJWT) {
  83.         this.validazioneJWT = validazioneJWT;
  84.     }
  85.     public boolean isValidazioneJWTWarningOnly() {
  86.         return this.validazioneJWTWarningOnly;
  87.     }
  88.     public void setValidazioneJWTWarningOnly(boolean validazioneJWTWarningOnly) {
  89.         this.validazioneJWTWarningOnly = validazioneJWTWarningOnly;
  90.     }
  91.     public boolean isIntrospection() {
  92.         return this.introspection;
  93.     }
  94.     public void setIntrospection(boolean introspection) {
  95.         this.introspection = introspection;
  96.     }
  97.     public boolean isIntrospectionWarningOnly() {
  98.         return this.introspectionWarningOnly;
  99.     }
  100.     public void setIntrospectionWarningOnly(boolean introspectionWarningOnly) {
  101.         this.introspectionWarningOnly = introspectionWarningOnly;
  102.     }
  103.     public boolean isUserInfo() {
  104.         return this.userInfo;
  105.     }
  106.     public void setUserInfo(boolean userInfo) {
  107.         this.userInfo = userInfo;
  108.     }
  109.     public boolean isUserInfoWarningOnly() {
  110.         return this.userInfoWarningOnly;
  111.     }
  112.     public void setUserInfoWarningOnly(boolean userInfoWarningOnly) {
  113.         this.userInfoWarningOnly = userInfoWarningOnly;
  114.     }
  115.     public boolean isForwardToken() {
  116.         return this.forwardToken;
  117.     }
  118.     public void setForwardToken(boolean forwardToken) {
  119.         this.forwardToken = forwardToken;
  120.     }
  121.    
  122.     public String getRealm() {
  123.         String realm = this.defaultProperties.getProperty(Costanti.POLICY_REALM);
  124.         if(realm==null) {
  125.             realm = this.name;
  126.         }
  127.         return realm;
  128.     }
  129.     public boolean isMessageErrorGenerateEmptyMessage() {
  130.         boolean genericError = true;
  131.         String tmp = this.defaultProperties.getProperty(Costanti.POLICY_MESSAGE_ERROR_BODY_EMPTY);
  132.         if(tmp!=null) {
  133.             genericError = Boolean.valueOf(tmp);
  134.         }
  135.         return genericError;
  136.     }
  137.     public boolean isMessageErrorGenerateGenericMessage() {
  138.         boolean genericError = true;
  139.         String tmp = this.defaultProperties.getProperty(Costanti.POLICY_MESSAGE_ERROR_GENERIC_MESSAGE);
  140.         if(tmp!=null) {
  141.             genericError = Boolean.valueOf(tmp);
  142.         }
  143.         return genericError;
  144.     }
  145.    
  146.     public String getLabelAzioniGestioneToken() {
  147.         StringBuilder bf = new StringBuilder();
  148.         if(this.isValidazioneJWT() || this.isIntrospection() || this.isUserInfo()) {
  149.             bf.append("Validazione ");
  150.             boolean first = true;
  151.             if(this.isValidazioneJWT()) {
  152.                 bf.append("JWT");
  153.                 first = false;
  154.             }
  155.             if(this.isIntrospection()) {
  156.                 if(!first) {
  157.                     bf.append(",");
  158.                 }
  159.                 bf.append("Introspection");
  160.                 first = false;
  161.             }
  162.             if(this.isUserInfo()) {
  163.                 if(!first) {
  164.                     bf.append(",");
  165.                 }
  166.                 bf.append("UserInfo");
  167.                 /**first = false;*/
  168.             }
  169.             return bf.toString();
  170.         }
  171.         else {
  172.             return "Nessuna Validazione Attiva";
  173.         }
  174.     }
  175.    
  176.     public String getAzioniGestioneToken() {
  177.         StringBuilder bf = new StringBuilder();
  178.         if(this.isValidazioneJWT() || this.isIntrospection() || this.isUserInfo()) {
  179.             boolean first = true;
  180.             if(this.isValidazioneJWT()) {
  181.                 bf.append(Costanti.GESTIONE_TOKEN_VALIDATION_ACTION_JWT);
  182.                 first = false;
  183.             }
  184.             if(this.isIntrospection()) {
  185.                 if(!first) {
  186.                     bf.append(",");
  187.                 }
  188.                 bf.append(Costanti.GESTIONE_TOKEN_VALIDATION_ACTION_INTROSPECTION);
  189.                 first = false;
  190.             }
  191.             if(this.isUserInfo()) {
  192.                 if(!first) {
  193.                     bf.append(",");
  194.                 }
  195.                 bf.append(Costanti.GESTIONE_TOKEN_VALIDATION_ACTION_USER_INFO);
  196.                 /**first = false;*/
  197.             }
  198.             return bf.toString();
  199.         }
  200.         else {
  201.             return Costanti.GESTIONE_TOKEN_VALIDATION_ACTION_NONE;
  202.         }
  203.     }
  204.    
  205.     public String getTipoToken() {
  206.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_TYPE);
  207.     }
  208.     public String getLabelTipoToken() {
  209.         String tokenType = this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_TYPE);
  210.         if(Costanti.POLICY_TOKEN_TYPE_OPAQUE.equals(tokenType)) {
  211.             return "Opaco";
  212.         }
  213.         else {
  214.             return tokenType.toUpperCase();
  215.         }
  216.     }
  217.    
  218.     public String getTokenSource() {
  219.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_SOURCE);
  220.     }
  221.     public String getTokenSourceHeaderName() {
  222.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_SOURCE_CUSTOM_HEADER_NAME);
  223.     }
  224.     public String getTokenSourceUrlPropertyName() {
  225.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_SOURCE_CUSTOM_URL_PROPERTY_NAME);
  226.     }
  227.        
  228.     public String getLabelPosizioneToken() {
  229.         String position = this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_SOURCE);
  230.         if(Costanti.POLICY_TOKEN_SOURCE_RFC6750.equals(position)) {
  231.             return Costanti.POLICY_TOKEN_SOURCE_RFC6750_LABEL;
  232.         }
  233.         else if(Costanti.POLICY_TOKEN_SOURCE_RFC6750_HEADER.equals(position)) {
  234.             return Costanti.POLICY_TOKEN_SOURCE_RFC6750_HEADER_LABEL;
  235.         }
  236.         else if(Costanti.POLICY_TOKEN_SOURCE_RFC6750_FORM.equals(position)) {
  237.             return Costanti.POLICY_TOKEN_SOURCE_RFC6750_FORM_LABEL;
  238.         }
  239.         else if(Costanti.POLICY_TOKEN_SOURCE_RFC6750_URL.equals(position)) {
  240.             return Costanti.POLICY_TOKEN_SOURCE_RFC6750_URL_LABEL;
  241.         }
  242.         else if(Costanti.POLICY_TOKEN_SOURCE_CUSTOM_HEADER.equals(position)) {
  243.             return Costanti.POLICY_TOKEN_SOURCE_CUSTOM_HEADER_LABEL.replace(Costanti.POLICY_TOKEN_SOURCE_CUSTOM_TEMPLATE_LABEL,
  244.                     this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_SOURCE_CUSTOM_HEADER_NAME));
  245.         }
  246.         else if(Costanti.POLICY_TOKEN_SOURCE_CUSTOM_URL.equals(position)) {
  247.             return Costanti.POLICY_TOKEN_SOURCE_CUSTOM_URL_LABEL.replace(Costanti.POLICY_TOKEN_SOURCE_CUSTOM_TEMPLATE_LABEL,
  248.                     this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_SOURCE_CUSTOM_URL_PROPERTY_NAME));
  249.         }
  250.         return "Sconosciuto"; // non dovrebbe mai succedere, esiste la validazione
  251.     }
  252.    
  253.     public boolean isEndpointHttps() {
  254.         return isEndpointHttps(true, true);
  255.     }
  256.     public boolean isEndpointHttps(boolean checkIntrospection, boolean checkUserInfo) {
  257.         // Devo considerare anche la possibilitĆ  che sia abilitato solamente con clientAuth su introspection o userinfo
  258.         boolean enabled = TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_ENDPOINT_HTTPS_STATO);
  259.         if(!enabled && checkIntrospection && TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_INTROSPECTION_AUTH_SSL_STATO)) {
  260.             enabled = true;
  261.         }
  262.         if(!enabled && checkUserInfo && TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_USER_INFO_AUTH_SSL_STATO)) {
  263.             enabled = true;
  264.         }
  265.         return enabled;
  266.     }
  267.    
  268.    
  269.     public String getDynamicDiscoveryEndpoint() {
  270.         return this.defaultProperties.getProperty(Costanti.POLICY_DISCOVERY_URL);
  271.     }
  272.     public TipologiaClaims getDynamicDiscoveryType() {
  273.         return TipologiaClaims.valueOf(this.defaultProperties.getProperty(Costanti.POLICY_DISCOVERY_CLAIMS_PARSER_TYPE));
  274.     }
  275.     public IDynamicDiscoveryParser getDynamicDiscoveryParser() throws TokenException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
  276.         IDynamicDiscoveryParser parser = null;
  277.         TipologiaClaims tipologiaClaims = TipologiaClaims.valueOf(this.defaultProperties.getProperty(Costanti.POLICY_DISCOVERY_CLAIMS_PARSER_TYPE));
  278.         if(TipologiaClaims.CUSTOM.equals(tipologiaClaims)) {
  279.             String className = this.defaultProperties.getProperty(Costanti.POLICY_DISCOVERY_CLAIMS_PARSER_CLASS_NAME);
  280.             if(className!=null && StringUtils.isNotEmpty(className) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(className)) {
  281.                 parser = (IDynamicDiscoveryParser) ClassLoaderUtilities.newInstance(className);
  282.             }
  283.             else {
  284.                 String tipo = this.defaultProperties.getProperty(Costanti.POLICY_DISCOVERY_CLAIMS_PARSER_PLUGIN_TYPE);
  285.                 if(tipo!=null && StringUtils.isNotEmpty(tipo) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(tipo)) {
  286.                     try{
  287.                         PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
  288.                         parser = pluginLoader.newDynamicDiscovery(tipo);
  289.                     }catch(Exception e){
  290.                         throw new TokenException(e.getMessage(),e); // descrizione errore giĆ  corretta
  291.                     }
  292.                 }
  293.                 else {
  294.                     throw new TokenException("Deve essere selezionato un plugin per il parser dei claims della risposta del servizio 'Introspection'");
  295.                 }
  296.             }
  297.         }
  298.         else{
  299.             parser = new BasicDynamicDiscoveryParser(tipologiaClaims, TokenUtilities.getDynamicDiscoveryClaimsMappingProperties(this.properties));
  300.         }
  301.         return parser;
  302.     }
  303.    
  304.    
  305.    
  306.     public boolean isValidazioneJWTLocationHttp() {
  307.         String location = this.getValidazioneJWTLocation();
  308.         return location !=null &&
  309.                 (location.startsWith(JOSEUtils.HTTP_PROTOCOL) || location.startsWith(JOSEUtils.HTTPS_PROTOCOL));
  310.     }
  311.     public String getValidazioneJWTLocation() {
  312.         if(this.properties!=null) {
  313.             Properties p = this.properties.get(Costanti.POLICY_VALIDAZIONE_JWS_VERIFICA_PROP_REF_ID);
  314.             if(p!=null) {
  315.                 return p.getProperty(SecurityConstants.JOSE_KEYSTORE_FILE);
  316.             }
  317.         }
  318.         return null;
  319.     }
  320.     public boolean isValidazioneJWTSaveErrorInCache() {
  321.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_VALIDAZIONE_SAVE_ERROR_IN_CACHE);  
  322.     }
  323.     public ITokenParser getValidazioneJWTTokenParser() throws TokenException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
  324.         ITokenParser parser = null;
  325.         TipologiaClaims tipologiaClaims = TipologiaClaims.valueOf(this.defaultProperties.getProperty(Costanti.POLICY_VALIDAZIONE_CLAIMS_PARSER_TYPE));
  326.         if(TipologiaClaims.CUSTOM.equals(tipologiaClaims)) {
  327.             String className = this.defaultProperties.getProperty(Costanti.POLICY_VALIDAZIONE_CLAIMS_PARSER_CLASS_NAME);
  328.             if(className!=null && StringUtils.isNotEmpty(className) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(className)) {
  329.                 parser = (ITokenParser) ClassLoaderUtilities.newInstance(className);
  330.             }
  331.             else {
  332.                 String tipo = this.defaultProperties.getProperty(Costanti.POLICY_VALIDAZIONE_CLAIMS_PARSER_PLUGIN_TYPE);
  333.                 if(tipo!=null && StringUtils.isNotEmpty(tipo) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(tipo)) {
  334.                     try{
  335.                         PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
  336.                         parser = pluginLoader.newTokenValidazione(tipo);
  337.                     }catch(Exception e){
  338.                         throw new TokenException(e.getMessage(),e); // descrizione errore giĆ  corretta
  339.                     }
  340.                 }
  341.                 else {
  342.                     throw new TokenException("Deve essere selezionato un plugin per il parser del token JWT");
  343.                 }
  344.             }
  345.         }
  346.         else{
  347.             parser = new BasicTokenParser(tipologiaClaims, TokenUtilities.getValidazioneJwtClaimsMappingProperties(this.properties));
  348.         }
  349.         return parser;
  350.     }
  351.     public String getValidazioneJWTOcspPolicy() {
  352.         return this.defaultProperties.getProperty(SecurityConstants.SIGNATURE_OCSP);
  353.     }
  354.     public String getValidazioneJWTCrl() {
  355.         return this.defaultProperties.getProperty(SecurityConstants.SIGNATURE_CRL);
  356.     }
  357.    
  358.     public boolean isValidazioneJWTHeader() {
  359.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_VALIDAZIONE_JWS_HEADER);    
  360.     }
  361.     public List<String> getValidazioneJWTHeaderTyp() {
  362.         return TokenUtilities.getClaims(this.defaultProperties, Costanti.POLICY_VALIDAZIONE_JWS_HEADER_TYP);
  363.     }
  364.     public List<String> getValidazioneJWTHeaderCty() {
  365.         return TokenUtilities.getClaims(this.defaultProperties, Costanti.POLICY_VALIDAZIONE_JWS_HEADER_CTY);
  366.     }
  367.     public List<String> getValidazioneJWTHeaderAlg() {
  368.         return TokenUtilities.getClaims(this.defaultProperties, Costanti.POLICY_VALIDAZIONE_JWS_HEADER_ALG);
  369.     }
  370.    
  371.     public String getIntrospectionEndpoint() {
  372.         return this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_URL);
  373.     }
  374.     public boolean isIntrospectionSaveErrorInCache() {
  375.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_INTROSPECTION_SAVE_ERROR_IN_CACHE);
  376.     }
  377.     public HttpRequestMethod getIntrospectionHttpMethod() {
  378.         return HttpRequestMethod.valueOf(this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_HTTP_METHOD));
  379.     }
  380.     public TipoTokenRequest getIntrospectionTipoTokenRequest() {
  381.         return TipoTokenRequest.valueOf(this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_REQUEST_TOKEN_POSITION));
  382.     }
  383.     public String getIntrospectionTipoTokenRequestHeaderName() {
  384.         return this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_REQUEST_TOKEN_POSITION_HEADER_NAME);
  385.     }
  386.     public String getIntrospectionTipoTokenRequestUrlPropertyName() {
  387.         return this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_REQUEST_TOKEN_POSITION_URL_PROPERTY_NAME);
  388.     }
  389.     public String getIntrospectionTipoTokenRequestFormPropertyName() {
  390.         return this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_REQUEST_TOKEN_POSITION_FORM_PROPERTY_NAME);
  391.     }
  392.     public String getIntrospectionContentType() {
  393.         return this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_CONTENT_TYPE);
  394.     }
  395.     public ITokenParser getIntrospectionTokenParser() throws TokenException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
  396.         ITokenParser parser = null;
  397.         TipologiaClaims tipologiaClaims = TipologiaClaims.valueOf(this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_CLAIMS_PARSER_TYPE));
  398.         if(TipologiaClaims.CUSTOM.equals(tipologiaClaims)) {
  399.             String className = this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_CLAIMS_PARSER_CLASS_NAME);
  400.             if(className!=null && StringUtils.isNotEmpty(className) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(className)) {
  401.                 parser = (ITokenParser) ClassLoaderUtilities.newInstance(className);
  402.             }
  403.             else {
  404.                 String tipo = this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_CLAIMS_PARSER_PLUGIN_TYPE);
  405.                 if(tipo!=null && StringUtils.isNotEmpty(tipo) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(tipo)) {
  406.                     try{
  407.                         PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
  408.                         parser = pluginLoader.newTokenValidazione(tipo);
  409.                     }catch(Exception e){
  410.                         throw new TokenException(e.getMessage(),e); // descrizione errore giĆ  corretta
  411.                     }
  412.                 }
  413.                 else {
  414.                     throw new TokenException("Deve essere selezionato un plugin per il parser dei claims della risposta del servizio 'Introspection'");
  415.                 }
  416.             }
  417.         }
  418.         else{
  419.             parser = new BasicTokenParser(tipologiaClaims, TokenUtilities.getIntrospectionClaimsMappingProperties(this.properties));
  420.         }
  421.         return parser;
  422.     }
  423.     public boolean isIntrospectionBasicAuthentication() {
  424.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_INTROSPECTION_AUTH_BASIC_STATO);    
  425.     }
  426.     public String getIntrospectionBasicAuthenticationUsername() {
  427.         return this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_AUTH_BASIC_USERNAME);
  428.     }
  429.     public String getIntrospectionBasicAuthenticationPassword() {
  430.         return this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_AUTH_BASIC_PASSWORD);
  431.     }
  432.     public boolean isIntrospectionBearerAuthentication() {
  433.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_INTROSPECTION_AUTH_BEARER_STATO);  
  434.     }
  435.     public String getIntrospectionBeareAuthenticationToken() {
  436.         return this.defaultProperties.getProperty(Costanti.POLICY_INTROSPECTION_AUTH_BEARER_TOKEN);
  437.     }
  438.     public boolean isIntrospectionHttpsAuthentication() {
  439.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_INTROSPECTION_AUTH_SSL_STATO);  
  440.     }
  441.    
  442.     public String getUserInfoEndpoint() {
  443.         return this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_URL);
  444.     }
  445.     public boolean isUserInfoSaveErrorInCache() {
  446.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_USER_INFO_SAVE_ERROR_IN_CACHE);
  447.     }
  448.     public HttpRequestMethod getUserInfoHttpMethod() {
  449.         return HttpRequestMethod.valueOf(this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_HTTP_METHOD));
  450.     }
  451.     public TipoTokenRequest getUserInfoTipoTokenRequest() {
  452.         return TipoTokenRequest.valueOf(this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_REQUEST_TOKEN_POSITION));
  453.     }
  454.     public String getUserInfoTipoTokenRequestHeaderName() {
  455.         return this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_REQUEST_TOKEN_POSITION_HEADER_NAME);
  456.     }
  457.     public String getUserInfoTipoTokenRequestUrlPropertyName() {
  458.         return this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_REQUEST_TOKEN_POSITION_URL_PROPERTY_NAME);
  459.     }
  460.     public String getUserInfoTipoTokenRequestFormPropertyName() {
  461.         return this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_REQUEST_TOKEN_POSITION_FORM_PROPERTY_NAME);
  462.     }
  463.     public String getUserInfoContentType() {
  464.         return this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_CONTENT_TYPE);
  465.     }
  466.     public ITokenParser getUserInfoTokenParser() throws TokenException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
  467.         ITokenParser parser = null;
  468.         TipologiaClaims tipologiaClaims = TipologiaClaims.valueOf(this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_CLAIMS_PARSER_TYPE));
  469.         if(TipologiaClaims.CUSTOM.equals(tipologiaClaims)) {
  470.             String className = this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_CLAIMS_PARSER_CLASS_NAME);
  471.             if(className!=null && StringUtils.isNotEmpty(className) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(className)) {
  472.                 parser = (ITokenParser) ClassLoaderUtilities.newInstance(className);
  473.             }
  474.             else {
  475.                 String tipo = this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_CLAIMS_PARSER_PLUGIN_TYPE);
  476.                 if(tipo!=null && StringUtils.isNotEmpty(tipo) && !CostantiConfigurazione.POLICY_ID_NON_DEFINITA.equals(tipo)) {
  477.                     try{
  478.                         PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
  479.                         parser = pluginLoader.newTokenValidazione(tipo);
  480.                     }catch(Exception e){
  481.                         throw new TokenException(e.getMessage(),e); // descrizione errore giĆ  corretta
  482.                     }
  483.                 }
  484.                 else {
  485.                     throw new TokenException("Deve essere selezionato un plugin per il parser dei claims della risposta del servizio 'UserInfo'");
  486.                 }
  487.             }
  488.         }
  489.         else{
  490.             parser = new BasicTokenParser(tipologiaClaims, TokenUtilities.getUserInfoClaimsMappingProperties(this.properties));
  491.         }
  492.         return parser;
  493.     }
  494.     public boolean isUserInfoBasicAuthentication() {
  495.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_USER_INFO_AUTH_BASIC_STATO);    
  496.     }
  497.     public String getUserInfoBasicAuthenticationUsername() {
  498.         return this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_AUTH_BASIC_USERNAME);
  499.     }
  500.     public String getUserInfoBasicAuthenticationPassword() {
  501.         return this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_AUTH_BASIC_PASSWORD);
  502.     }
  503.     public boolean isUserInfoBearerAuthentication() {
  504.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_USER_INFO_AUTH_BEARER_STATO);  
  505.     }
  506.     public String getUserInfoBeareAuthenticationToken() {
  507.         return this.defaultProperties.getProperty(Costanti.POLICY_USER_INFO_AUTH_BEARER_TOKEN);
  508.     }
  509.     public boolean isUserInfoHttpsAuthentication() {
  510.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_USER_INFO_AUTH_SSL_STATO);  
  511.     }
  512.    
  513.    
  514.     public boolean isForwardTokenTrasparente() {
  515.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_TOKEN_FORWARD_TRASPARENTE_STATO);  
  516.     }
  517.     public String getForwardTokenTrasparenteMode() {
  518.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_TRASPARENTE_MODE);
  519.     }
  520.     public String getForwardTokenTrasparenteModeCustomHeader() {
  521.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_CUSTOM_HEADER_NAME);
  522.     }
  523.     public String getForwardTokenTrasparenteModeCustomUrl() {
  524.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_CUSTOM_URL_PARAMETER_NAME);
  525.     }
  526.    
  527.     public boolean isForwardTokenInformazioniRaccolte() {
  528.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_STATO);
  529.     }
  530.     public String getForwardTokenInformazioniRaccolteMode() {
  531.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE);
  532.     }
  533.     public boolean isForwardTokenInformazioniRaccolteEncodeBase64() {
  534.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_ENCODE_BASE64);
  535.     }
  536.    
  537.     public boolean isForwardTokenInformazioniRaccolteValidazioneJWT() {
  538.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_VALIDAZIONE_JWT);  
  539.     }
  540.     public String getForwardTokenInformazioniRaccolteValidazioneJWTMode() {
  541.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_VALIDAZIONE_JWT_MODE);
  542.     }
  543.     public String getForwardTokenInformazioniRaccolteValidazioneJWTModeHeaderName() {
  544.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_VALIDAZIONE_JWT_MODE_HEADER_NAME);
  545.     }
  546.     public String getForwardTokenInformazioniRaccolteValidazioneJWTModeQueryParameterName() {
  547.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_VALIDAZIONE_JWT_MODE_URL_PARAMETER_NAME);
  548.     }
  549.    
  550.     public boolean isForwardTokenInformazioniRaccolteIntrospection() {
  551.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_INTROSPECTION);
  552.     }
  553.     public String getForwardTokenInformazioniRaccolteIntrospectionMode() {
  554.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_INTROSPECTION_MODE);
  555.     }
  556.     public String getForwardTokenInformazioniRaccolteIntrospectionModeHeaderName() {
  557.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_INTROSPECTION_MODE_HEADER_NAME);
  558.     }
  559.     public String getForwardTokenInformazioniRaccolteIntrospectionModeQueryParameterName() {
  560.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_INTROSPECTION_MODE_URL_PARAMETER_NAME);
  561.     }
  562.    
  563.     public boolean isForwardTokenInformazioniRaccolteUserInfo() {
  564.         return TokenUtilities.isEnabled(this.defaultProperties, Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_USER_INFO);
  565.     }
  566.     public String getForwardTokenInformazioniRaccolteUserInfoMode() {
  567.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_USER_INFO_MODE);
  568.     }
  569.     public String getForwardTokenInformazioniRaccolteUserInfoModeHeaderName() {
  570.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_USER_INFO_MODE_HEADER_NAME);
  571.     }
  572.     public String getForwardTokenInformazioniRaccolteUserInfoModeQueryParameterName() {
  573.         return this.defaultProperties.getProperty(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_USER_INFO_MODE_URL_PARAMETER_NAME);
  574.     }

  575.     public String getAzioniForwardToken() {
  576.         StringBuilder bf = new StringBuilder();
  577.         if(this.isForwardToken()) {
  578.             boolean first = true;
  579.             if(this.isForwardTokenTrasparente()) {
  580.                 String mode = this.getForwardTokenTrasparenteMode();
  581.                 addPolicyTokenForwardTrasparente(mode, bf);
  582.                 first = false;
  583.             }
  584.             if(this.isForwardTokenInformazioniRaccolte()) {
  585.                 if(!first) {
  586.                     bf.append(",");
  587.                 }
  588.                 String mode = this.getForwardTokenInformazioniRaccolteMode();
  589.                 addPolicyTokenForwardInfoRaccolte(mode, bf);
  590.                 /**first = false;*/
  591.             }
  592.             return bf.toString();
  593.         }
  594.         else {
  595.             return "Disabilitato";
  596.         }
  597.     }
  598.     private void addPolicyTokenForwardTrasparente(String mode, StringBuilder bf) {
  599.         if(Costanti.POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_AS_RECEIVED.equals(mode)) {
  600.             bf.append(Costanti.LABEL_POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_AS_RECEIVED_ORIGINALE);
  601.         }
  602.         else if(Costanti.POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_RFC6750_HEADER.equals(mode)) {
  603.             bf.append(Costanti.LABEL_POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_RFC6750_HEADER);
  604.         }
  605.         else if(Costanti.POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_RFC6750_URL.equals(mode)) {
  606.             bf.append(Costanti.LABEL_POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_RFC6750_URL);
  607.         }
  608.         else if(Costanti.POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_CUSTOM_HEADER.equals(mode)) {
  609.             bf.append(MessageFormat.format(Costanti.LABEL_POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_CUSTOM_HEADER,getForwardTokenTrasparenteModeCustomHeader()));
  610.         }
  611.         else if(Costanti.POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_CUSTOM_URL.equals(mode)) {
  612.             bf.append(MessageFormat.format(Costanti.LABEL_POLICY_TOKEN_FORWARD_TRASPARENTE_MODE_CUSTOM_URL,getForwardTokenTrasparenteModeCustomUrl()));
  613.         }
  614.         else {
  615.             bf.append("Originale '"+mode+"'");
  616.         }
  617.     }
  618.     private void addPolicyTokenForwardInfoRaccolte(String mode, StringBuilder bf) {
  619.         if(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_OP2_HEADERS.equals(mode)) {
  620.             bf.append(Costanti.LABEL_POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_OP2_HEADERS);
  621.         }
  622.         else if(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_OP2_JSON.equals(mode)) {
  623.             bf.append(Costanti.LABEL_POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_OP2_JSON);
  624.         }
  625.         else if(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_OP2_JWS.equals(mode)) {
  626.             bf.append(Costanti.LABEL_POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_OP2_JWS);
  627.         }
  628.         else if(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JWS.equals(mode)) {
  629.             bf.append(Costanti.LABEL_POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JWS);
  630.         }
  631.         else if(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JWE.equals(mode)) {
  632.             bf.append(Costanti.LABEL_POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JWE);
  633.         }
  634.         else if(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JSON.equals(mode)) {
  635.             bf.append(Costanti.LABEL_POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JSON);
  636.         }
  637.         else {
  638.             bf.append(mode);
  639.         }
  640.     }
  641. }