From 87c48778796daf7dc0ee6c34034a1141a32fced7 Mon Sep 17 00:00:00 2001 From: Jonathan Lepolt Date: Thu, 18 Dec 2014 09:06:41 -0500 Subject: [PATCH 1/2] Refactored some of the read key and generate key code to be more async w/ Promises. Removed .idea from .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 54e9df5..52c51b2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,3 @@ test/*.zip test/*.xml node_modules tmp -.idea From 6e160a7774c02ad51dff7af3de19ce4e17f01530 Mon Sep 17 00:00:00 2001 From: Jonathan Lepolt Date: Thu, 18 Dec 2014 09:08:38 -0500 Subject: [PATCH 2/2] Refactored some of the read key and generate key code to be more async w/ Promises. --- bin/crx.js | 118 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 71 insertions(+), 47 deletions(-) diff --git a/bin/crx.js b/bin/crx.js index 3517cc7..c9f5c03 100755 --- a/bin/crx.js +++ b/bin/crx.js @@ -3,6 +3,7 @@ var path = require("path"); var fs = require("fs"); var rsa = require('node-rsa'); +var Promise = require('es6-promise').Promise; var program = require("commander"); var ChromeExtension = require(".."); @@ -34,6 +35,45 @@ program program.parse(process.argv); +/** + * Read a specified key file from disk + * @param {String} keyPath path to the key to read + * @returns {Promise} + */ +function readKeyFile(keyPath) { + return new Promise(function (resolve, reject) { + fs.readFile(keyPath, function (err, data) { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +} + +/** + * Generate a new key file + * @param {String} keyPath path of the key file to create + * @returns {Promise} + */ +function generateKeyFile(keyPath) { + return new Promise(function(resolve, reject) { + var key = new rsa({b: 1024}), + keyVal = key.exportKey('pkcs1-private-pem'); + + fs.writeFile(keyPath, keyVal, function(err){ + if (err) { + throw err; + } + + console.log('Key file has been generated at %s', keyPath); + + resolve(keyVal); + }); + }); +} + function keygen (dir, program) { dir = dir ? resolve(cwd, dir) : cwd; @@ -44,21 +84,13 @@ function keygen (dir, program) { throw new Error('key.pem already exists in the given location.'); } - var key = new rsa({b: 1024}); - - fs.writeFile(keyPath, key.exportKey('pkcs1-private-pem'), function(err){ - if (err){ - throw err; - } - - console.log('%s has been generated in %s', 'key.pem', dir); - }); + generateKeyFile(keyPath); }); } function pack (dir, program) { var input = dir ? resolve(cwd, dir) : cwd; - var key = program.privateKey ? resolve(cwd, program.privateKey) : join(input, "key.pem"); + var keyPath = program.privateKey ? resolve(cwd, program.privateKey) : join(input, "key.pem"); var output; if (program.output) { @@ -78,48 +110,40 @@ function pack (dir, program) { maxBuffer: program.maxBuffer }); - // If a private key file exists, read in the contents - var keyData; - if (fs.existsSync(key) ) { - keyData = fs.readFileSync(key); - - if (keyData) { - crx.privateKey = keyData; - } - } else { - // Private key was not specified, let's create one - var newKey = new rsa({b: 1024}); - keyData = newKey.exportKey('pkcs1-private-pem'); - if (keyData) { - crx.privateKey = keyData; + readKeyFile(keyPath).then(null, function (err) { + // If the key file doesn't exist, create one + if (err.code === 'ENOENT') { + return generateKeyFile(keyPath); + } else { + throw err; } - fs.writeFileSync(key, keyData); - - console.log('%s has been generated in %s', key, input); - } - - crx.load().then(function () { - return crx.loadContents(); - }).then(function (zipBuffer) { + }).then(function (key) { + crx.privateKey = key; + }).then(function () { + crx.load().then(function () { + return crx.loadContents(); + }).then(function (zipBuffer) { - if (program.zipOutput) { - var outFile = resolve(cwd, program.zipOutput); + if (program.zipOutput) { + var outFile = resolve(cwd, program.zipOutput); - fs.createWriteStream(outFile).end(zipBuffer); - } + fs.createWriteStream(outFile).end(zipBuffer); + } - return crx.pack(zipBuffer); - }).then(function (crxBuffer) { + return crx.pack(zipBuffer); + }).then(function (crxBuffer) { - if (program.output) { - output = program.output; - } else { - output = path.basename(cwd) + '.crx'; - } + if (program.output) { + output = program.output; + } else { + output = path.basename(cwd) + '.crx'; + } - var outFile = resolve(cwd, output); - (outFile ? fs.createWriteStream(outFile) : process.stdout).end(crxBuffer); - }).then(function () { - console.log('%s has been generated in %s', output, cwd); + var outFile = resolve(cwd, output); + (outFile ? fs.createWriteStream(outFile) : process.stdout).end(crxBuffer); + }).then(function () { + console.log('%s has been generated in %s', output, cwd); + }); }); + }