121 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var certInfo = module.exports;
 | |
| module.exports.certpem = certInfo;
 | |
| 
 | |
| // ES5 version of mergeDeep
 | |
| // https://stackoverflow.com/questions/27936772/how-to-deep-merge-instead-of-shallow-merge
 | |
| /**
 | |
|  * Simple object check.
 | |
|  * @param item
 | |
|  * @returns {boolean}
 | |
|  */
 | |
| function isObject(item) {
 | |
|   return (item && typeof item === 'object' && !Array.isArray(item));
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Deep merge two objects.
 | |
|  * @param target
 | |
|  * @param ...sources
 | |
|  */
 | |
| function merge(target) {
 | |
|   var sources = Array.prototype.slice.call(arguments);
 | |
|   sources.shift();
 | |
|   if (!sources.length) { return target; }
 | |
|   var source = sources.shift();
 | |
|   var obj;
 | |
| 
 | |
|   if (isObject(target) && isObject(source)) {
 | |
|     Object.keys(source).forEach(function (key) {
 | |
|       if (isObject(source[key])) {
 | |
|         if (!target[key]) { obj = {}; obj[key] = {}; Object.assign(target, obj); }
 | |
|         merge(target[key], source[key]);
 | |
|       } else {
 | |
|         obj = {}; obj[key] = source[key];
 | |
|         Object.assign(target, obj);
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   sources.unshift(target);
 | |
|   return merge.apply(null, sources);
 | |
| }
 | |
| 
 | |
| var common = require("asn1js/org/pkijs/common");
 | |
| var _asn1js = require("asn1js");
 | |
| var _pkijs = require("pkijs");
 | |
| var _x509schema = require("pkijs/org/pkijs/x509_schema");
 | |
| 
 | |
| // #region Merging function/object declarations for ASN1js and PKIjs
 | |
| var asn1js = merge(_asn1js, common);
 | |
| 
 | |
| var x509schema = merge(_x509schema, asn1js);
 | |
| 
 | |
| var pkijs_1 = merge(_pkijs, asn1js);
 | |
| var pkijs = merge(pkijs_1, x509schema);
 | |
| 
 | |
| // this is really memory expensive to do
 | |
| // (about half of a megabyte of loaded code)
 | |
| certInfo._pemToBinAb  = function (pem) {
 | |
|   var b64 = pem.replace(/(-----(BEGIN|END) CERTIFICATE-----|[\n\r])/g, '');
 | |
|   var buf = Buffer.from(b64, 'base64');
 | |
|   var ab = new Uint8Array(buf).buffer;          // WORKS
 | |
|   //var ab = buf.buffer                         // Doesn't work
 | |
| 
 | |
|   return ab;
 | |
| };
 | |
| certInfo.debug = certInfo.getCertInfo = function (pem) {
 | |
|   var ab = module.exports._pemToBinAb(pem);
 | |
| 
 | |
|   var asn1 = pkijs.org.pkijs.fromBER(ab);
 | |
|   var certSimpl = new pkijs.org.pkijs.simpl.CERT({ schema: asn1.result });
 | |
| 
 | |
|   return certSimpl;
 | |
| };
 | |
| 
 | |
| certInfo.info = certInfo.getBasicInfo = function (pem) {
 | |
|   var c = certInfo.getCertInfo(pem);
 | |
|   var domains = [];
 | |
|   var sub;
 | |
| 
 | |
|   c.extensions.forEach(function (ext) {
 | |
|     if (ext.parsedValue && ext.parsedValue.altNames) {
 | |
|       ext.parsedValue.altNames.forEach(function (alt) {
 | |
|         domains.push(alt.Name);
 | |
|       });
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   sub = c.subject.types_and_values[0].value.value_block.value || null;
 | |
| 
 | |
|   return {
 | |
|     subject: sub
 | |
|   , altnames: domains
 | |
|     // for debugging during console.log
 | |
|     // do not expect these values to be here
 | |
|   , _issuedAt: c.notBefore.value
 | |
|   , _expiresAt: c.notAfter.value
 | |
|   , issuedAt: new Date(c.notBefore.value).valueOf()
 | |
|   , expiresAt: new Date(c.notAfter.value).valueOf()
 | |
|   };
 | |
| };
 | |
| 
 | |
| certInfo.getCertInfoFromFile = function (pemFile) {
 | |
|   return require('fs').readFileSync(pemFile, 'ascii');
 | |
| };
 | |
| 
 | |
| /*
 | |
| certInfo.testGetCertInfo = function (pathname) {
 | |
|   var path = require('path');
 | |
|   var pemFile = pathname || path.join(__dirname, '..', 'tests', 'example.cert.pem');
 | |
|   return certInfo.getCertInfo(certInfo.getCertInfoFromFile(pemFile));
 | |
| };
 | |
| 
 | |
| certInfo.testBasicCertInfo = function (pathname) {
 | |
|   var path = require('path');
 | |
|   var pemFile = pathname || path.join(__dirname, '..', 'tests', 'example.cert.pem');
 | |
|   return certInfo.getBasicInfo(certInfo.getCertInfoFromFile(pemFile));
 | |
| };
 | |
| */
 |