UNPKG

peerca

Version:

generate ssl certificates for peer authentication

124 lines (114 loc) 3.13 kB
#!/usr/bin/env node var fs = require('fs'); var path = require('path'); var spawn = require('child_process').spawn; var minimist = require('minimist'); var through = require('through2'); var defined = require('defined'); var has = require('has'); var peerca = require('../'); var argv = minimist(process.argv.slice(2), { alias: { h: 'host', d: ['dir','directory'], p: 'port', o: 'outfile', i: 'infile' }, default: { dir: defined( process.env.PEERCA_PATH, path.join(process.env.HOME, '.config/peerca') ), host: defined(process.env.PEERCA_HOST, 'localhost'), outfile: '-', infile: '-' } }); var cmd = argv._[0]; if (argv.help || match(cmd, 'help', 2)) { usage(0); } else if (match(cmd, 'generate', 1)) { var ca = peerca(argv); var ps = ca.generate(); ps.stderr.pipe(process.stderr); ps.stdout.pipe(process.stdout); } else if (match(cmd, 'hash', 2)) { var ca = peerca(argv); ca.fingerprint(function (err, hash) { if (err) { console.error(err); process.exit(1); } else console.log(hash); }); } else if (match(cmd, 'authorize', 2)) { var name = argv._[1]; if (!name) { console.error('ERROR: local name required for csr\n'); return usage(1); } var ca = peerca(argv); var input = argv.infile !== '-' ? fs.createReadStream(argv.infile) : process.stdin ; var output = argv.outfile !== '-' ? fs.createWriteStream(argv.outfile) : process.stdout ; input.pipe(ca.authorize(name)).pipe(output); } else if (match(cmd, 'request', 2)) { var ca = peerca(argv); ca.request().pipe(process.stdout); } else if (match(cmd, 'save', 2)) { var name = argv._[1]; if (!name) { console.error('ERROR: FQDN argument required\n'); return usage(1); } var ca = peerca(argv); var input = argv.infile !== '-' ? fs.createReadStream(argv.infile) : process.stdin ; input.pipe(ca.save(name)); } else if (match(cmd, 'list', 1) || match(cmd, 'ls', 1)) { var name = argv._[1]; if (match(name, 'host', 1)) name = 'host'; if (match(name, 'authorized', 1)) name = 'authorized'; if (match(name, 'saved', 1)) name = 'saved'; var ca = peerca(argv); ca.list(name, function (err, ls) { if (err) { console.error(err); process.exit(1); } else ls.forEach(function (l) { console.log(l) }); }); } else if (match(cmd, 'file', 2)) { var name = argv._[1]; var ca = peerca(argv); var files = ca.files(argv.c); if (!has(files, name)) { console.error('No such file.'); process.exit(1); } else console.log(files[name]); } else usage(1) function match (s, m, len) { return s && s.length >= len && m.slice(0, s.length) === s; } function usage (code) { var rs = fs.createReadStream(__dirname + '/usage.txt'); rs.pipe(process.stdout); if (code) rs.on('end', function () { process.exit(code) }); }