package org.adullact.iparapheur.admin; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.Collection; import org.adullact.iparapheur.domain.CertificatesDAO; import org.adullact.iparapheur.domain.CertificatesEntity; import org.adullact.iparapheur.domain.hibernate.CertificatesEntityImpl; import org.alfresco.repo.jscript.BaseScopableProcessorExtension; import org.alfresco.util.Base64; import org.alfresco.util.InputStreamContent; import org.alfresco.web.scripts.servlet.FormData; import org.alfresco.web.scripts.servlet.FormData.FormField; import org.apache.log4j.Logger; public class JsKeyMaterial extends BaseScopableProcessorExtension { private static Logger logger = Logger.getLogger(JsKeyMaterial.class); private CertificatesDAO certificatesDAO; public void setCertificatesDAO(CertificatesDAO certificatesDAO) { this.certificatesDAO = certificatesDAO; } public void addCertificate(String username, String certificateId) { CertificatesEntity entity = new CertificatesEntityImpl(); entity.setUsername(username); entity.setCertificateId(certificateId); certificatesDAO.createCertificates(entity); } public CertificatesEntity getCertificatesByUsername(String username) { return certificatesDAO.getCertificatesByUsername(username); } public void deleteCertificate(CertificatesEntity e) { certificatesDAO.deleteCertificates(e); } public CertificatesEntity getCertificatesById(String certificateId) { return certificatesDAO.getCertificatesById(certificateId); } public String getIdCertificat(FormData formData) { try { InputStreamContent contenu = null; for (FormField field : formData.getFields()) { if ("file".equals(field.getName()) && field.getIsFile()) { contenu = (InputStreamContent) field.getContent(); break; } } CertificateFactory factory = CertificateFactory.getInstance("X.509"); Collection certs = factory.generateCertificates(contenu.getInputStream()); X509Certificate[] xcerts = new X509Certificate[certs.size()]; for (int i = 0; i < xcerts.length; i++) { xcerts[i] = (X509Certificate) certs.toArray()[i]; } return getUniqueId(xcerts); } catch (Exception e) { if (logger.isDebugEnabled()) { logger.debug("JsKeyMaterial::getIdCertificat", e); } return null; } } public String getCertificatBase64(InputStreamContent content) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int readed; InputStream in = content.getInputStream(); while ((readed = in.read(buffer)) >= 0) { out.write(buffer, 0, readed); } byte[] data = out.toByteArray(); return Base64.encodeBytes(data); } public InputStreamContent getCertificatContent(String base64) { byte[] data = Base64.decode(base64); ByteArrayInputStream in = new ByteArrayInputStream(data); return new InputStreamContent(in, "application/octet-stream", "UTF-8"); } public static String getUniqueId(X509Certificate[] certs) { String identifier = null; if (logger.isDebugEnabled()) { logger.debug("getUniqueId: " + certs[0]); } identifier = certs[0].getSerialNumber().toString() + "/" + certs[0].getIssuerDN().toString(); // for (X509Certificate cert : certs) { // if (identifier == null) { // identifier = cert.getSerialNumber().toString(); // } else { // identifier += "/" + cert.getSerialNumber().toString(); // } // // } return identifier; } }