File: crypto-cacerts.js

package info (click to toggle)
node-crypto-cacerts 0.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, stretch
  • size: 76 kB
  • ctags: 16
  • sloc: makefile: 2; sh: 2
file content (64 lines) | stat: -rw-r--r-- 1,699 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var fs = require('fs');
var path = require('path');
var crypto = require('crypto');

var cacerts = [];

var parsePEMFile = function(filename){
    var pems = [];
    var buf = fs.readFileSync(filename, {encoding: 'utf8'});
    var lines = buf.split('\n');
    var foundBegin = false;
    var pem = "";
    for(var i = 0; i < lines.length; i++){
        var line = lines[i];
        if(line.indexOf("-BEGIN CERTIFICATE-") >= 0){
            foundBegin = true;
            pem = line + "\n";
        }
        else if(line.indexOf("-END CERTIFICATE-") >= 0){
            foundBegin = false;
            pem += line + "\n";
            pems.push(new Buffer(pem));
        }
        else if(foundBegin){
            pem += line + "\n";
        }
    }
    return pems;
}

var parsePEMDirectory = function(dirname){
    var files = fs.readdirSync(dirname);
    var pems = [];
    for(var i = 0; i < files.length; i++){
        var f = path.join(dirname,files[i]);
        var stat = fs.statSync(f);
        if(stat.isFile()){
            pems = pems.concat(parsePEMFile(f));
        }
    }
    return pems;
}

var createCredentials = function(options, context) {
    if(options.ca){
        options.ca = options.ca.concat(cacerts);
    }
    else{
        options.ca = cacerts;
    }
    return crypto.createCredentialsOriginal(options, context);
}


var cryptoPatch = function(dirname){
    cacerts = parsePEMDirectory(dirname);
    crypto.createCredentialsOriginal = crypto.createCredentials;
    crypto.createCredentials = createCredentials;
}

exports.parsePEMDirectory = parsePEMDirectory;
exports.cryptoPatch = cryptoPatch;

//console.log(parsePEMDirectory("/home/monceaux/Downloads/node_test"));