CertificateStatus.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.utils.certificate.ocsp;

  21. import java.io.Serializable;
  22. import java.security.cert.CRLReason;
  23. import java.util.Date;

  24. import org.openspcoop2.utils.UtilsException;
  25. import org.openspcoop2.utils.date.DateUtils;

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

  34.     private static final long serialVersionUID = 1L;

  35.     private CertificateStatusCode code;
  36.     private Date revocationTime;
  37.     private CRLReason revocationReason;
  38.     private String details; // disponibili per crl
  39.    
  40.     @Override
  41.     public String toString() {
  42.         StringBuilder sb = new StringBuilder();
  43.         sb.append(this.code);
  44.         if(this.revocationTime!=null) {
  45.             sb.append("\nrevocationTime: "+DateUtils.getSimpleDateFormatMs().format(this.revocationTime));
  46.         }
  47.         if(this.revocationReason!=null) {
  48.             sb.append("\nrevocationReason: "+this.revocationReason);
  49.         }
  50.         if(this.details!=null) {
  51.             sb.append("\ndetails: "+this.details);
  52.         }
  53.         return sb.toString();
  54.     }
  55.    
  56.     public CertificateStatusCode getCode() {
  57.         return this.code;
  58.     }
  59.     public void setCode(CertificateStatusCode code) {
  60.         this.code = code;
  61.     }
  62.     public Date getRevocationTime() {
  63.         return this.revocationTime;
  64.     }
  65.     public void setRevocationTime(Date revocationTime) {
  66.         this.revocationTime = revocationTime;
  67.     }
  68.     public CRLReason getRevocationReason() {
  69.         return this.revocationReason;
  70.     }
  71.     public void setRevocationReason(CRLReason revocationReason) {
  72.         this.revocationReason = revocationReason;
  73.     }
  74.     public String getDetails() {
  75.         return this.details;
  76.     }
  77.     public void setDetails(String details) {
  78.         this.details = details;
  79.     }
  80.    
  81.     public boolean isGOOD() {
  82.         return CertificateStatusCode.GOOD.equals(this.code);
  83.     }
  84.     public boolean isSELF_SIGNED() {
  85.         return CertificateStatusCode.SELF_SIGNED.equals(this.code);
  86.     }
  87.     public boolean isISSUER_NOT_FOUND() {
  88.         return CertificateStatusCode.ISSUER_NOT_FOUND.equals(this.code);
  89.     }
  90.     public boolean isOCSP_RESPONDER_NOT_FOUND() {
  91.         return CertificateStatusCode.OCSP_RESPONDER_NOT_FOUND.equals(this.code);
  92.     }
  93.     public boolean isCRL_NOT_FOUND() {
  94.         return CertificateStatusCode.CRL_NOT_FOUND.equals(this.code);
  95.     }
  96.     public boolean isUNKNOWN() {
  97.         return CertificateStatusCode.UNKNOWN.equals(this.code);
  98.     }
  99.     public boolean isREVOKED() {
  100.         return CertificateStatusCode.REVOKED.equals(this.code);
  101.     }
  102.     public boolean isEXPIRED() {
  103.         return CertificateStatusCode.EXPIRED.equals(this.code);
  104.     }
  105.     public boolean isValid() {
  106.         return this.code!=null && this.code.isValid();
  107.     }
  108.     public void checkValid() throws UtilsException {
  109.         if(this.code==null) {
  110.             throw new UtilsException("CertificateStatusCode unspecified");
  111.         }
  112.         switch (this.code) {
  113.         case REVOKED:
  114.         case EXPIRED:
  115.         case UNKNOWN:
  116.             StringBuilder sb = new StringBuilder("Certificate ");
  117.             sb.append(this.code.name().toLowerCase());
  118.             if(this.revocationTime!=null) {
  119.                 sb.append(" in date '"+DateUtils.getSimpleDateFormatMs().format(this.revocationTime)+"'");
  120.             }
  121.             if(this.revocationReason!=null) {
  122.                 sb.append(" (Reason: ").append(this.revocationReason).append(")");
  123.             }
  124.             if(this.details!=null) {
  125.                 sb.append(": ").append(this.details);
  126.             }
  127.             throw new OCSPResponseStatusException(this, sb.toString());
  128.         default:
  129.             if(this.code.isInvalid()) {
  130.                 throw new OCSPResponseStatusException(this, "Certificate status code '"+this.code+"'");
  131.             }
  132.             break;
  133.         }
  134.     }
  135.    
  136.    
  137.    
  138.     public static CertificateStatus GOOD() {
  139.         CertificateStatus s = new CertificateStatus();
  140.         s.code = CertificateStatusCode.GOOD;
  141.         return s;
  142.     }
  143.     public static CertificateStatus SELF_SIGNED() {
  144.         CertificateStatus s = new CertificateStatus();
  145.         s.code = CertificateStatusCode.SELF_SIGNED;
  146.         return s;
  147.     }
  148.     public static CertificateStatus ISSUER_NOT_FOUND() {
  149.         CertificateStatus s = new CertificateStatus();
  150.         s.code = CertificateStatusCode.ISSUER_NOT_FOUND;
  151.         return s;
  152.     }
  153.     public static CertificateStatus OCSP_RESPONDER_NOT_FOUND() {
  154.         CertificateStatus s = new CertificateStatus();
  155.         s.code = CertificateStatusCode.OCSP_RESPONDER_NOT_FOUND;
  156.         return s;
  157.     }
  158.     public static CertificateStatus CRL_NOT_FOUND() {
  159.         CertificateStatus s = new CertificateStatus();
  160.         s.code = CertificateStatusCode.CRL_NOT_FOUND;
  161.         return s;
  162.     }
  163.     public static CertificateStatus UNKNOWN() {
  164.         CertificateStatus s = new CertificateStatus();
  165.         s.code = CertificateStatusCode.UNKNOWN;
  166.         return s;
  167.     }
  168.     public static CertificateStatus REVOKED(CRLReason reason, Date time) {
  169.         CertificateStatus s = new CertificateStatus();
  170.         s.code = CertificateStatusCode.REVOKED;
  171.         s.revocationReason = reason;
  172.         s.revocationTime = time;
  173.         return s;
  174.     }
  175.     public static CertificateStatus EXPIRED(String details, Date time) {
  176.         CertificateStatus s = new CertificateStatus();
  177.         s.code = CertificateStatusCode.EXPIRED;
  178.         s.revocationTime = time;
  179.         s.details = details;
  180.         return s;
  181.     }
  182. }