PDNDTokenInfo.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.protocol.sdk;

  21. import java.io.Serializable;
  22. import java.util.HashMap;
  23. import java.util.Map;

  24. import org.openspcoop2.utils.LoggerWrapperFactory;
  25. import org.openspcoop2.utils.json.JsonPathExpressionEngine;
  26. import org.slf4j.Logger;

  27. /**    
  28.  * PDNDTokenInfo
  29.  *
  30.  * @author Poli Andrea (poli@link.it)
  31.  * @author $Author$
  32.  * @version $Rev$, $Date$AuthorizationMessageSecurityToken
  33.  */
  34. public class PDNDTokenInfo implements Serializable {

  35.     /**
  36.      *
  37.      */
  38.     private static final long serialVersionUID = 1L;
  39.    
  40.     private Map<String,PDNDTokenInfoDetails> pdnd = new HashMap<>();
  41.    
  42.     public Map<String, PDNDTokenInfoDetails> getPdnd() {
  43.         return this.pdnd;
  44.     }
  45.     public void setPdnd(Map<String, PDNDTokenInfoDetails> pdnd) {
  46.         this.pdnd = pdnd;
  47.     }
  48.    
  49.     public PDNDTokenInfoDetails getInfo(String infoId) {
  50.         return this.pdnd!=null ? this.pdnd.get(infoId) : null;
  51.     }
  52.     public void setInfo(String infoId, PDNDTokenInfoDetails info) {
  53.         if(this.pdnd==null) {
  54.             this.pdnd = new HashMap<>();
  55.         }
  56.         this.pdnd.put(infoId, info);
  57.     }
  58.    
  59.     public static final String CLIENT_INFO = "client";
  60.     public PDNDTokenInfoDetails getClient() {
  61.         return getInfo(CLIENT_INFO);
  62.     }
  63.     public Serializable getClient(String claim) {
  64.         PDNDTokenInfoDetails details = getInfo(CLIENT_INFO);
  65.         return details!=null && details.getClaims()!=null ? details.getClaims().get(claim) : null;
  66.     }
  67.     public void setClient(PDNDTokenInfoDetails info) {
  68.         setInfo(CLIENT_INFO, info);
  69.     }
  70.    
  71.     public static final String ORGANIZATION_INFO = "organization";
  72.     public PDNDTokenInfoDetails getOrganization() {
  73.         return getInfo(ORGANIZATION_INFO);
  74.     }
  75.     public Serializable getOrganization(String claim) {
  76.         PDNDTokenInfoDetails details = getInfo(ORGANIZATION_INFO);
  77.         return details!=null && details.getClaims()!=null ? details.getClaims().get(claim) : null;
  78.     }
  79.     public void setOrganization(PDNDTokenInfoDetails info) {
  80.         setInfo(ORGANIZATION_INFO, info);
  81.     }
  82.    
  83.     public static final String TOKEN_INFO_PREFIX_PDND = "pdnd.";
  84.    
  85.     public static boolean existsOrganizationInfoPDNDTokenInfo(Map<String, ?> mapPdnd) {
  86.         return isPDNDTokenInfoMap(mapPdnd, PDNDTokenInfo.ORGANIZATION_INFO);
  87.     }
  88.     public static boolean existsClientInfoPDNDTokenInfo(Map<String, ?> mapPdnd) {
  89.         return isPDNDTokenInfoMap(mapPdnd, PDNDTokenInfo.CLIENT_INFO);
  90.     }
  91.     private static boolean isPDNDTokenInfoMap(Map<String, ?> mapPdnd, String key) {
  92.         Object o = mapPdnd.get(key);
  93.         return o instanceof PDNDTokenInfoDetails;
  94.     }
  95.    
  96.     public String getOrganizationJson() {
  97.         return getOrganizationJsonDetailFromPDNDMapTokenInfo(this.pdnd);
  98.     }
  99.     public static String getOrganizationJsonDetailFromPDNDMapTokenInfo(Map<String, PDNDTokenInfoDetails> mapPdnd) {
  100.         PDNDTokenInfoDetails details = mapPdnd.get(PDNDTokenInfo.ORGANIZATION_INFO);
  101.         return details!=null ? details.getDetails(): null;
  102.     }
  103.     public String getClientJson() {
  104.         return getClientJsonDetailFromPDNDMapTokenInfo(this.pdnd);
  105.     }
  106.     public static String getClientJsonDetailFromPDNDMapTokenInfo(Map<String, PDNDTokenInfoDetails> mapPdnd) {
  107.         PDNDTokenInfoDetails details = mapPdnd.get(PDNDTokenInfo.CLIENT_INFO);
  108.         return details!=null ? details.getDetails(): null;
  109.     }
  110.    
  111.     public static String getOrganizationInfoFromPDNDMap(Map<String, ?> mapPdnd, String name) {
  112.         Object o = mapPdnd.get(PDNDTokenInfo.ORGANIZATION_INFO);
  113.         if(o instanceof Map) {
  114.             Map<?, ?> m = (Map<?, ?>) o;
  115.             return (String) m.get(name);
  116.         }
  117.         return null;
  118.     }
  119.     public static String getClientInfoFromPDNDMap(Map<String, ?> mapPdnd, String name) {
  120.         Object o = mapPdnd.get(PDNDTokenInfo.CLIENT_INFO);
  121.         if(o instanceof Map) {
  122.             Map<?, ?> m = (Map<?, ?>) o;
  123.             return (String) m.get(name);
  124.         }
  125.         return null;
  126.     }
  127.    
  128.     private static String getPatternOrganizationJsonExtract(String path, boolean tokenInfo) {
  129.         String pattern = tokenInfo ? "$.."+TOKEN_INFO_PREFIX_PDND+PDNDTokenInfo.ORGANIZATION_INFO+"." : "$.";
  130.         return pattern + path;
  131.     }
  132.     private static String getPatternClientJsonExtract(String path, boolean tokenInfo) {
  133.         String pattern = tokenInfo ? "$.."+TOKEN_INFO_PREFIX_PDND+PDNDTokenInfo.CLIENT_INFO+"." : "$.";
  134.         return pattern + path;
  135.     }
  136.     private static Logger getLogger() {
  137.         return LoggerWrapperFactory.getLogger(PDNDTokenInfo.class);
  138.     }
  139.    
  140.    
  141.     public String getClientId(Logger log) throws ProtocolException {
  142.         return readClientIdFromPDNDMapTokenInfo(log, this.pdnd);
  143.     }
  144.     public String getClientId() throws ProtocolException {
  145.         return readClientIdFromPDNDMapTokenInfo(getLogger(), this.pdnd);
  146.     }
  147.     public static String readClientIdFromPDNDMapTokenInfo(Logger log, Map<String, PDNDTokenInfoDetails> mapPdnd) throws ProtocolException {
  148.         return readClientId(log, getClientJsonDetailFromPDNDMapTokenInfo(mapPdnd), false);
  149.     }
  150.     public static String readClientIdFromPDNDMap(Map<String, ?> mapPdnd) {
  151.         return getClientInfoFromPDNDMap(mapPdnd, "id");
  152.     }
  153.     public static String readClientIdFromTokenInfo(Logger log, String tokenInfo) throws ProtocolException {
  154.         return readClientId(log, tokenInfo, true);
  155.     }
  156.     private static String readClientId(Logger log, String json, boolean tokenInfo) throws ProtocolException {
  157.         String pattern =  getPatternClientJsonExtract("id", tokenInfo);
  158.         try {
  159.             return JsonPathExpressionEngine.extractAndConvertResultAsString(json, pattern, log);
  160.         }catch(Exception e) {
  161.             throw new ProtocolException(e.getMessage(),e);
  162.         }
  163.     }
  164.    
  165.     public String getClientConsumerId(Logger log) throws ProtocolException {
  166.         return readClientConsumerIdFromPDNDMapTokenInfo(log, this.pdnd);
  167.     }
  168.     public String getClientConsumerId() throws ProtocolException {
  169.         return readClientConsumerIdFromPDNDMapTokenInfo(getLogger(), this.pdnd);
  170.     }
  171.     public static String readClientConsumerIdFromPDNDMapTokenInfo(Logger log, Map<String, PDNDTokenInfoDetails> mapPdnd) throws ProtocolException {
  172.         return readClientConsumerId(log, getClientJsonDetailFromPDNDMapTokenInfo(mapPdnd), false);
  173.     }
  174.     public static String readClientConsumerIdFromPDNDMap(Map<String, ?> mapPdnd) {
  175.         return getClientInfoFromPDNDMap(mapPdnd, "consumerId");
  176.     }
  177.     public static String readClientConsumerIdFromTokenInfo(Logger log, String tokenInfo) throws ProtocolException {
  178.         return readClientConsumerId(log, tokenInfo, true);
  179.     }
  180.     private static String readClientConsumerId(Logger log, String json, boolean tokenInfo) throws ProtocolException {
  181.         String pattern =  getPatternClientJsonExtract("consumerId", tokenInfo);
  182.         try {
  183.             return JsonPathExpressionEngine.extractAndConvertResultAsString(json, pattern, log);
  184.         }catch(Exception e) {
  185.             throw new ProtocolException(e.getMessage(),e);
  186.         }
  187.     }

  188.     public String getOrganizationId(Logger log) throws ProtocolException {
  189.         return readOrganizationIdFromPDNDMapTokenInfo(log, this.pdnd);
  190.     }
  191.     public String getOrganizationId() throws ProtocolException {
  192.         return readOrganizationIdFromPDNDMapTokenInfo(getLogger(), this.pdnd);
  193.     }
  194.     public static String readOrganizationIdFromPDNDMapTokenInfo(Logger log, Map<String, PDNDTokenInfoDetails> mapPdnd) throws ProtocolException {
  195.         return readOrganizationId(log, getOrganizationJsonDetailFromPDNDMapTokenInfo(mapPdnd), false);
  196.     }
  197.     public static String readOrganizationIdFromPDNDMap(Map<String, ?> mapPdnd) {
  198.         return getOrganizationInfoFromPDNDMap(mapPdnd, "id");
  199.     }
  200.     public static String readOrganizationIdFromTokenInfo(Logger log, String tokenInfo) throws ProtocolException {
  201.         return readOrganizationId(log, tokenInfo, true);
  202.     }
  203.     private static String readOrganizationId(Logger log, String json, boolean tokenInfo) throws ProtocolException {
  204.         String pattern =  getPatternOrganizationJsonExtract("id", tokenInfo);
  205.         try {
  206.             return JsonPathExpressionEngine.extractAndConvertResultAsString(json, pattern, log);
  207.         }catch(Exception e) {
  208.             throw new ProtocolException(e.getMessage(),e);
  209.         }
  210.     }
  211.    
  212.     public String getOrganizationName(Logger log) throws ProtocolException {
  213.         return readOrganizationNameFromPDNDMapTokenInfo(log, this.pdnd);
  214.     }
  215.     public String getOrganizationName() throws ProtocolException {
  216.         return readOrganizationNameFromPDNDMapTokenInfo(getLogger(), this.pdnd);
  217.     }
  218.     public static String readOrganizationNameFromPDNDMapTokenInfo(Logger log, Map<String, PDNDTokenInfoDetails> mapPdnd) throws ProtocolException {
  219.         return readOrganizationName(log, getOrganizationJsonDetailFromPDNDMapTokenInfo(mapPdnd), false);
  220.     }
  221.     public static String readOrganizationNameFromPDNDMap(Map<String, ?> mapPdnd) {
  222.         return getOrganizationInfoFromPDNDMap(mapPdnd, "name");
  223.     }
  224.     public static String readOrganizationNameFromTokenInfo(Logger log, String tokenInfo) throws ProtocolException {
  225.         return readOrganizationName(log, tokenInfo, true);
  226.     }
  227.     private static String readOrganizationName(Logger log, String json, boolean tokenInfo) throws ProtocolException {
  228.         String pattern =  getPatternOrganizationJsonExtract("name", tokenInfo);
  229.         try {
  230.             return JsonPathExpressionEngine.extractAndConvertResultAsString(json, pattern, log);
  231.         }catch(Exception e) {
  232.             throw new ProtocolException(e.getMessage(),e);
  233.         }
  234.     }
  235.    
  236.     public String getOrganizationCategory(Logger log) throws ProtocolException {
  237.         return readOrganizationCategoryFromPDNDMapTokenInfo(log, this.pdnd);
  238.     }
  239.     public String getOrganizationCategory() throws ProtocolException {
  240.         return readOrganizationCategoryFromPDNDMapTokenInfo(getLogger(), this.pdnd);
  241.     }
  242.     public static String readOrganizationCategoryFromPDNDMapTokenInfo(Logger log, Map<String, PDNDTokenInfoDetails> mapPdnd) throws ProtocolException {
  243.         return readOrganizationCategory(log, getOrganizationJsonDetailFromPDNDMapTokenInfo(mapPdnd), false);
  244.     }
  245.     public static String readOrganizationCategoryFromPDNDMap(Map<String, ?> mapPdnd) {
  246.         return getOrganizationInfoFromPDNDMap(mapPdnd, "category");
  247.     }
  248.     public static String readOrganizationCategoryFromTokenInfo(Logger log, String tokenInfo) throws ProtocolException {
  249.         return readOrganizationCategory(log, tokenInfo, true);
  250.     }
  251.     private static String readOrganizationCategory(Logger log, String json, boolean tokenInfo) throws ProtocolException {
  252.         String pattern =  getPatternOrganizationJsonExtract("category", tokenInfo);
  253.         try {
  254.             return JsonPathExpressionEngine.extractAndConvertResultAsString(json, pattern, log);
  255.         }catch(Exception e) {
  256.             throw new ProtocolException(e.getMessage(),e);
  257.         }
  258.     }
  259.    
  260.     public String getOrganizationExternalOrigin(Logger log) throws ProtocolException {
  261.         return readOrganizationExternalOriginFromPDNDMapTokenInfo(log, this.pdnd);
  262.     }
  263.     public String getOrganizationExternalOrigin() throws ProtocolException {
  264.         return readOrganizationExternalOriginFromPDNDMapTokenInfo(getLogger(), this.pdnd);
  265.     }
  266.     public static String readOrganizationExternalOriginFromPDNDMapTokenInfo(Logger log, Map<String, PDNDTokenInfoDetails> mapPdnd) throws ProtocolException {
  267.         return readOrganizationExternalOrigin(log, getOrganizationJsonDetailFromPDNDMapTokenInfo(mapPdnd), false);
  268.     }
  269.     public static String readOrganizationExternalOriginFromPDNDMap(Map<String, ?> mapPdnd) {
  270.         return getOrganizationInfoFromPDNDMap(mapPdnd, "externalId.origin");
  271.     }
  272.     public static String readOrganizationExternalOriginFromTokenInfo(Logger log, String tokenInfo) throws ProtocolException {
  273.         return readOrganizationExternalOrigin(log, tokenInfo, true);
  274.     }
  275.     private static String readOrganizationExternalOrigin(Logger log, String json, boolean tokenInfo) throws ProtocolException {
  276.         String pattern =  getPatternOrganizationJsonExtract(tokenInfo ? "['externalId.origin']" : "externalId.origin", tokenInfo);
  277.         try {
  278.             return JsonPathExpressionEngine.extractAndConvertResultAsString(json, pattern, log);
  279.         }catch(Exception e) {
  280.             throw new ProtocolException(e.getMessage(),e);
  281.         }
  282.     }
  283.    
  284.     public String getOrganizationExternalId(Logger log) throws ProtocolException {
  285.         return readOrganizationExternalIdFromPDNDMapTokenInfo(log, this.pdnd);
  286.     }
  287.     public String getOrganizationExternalId() throws ProtocolException {
  288.         return readOrganizationExternalIdFromPDNDMapTokenInfo(getLogger(), this.pdnd);
  289.     }
  290.     public static String readOrganizationExternalIdFromPDNDMapTokenInfo(Logger log, Map<String, PDNDTokenInfoDetails> mapPdnd) throws ProtocolException {
  291.         return readOrganizationExternalId(log, getOrganizationJsonDetailFromPDNDMapTokenInfo(mapPdnd), false);
  292.     }
  293.     public static String readOrganizationExternalIdFromPDNDMap(Map<String, ?> mapPdnd) {
  294.         return getOrganizationInfoFromPDNDMap(mapPdnd, "externalId.id");
  295.     }
  296.     public static String readOrganizationExternalIdFromTokenInfo(Logger log, String tokenInfo) throws ProtocolException {
  297.         return readOrganizationExternalId(log, tokenInfo, true);
  298.     }
  299.     private static String readOrganizationExternalId(Logger log, String json, boolean tokenInfo) throws ProtocolException {
  300.         String pattern =  getPatternOrganizationJsonExtract(tokenInfo ? "['externalId.id']" : "externalId.id", tokenInfo);
  301.         try {
  302.             return JsonPathExpressionEngine.extractAndConvertResultAsString(json, pattern, log);
  303.         }catch(Exception e) {
  304.             throw new ProtocolException(e.getMessage(),e);
  305.         }
  306.     }
  307. }