/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package models.datatable; import com.emc.storageos.security.keystore.impl.KeyCertificatePairGenerator; import com.emc.vipr.model.keystore.TrustedCertificate; import util.datatable.DataTable; import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; import javax.naming.ldap.Rdn; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.Map; public class CertificateDataTable extends DataTable { public CertificateDataTable() { addColumn("commonName"); addColumn("organization"); addColumn("issuedBy"); addColumn("notBefore").setRenderFunction("render.localDate"); addColumn("notAfter").setRenderFunction("render.localDate"); addColumn("userSupplied").setRenderFunction("render.boolean"); addColumn("certificateValid").setRenderFunction("render.operationalStatus"); sortAll(); setDefaultSortField("commonName"); } public static class CertificateInfo { public String id; public String notAfter; public String notBefore; public String certificateValid; public String commonName; public String organization; public String issuedBy; public String certificateInfo; public boolean userSupplied; public CertificateInfo(TrustedCertificate certInfo) throws CertificateException { String pem = certInfo.getCertString(); X509Certificate cert = (X509Certificate) KeyCertificatePairGenerator. getCertificateFromString(pem); Map<String, String> subjectDN = parseDN(cert.getSubjectX500Principal().getName()); Map<String, String> issuerDN = parseDN(cert.getIssuerX500Principal().getName()); id = pem; certificateInfo = cert.toString(); notAfter = new SimpleDateFormat("YYYY-MM-dd").format(cert.getNotAfter()); notBefore = new SimpleDateFormat("YYYY-MM-dd").format(cert.getNotBefore()); organization = subjectDN.get("O"); commonName = subjectDN.get("CN"); issuedBy = issuerDN.get("CN"); userSupplied = certInfo.getUserSupplied(); try { cert.checkValidity(); certificateValid = "OK"; } catch (Exception e) { certificateValid = "NOT_OK"; } } private Map<String, String> parseDN(String dn) { HashMap<String, String> parsed = new HashMap<String, String>(); try { for (Rdn rdn : new LdapName(dn).getRdns()) { parsed.put(rdn.getType(), rdn.getValue().toString()); } } catch (InvalidNameException e) { throw new RuntimeException(e); } return parsed; } } }