CertificatePrincipal.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 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.utils.certificate;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import javax.security.auth.x500.X500Principal;
- import org.bouncycastle.asn1.x500.RDN;
- import org.bouncycastle.asn1.x500.X500Name;
- import org.bouncycastle.asn1.x500.style.BCStyle;
- import org.bouncycastle.cert.selector.jcajce.JcaX509CertificateHolderSelector;
- import org.openspcoop2.utils.UtilsException;
- import org.openspcoop2.utils.regexp.RegExpNotFoundException;
- import org.openspcoop2.utils.regexp.RegularExpressionEngine;
- /**
- * CertificatePrincipal
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class CertificatePrincipal {
- private X500Principal principal;
- private PrincipalType type;
- private X500Name x500name;
- public CertificatePrincipal(X500Principal principal, PrincipalType type) {
- this.principal = principal;
- this.type = type;
- }
- @Override
- public String toString() {
- return this.principal.toString();
- }
- public String toString(String regexp) throws UtilsException {
- String dn = this.toString();
- return getRegexpValue(dn, regexp);
- }
-
- public String getName() {
- return this.principal.getName();
- }
- public String getNameByRegExp(String regexp) throws UtilsException {
- String dn = this.getName();
- return getRegexpValue(dn, regexp);
- }
-
- public String getName(String format) {
- return this.principal.getName(format);
- }
- public String getName(String format, String regexp) throws UtilsException {
- String dn = this.getName(format);
- return getRegexpValue(dn, regexp);
- }
-
- public String getCanonicalName() {
- return this.principal.getName(X500Principal.CANONICAL);
- }
- public String getCanonicalName(String regexp) throws UtilsException {
- String dn = this.getCanonicalName();
- return getRegexpValue(dn, regexp);
- }
-
- public String getRFC1779Name() {
- return this.principal.getName(X500Principal.RFC1779);
- }
- public String getRFC1779Name(String regexp) throws UtilsException {
- String dn = this.getRFC1779Name();
- return getRegexpValue(dn, regexp);
- }
-
- public String getRFC2253Name() {
- return this.principal.getName(X500Principal.RFC2253);
- }
- public String getRFC2253Name(String regexp) throws UtilsException {
- String dn = this.getRFC2253Name();
- return getRegexpValue(dn, regexp);
- }
-
- public String getNameNormalized() throws UtilsException {
- return CertificateUtils.formatPrincipal(this.toString(), this.type);
- }
- public Map<String, List<String>> toMap() throws UtilsException {
- return CertificateUtils.getPrincipalIntoMap(this.toString(), this.type);
- }
- public Map<String, String> toSimpleMap() throws UtilsException {
- return CertificateUtils.formatPrincipalToMap(this.toString(), this.type);
- }
- public String getNameNormalized(String regexp) throws UtilsException {
- String dn = this.getNameNormalized();
- return getRegexpValue(dn, regexp);
- }
-
-
- private synchronized void initX500Name() {
- if(this.x500name==null) {
- this.x500name=new JcaX509CertificateHolderSelector(this.principal,null).getIssuer();
- }
- }
-
- public static final String CN_EMPTY = "__undefined__";
- public String getCN() {
- return getInfoByOID(BCStyle.CN, CN_EMPTY);
- }
- public String getCN(String regexp) throws UtilsException {
- String cn = this.getCN();
- return getRegexpValue(cn, regexp);
- }
-
-
- private String getRegexpValue(String value, String regexp) throws UtilsException {
- try {
- return RegularExpressionEngine.getStringMatchPattern(value, regexp);
- }catch(RegExpNotFoundException notFound) {
- return null;
- }catch(Exception e) {
- throw new UtilsException(e.getMessage(),e);
- }
- }
-
-
-
- // ******* OID **********
-
- public List<OID> getOID(){
- List<OID> l = new ArrayList<OID>();
- if(this.x500name==null) {
- this.initX500Name();
- }
- RDN [] rdnArray = this.x500name.getRDNs();
- if(rdnArray!=null && rdnArray.length>0) {
- for (RDN rdn : rdnArray) {
- if(rdn!=null) {
- OID oid = OID.toOID(rdn.getFirst().getType());
- // if(oid==null) {
- // System.out.println("NULLLL ["+rdn.getFirst().getType()+"]: "+rdn.getFirst().getType().getId());
- // }
- if(oid!=null) { // custom
- l.add(oid);
- }
- }
- }
- }
- return l;
- }
-
- public String getInfo(String oid) {
- return getInfoByOID(OID.valueOf(oid.toUpperCase()));
- }
- public String getInfo(String oid, String defaultEmptyValue) {
- return getInfoByOID(OID.valueOf(oid.toUpperCase()),defaultEmptyValue);
- }
-
- public String getInfoByOID(String oid) {
- return getInfoByOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid));
- }
- public String getInfoByOID(String oid, String defaultEmptyValue) {
- return getInfoByOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid),defaultEmptyValue);
- }
- public String getInfoByOID(OID oid) {
- return getInfoByOID(oid.getOID());
- }
- public String getInfoByOID(OID oid, String defaultEmptyValue) {
- return getInfoByOID(oid.getOID(),defaultEmptyValue);
- }
- public String getInfoByOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid) {
- return getInfoByOID(oid, null);
- }
- public String getInfoByOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid, String defaultEmptyValue) {
- if(this.x500name==null) {
- this.initX500Name();
- }
- RDN [] rdnArray = this.x500name.getRDNs(oid);
- if(rdnArray!=null && rdnArray.length>0 && rdnArray[0]!=null) {
- RDN rdn = rdnArray[0];
- if(rdn.getFirst()!=null && rdn.getFirst().getValue()!=null) {
- return rdn.getFirst().getValue().toString();
- }
- else {
- return defaultEmptyValue;
- }
- }
- else {
- return defaultEmptyValue;
- }
- }
-
- public String getInfo(String oid, int position) {
- return getInfoByOID(OID.valueOf(oid.toUpperCase()), position);
- }
- public String getInfo(String oid, String defaultEmptyValue, int position) {
- return getInfoByOID(OID.valueOf(oid.toUpperCase()),defaultEmptyValue, position);
- }
-
- public String getInfoByOID(String oid, int position) {
- return getInfoByOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid), position);
- }
- public String getInfoByOID(String oid, String defaultEmptyValue, int position) {
- return getInfoByOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid),defaultEmptyValue, position);
- }
- public String getInfoByOID(OID oid, int position) {
- return getInfoByOID(oid.getOID(), position);
- }
- public String getInfoByOID(OID oid, String defaultEmptyValue, int position) {
- return getInfoByOID(oid.getOID(),defaultEmptyValue, position);
- }
- public String getInfoByOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid, int position) {
- return getInfoByOID(oid, null, position);
- }
- public String getInfoByOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid, String defaultEmptyValue, int position) {
- List<String> l = getInfosByOID(oid, defaultEmptyValue);
- if(l!=null && l.size()>position) {
- return l.get(position);
- }
- return defaultEmptyValue;
- }
-
- public List<String> getInfos(String oid) {
- return getInfosByOID(OID.valueOf(oid.toUpperCase()));
- }
- public List<String> getInfos(String oid, String defaultEmptyValue) {
- return getInfosByOID(OID.valueOf(oid.toUpperCase()),defaultEmptyValue);
- }
-
- public List<String> getInfosByOID(String oid) {
- return getInfosByOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid));
- }
- public List<String> getInfosByOID(String oid, String defaultEmptyValue) {
- return getInfosByOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid),defaultEmptyValue);
- }
- public List<String> getInfosByOID(OID oid) {
- return getInfosByOID(oid.getOID());
- }
- public List<String> getInfosByOID(OID oid, String defaultEmptyValue) {
- return getInfosByOID(oid.getOID(),defaultEmptyValue);
- }
- public List<String> getInfosByOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid) {
- return getInfosByOID(oid, null);
- }
- public List<String> getInfosByOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid, String defaultEmptyValue) {
- if(this.x500name==null) {
- this.initX500Name();
- }
- RDN [] rdnArray = this.x500name.getRDNs(oid);
- List<String> l = null;
- if(rdnArray!=null && rdnArray.length>0) {
- for (RDN rdn : rdnArray) {
- if(rdn!=null && rdn.getFirst()!=null && rdn.getFirst().getValue()!=null) {
- if(l==null) {
- l = new ArrayList<>();
- }
- l.add(rdn.getFirst().getValue().toString());
- }
- }
- }
-
- if(l==null && defaultEmptyValue!=null) {
- l = new ArrayList<>();
- l.add(defaultEmptyValue);
- }
- return l;
- }
-
-
- // ******* ID OID **********
-
- public List<String> getIdOID(){
- List<String> l = new ArrayList<>();
- if(this.x500name==null) {
- this.initX500Name();
- }
- RDN [] rdnArray = this.x500name.getRDNs();
- if(rdnArray!=null && rdnArray.length>0) {
- for (RDN rdn : rdnArray) {
- if(rdn!=null) {
- l.add(rdn.getFirst().getType().getId());
- }
- }
- }
- return l;
- }
-
- public String getInfoByIdOID(String oid) {
- return getInfoByIdOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid));
- }
- public String getInfoByIdOID(String oid, String defaultEmptyValue) {
- return getInfoByIdOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid),defaultEmptyValue);
- }
- public String getInfoByIdOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid) {
- return getInfoByIdOID(oid, null);
- }
- public String getInfoByIdOID(org.bouncycastle.asn1.ASN1ObjectIdentifier idOID, String defaultEmptyValue) {
- if(this.x500name==null) {
- this.initX500Name();
- }
- RDN [] rdnArray = this.x500name.getRDNs(idOID);
- if(rdnArray!=null && rdnArray.length>0 && rdnArray[0]!=null) {
- RDN rdn = rdnArray[0];
- if(rdn.getFirst()!=null && rdn.getFirst().getValue()!=null) {
- return rdn.getFirst().getValue().toString();
- }
- else {
- return defaultEmptyValue;
- }
- }
- else {
- return defaultEmptyValue;
- }
- }
-
- public String getInfoByIdOID(String oid, int position) {
- return getInfoByIdOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid), position);
- }
- public String getInfoByIdOID(String oid, String defaultEmptyValue, int position) {
- return getInfoByIdOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid),defaultEmptyValue, position);
- }
- public String getInfoByIdOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid, int position) {
- return getInfoByIdOID(oid, null, position);
- }
- public String getInfoByIdOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid, String defaultEmptyValue, int position) {
- List<String> l = getInfosByIdOID(oid, defaultEmptyValue);
- if(l!=null && l.size()>position) {
- return l.get(position);
- }
- return defaultEmptyValue;
- }
-
- public List<String> getInfosByIdOID(String oid) {
- return getInfosByIdOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid));
- }
- public List<String> getInfosByIdOID(String oid, String defaultEmptyValue) {
- return getInfosByIdOID(new org.bouncycastle.asn1.ASN1ObjectIdentifier(oid),defaultEmptyValue);
- }
- public List<String> getInfosByIdOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid) {
- return getInfosByIdOID(oid, null);
- }
- public List<String> getInfosByIdOID(org.bouncycastle.asn1.ASN1ObjectIdentifier oid, String defaultEmptyValue) {
- return getInfosByOID(oid, defaultEmptyValue);
- /**if(this.x500name==null) {
- this.initX500Name();
- }
- RDN [] rdnArray = this.x500name.getRDNs(oid);
- List<String> l = null;
- if(rdnArray!=null && rdnArray.length>0) {
- for (RDN rdn : rdnArray) {
- if(rdn!=null && rdn.getFirst()!=null && rdn.getFirst().getValue()!=null) {
- if(l==null) {
- l = new ArrayList<>();
- }
- l.add(rdn.getFirst().getValue().toString());
- }
- }
- }
-
- if(l==null && defaultEmptyValue!=null) {
- l = new ArrayList<>();
- l.add(defaultEmptyValue);
- }
- return l;*/
- }
- }