ModIJWTTokenClaims.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.protocol.modipa.builder;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.openspcoop2.protocol.modipa.constants.ModICostanti;
import org.openspcoop2.protocol.sdk.Busta;
/**
* ModIJWTTokenClaims
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class ModIJWTTokenClaims implements Serializable {
private static final long serialVersionUID = 1L;
private boolean audit;
private String idTransazione; // no cache key
private boolean request;
private String porta;
private String operazione;
private boolean sicurezzaRidefinitaOperazione;
public ModIJWTTokenClaims(boolean audit, String idTransazione, boolean request, String porta, String operazione, boolean sicurezzaRidefinitaOperazione) {
this.audit = audit;
this.idTransazione = idTransazione;
this.request = request;
this.porta = porta;
this.operazione = operazione;
this.sicurezzaRidefinitaOperazione = sicurezzaRidefinitaOperazione;
}
// header
private boolean addKid;
private boolean addX5c;
private boolean addX5cChain;
private boolean addX5t;
private boolean addX5u;
private String kid;
private String algorithm;
private String x5uUrl;
private String pem;
private String jwk;
// payload
private Date exp; // no cache key
private String expValue;
private Date nbf; // no cache key
private String nbfValue;
private Date iat; // no cache key
private String iatValue;
private String jti; // no cache key
private String audience;
private String clientId;
private String iss;
private String sub;
private Map<String, String> corniceSicurezzaAudit = new HashMap<>();
private String purposeId;
private String dNonce; // no cache key
private Map<String, String> customClaims = new HashMap<>();
// claims non cachable (integrita)
private String requestDigest;
public String toCacheKey() {
StringBuilder sb = new StringBuilder("ModI-Token");
if(this.audit) {
sb.append("-Audit");
}
else {
sb.append("-Authorization");
}
if(this.request) {
sb.append("-PD-");
}
else {
sb.append("-PA-");
}
sb.append(this.porta);
if(this.sicurezzaRidefinitaOperazione) {
sb.append(" ");
sb.append(this.operazione);
}
// header
addCacheKeyHeader(sb);
// payload
addCacheKeyPayload(sb);
return sb.toString();
}
private void addCacheKeyHeader(StringBuilder sb) {
sb.append(" add-kid:");
sb.append(this.addKid);
sb.append(" add-x5c:");
sb.append(this.addX5c);
sb.append(" add-x5c-chain:");
sb.append(this.addX5cChain);
sb.append(" add-x5t:");
sb.append(this.addX5t);
sb.append(" add-x5u:");
sb.append(this.addX5u);
if(this.kid!=null) {
sb.append(" kid:");
sb.append(this.kid);
}
if(this.algorithm!=null) {
sb.append(" algorithm:");
sb.append(this.algorithm);
}
if(this.x5uUrl!=null) {
sb.append(" x5u-url:");
sb.append(this.x5uUrl);
}
if(this.pem!=null) {
sb.append(" pem:");
sb.append(this.pem);
}
if(this.jwk!=null) {
sb.append(" jwk:");
sb.append(this.jwk);
}
}
private void addCacheKeyPayload(StringBuilder sb) {
if(this.audience!=null) {
sb.append(" aud:");
sb.append(this.audience);
}
if(this.clientId!=null) {
sb.append(" client_id:");
sb.append(this.clientId);
}
if(this.iss!=null) {
sb.append(" iss:");
sb.append(this.iss);
}
if(this.sub!=null) {
sb.append(" sub:");
sb.append(this.sub);
}
if(!this.corniceSicurezzaAudit.isEmpty()) {
for (Map.Entry<String,String> entry : this.corniceSicurezzaAudit.entrySet()) {
sb.append(" audit-").append(entry.getKey()).append(":");
sb.append(entry.getValue());
}
}
if(this.purposeId!=null) {
sb.append(" purposeId:");
sb.append(this.purposeId);
}
if(!this.customClaims.isEmpty()) {
for (Map.Entry<String,String> entry : this.customClaims.entrySet()) {
sb.append(" custom-").append(entry.getKey()).append(":");
sb.append(entry.getValue());
}
}
}
public void setInfoNonCachableInBusta(Busta busta) {
// id transazione
if(this.idTransazione!=null) {
if(this.audit) {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_AUDIT_ORIGIN_TRANSACTION_ID, this.idTransazione);
}
else {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_ORIGIN_TRANSACTION_ID, this.idTransazione);
}
}
// iat, nbf, exp
setDateNonCachableInBusta(busta);
// jti
if(this.jti!=null) {
if(this.audit) {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_AUDIT_ID, this.jti);
}
else {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_ID, this.jti);
}
}
// dnonce
// per adesso non viene registrato nella busta
}
private void setDateNonCachableInBusta(Busta busta) {
// iat
if(this.iatValue!=null) {
if(this.audit) {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_AUDIT_IAT, this.iatValue);
}
else {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_IAT, this.iatValue);
}
}
// nbf
if(this.nbfValue!=null) {
if(this.audit) {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_AUDIT_NBF, this.nbfValue);
}
else {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_NBF, this.nbfValue);
}
}
// exp
if(this.expValue!=null) {
if(this.audit) {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_CORNICE_SICUREZZA_AUDIT_EXP, this.expValue);
}
else {
busta.addProperty(ModICostanti.MODIPA_BUSTA_EXT_PROFILO_SICUREZZA_MESSAGGIO_EXP, this.expValue);
}
}
}
public String getExpValue() {
return this.expValue;
}
public void setExpValue(String expValue) {
this.expValue = expValue;
}
public String getNbfValue() {
return this.nbfValue;
}
public void setNbfValue(String nbfValue) {
this.nbfValue = nbfValue;
}
public String getIatValue() {
return this.iatValue;
}
public void setIatValue(String iatValue) {
this.iatValue = iatValue;
}
public Date getExp() {
return this.exp;
}
public void setExp(Date exp) {
this.exp = exp;
}
public Date getNbf() {
return this.nbf;
}
public void setNbf(Date nbf) {
this.nbf = nbf;
}
public Date getIat() {
return this.iat;
}
public void setIat(Date iat) {
this.iat = iat;
}
public String getJti() {
return this.jti;
}
public void setJti(String jti) {
this.jti = jti;
}
public String getAudience() {
return this.audience;
}
public void setAudience(String audience) {
this.audience = audience;
}
public String getClientId() {
return this.clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public String getKid() {
return this.kid;
}
public void setKid(String kid) {
this.kid = kid;
}
public String getRequestDigest() {
return this.requestDigest;
}
public void setRequestDigest(String requestDigest) {
this.requestDigest = requestDigest;
}
public Map<String, String> getCorniceSicurezzaAudit() {
return this.corniceSicurezzaAudit;
}
public void setCorniceSicurezzaAudit(Map<String, String> corniceSicurezzaAudit) {
this.corniceSicurezzaAudit = corniceSicurezzaAudit;
}
public void addCorniceSicurezzaAudit(String key, String value) {
this.corniceSicurezzaAudit.put(key, value);
}
public String getIss() {
return this.iss;
}
public void setIss(String iss) {
this.iss = iss;
}
public String getSub() {
return this.sub;
}
public void setSub(String sub) {
this.sub = sub;
}
public String getPurposeId() {
return this.purposeId;
}
public void setPurposeId(String purposeId) {
this.purposeId = purposeId;
}
public String getdNonce() {
return this.dNonce;
}
public void setdNonce(String dNonce) {
this.dNonce = dNonce;
}
public Map<String, String> getCustomClaims() {
return this.customClaims;
}
public void setCustomClaims(Map<String, String> customClaims) {
this.customClaims = customClaims;
}
public void addCustomClaim(String key, String value) {
this.customClaims.put(key, value);
}
public String getAlgorithm() {
return this.algorithm;
}
public void setAlgorithm(String algorithm) {
this.algorithm = algorithm;
}
public boolean isAddKid() {
return this.addKid;
}
public void setAddKid(boolean addKid) {
this.addKid = addKid;
}
public boolean isAddX5c() {
return this.addX5c;
}
public void setAddX5c(boolean addX5c) {
this.addX5c = addX5c;
}
public boolean isAddX5cChain() {
return this.addX5cChain;
}
public void setAddX5cChain(boolean addX5cChain) {
this.addX5cChain = addX5cChain;
}
public boolean isAddX5t() {
return this.addX5t;
}
public void setAddX5t(boolean addX5t) {
this.addX5t = addX5t;
}
public boolean isAddX5u() {
return this.addX5u;
}
public void setAddX5u(boolean addX5u) {
this.addX5u = addX5u;
}
public String getX5uUrl() {
return this.x5uUrl;
}
public void setX5uUrl(String x5uUrl) {
this.x5uUrl = x5uUrl;
}
public String getPem() {
return this.pem;
}
public void setPem(String pem) {
this.pem = pem;
}
public String getJwk() {
return this.jwk;
}
public void setJwk(String jwk) {
this.jwk = jwk;
}
public String getIdTransazione() {
return this.idTransazione;
}
public void setIdTransazione(String idTransazione) {
this.idTransazione = idTransazione;
}
}