From 9414fbcb15a1f9cf4fe147d070e9424c547dabba Mon Sep 17 00:00:00 2001 From: Luke William Westby Date: Sun, 27 Sep 2015 12:48:44 -0500 Subject: [PATCH] added async signing --- index.js | 15 +++++++++++---- test/async_sign.tests.js | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 test/async_sign.tests.js diff --git a/index.js b/index.js index d81cae6..18191ad 100644 --- a/index.js +++ b/index.js @@ -35,7 +35,7 @@ JWT.decode = function (jwt, options) { return payload; }; -JWT.sign = function(payload, secretOrPrivateKey, options) { +JWT.sign = function(payload, secretOrPrivateKey, options, callback) { options = options || {}; var header = {}; @@ -79,9 +79,16 @@ JWT.sign = function(payload, secretOrPrivateKey, options) { encoding = options.encoding; } - var signed = jws.sign({header: header, payload: payload, secret: secretOrPrivateKey, encoding: encoding}); - - return signed; + if(typeof callback === 'function') { + jws.createSign({ + header: header, + payload: payload, + privateKey: secretOrPrivateKey, + payload: JSON.stringify(payload) + }).on('done', callback); + } else { + return jws.sign({header: header, payload: payload, secret: secretOrPrivateKey, encoding: encoding}); + } }; JWT.verify = function(jwtString, secretOrPublicKey, options, callback) { diff --git a/test/async_sign.tests.js b/test/async_sign.tests.js new file mode 100644 index 0000000..57495a9 --- /dev/null +++ b/test/async_sign.tests.js @@ -0,0 +1,20 @@ +var jwt = require('../index'); + +var expect = require('chai').expect; + +describe('signing a token asynchronously', function() { + + describe('when signing a token', function() { + var secret = 'shhhhhh'; + var syncToken = jwt.sign({ foo: 'bar' }, secret, { algorithm: 'HS256' }); + + it('should return the same result as singing synchronously', function(done) { + jwt.sign({ foo: 'bar' }, secret, { algorithm: 'HS256' }, function (asyncToken) { + expect(asyncToken).to.be.a('string'); + expect(asyncToken.split('.')).to.have.length(3); + expect(asyncToken).to.equal(syncToken); + done(); + }); + }); + }); +});