passwordless
Advanced tools
Comparing version
@@ -0,1 +1,12 @@ | ||
# 1.0.5 (2014-11-07) | ||
Bugfixes: | ||
- N/A | ||
Features: | ||
- ADD addDelivery options.numberToken to generate number-based tokens | ||
Documentation: | ||
- Small update to include numberToken | ||
# 1.0.4 (2014-10-29) | ||
@@ -2,0 +13,0 @@ |
@@ -435,3 +435,7 @@ 'use strict'; | ||
try { | ||
token = (deliveryMethod.options.tokenAlgorithm || self._generateToken())(); | ||
if(deliveryMethod.options.numberToken && deliveryMethod.options.numberToken.max) { | ||
token = self._generateNumberToken(deliveryMethod.options.numberToken.max); | ||
} else { | ||
token = (deliveryMethod.options.tokenAlgorithm || self._generateToken())(); | ||
} | ||
} catch(err) { | ||
@@ -505,3 +509,6 @@ next(new Error('Error while generating a token: ' + err)); | ||
* @param {function()} [options.tokenAlgorithm] - The algorithm used to generate a token. | ||
* Should simply return the token in sync mode (default: UUID v4) | ||
* Function shall return the token in sync mode (default: Base58 token) | ||
* @param {Number} [options.numberToken.max] - Overwrites the default token generator | ||
* by a random number generator which generates numbers between 0 and max. Cannot be used | ||
* together with options.tokenAlgorithm | ||
*/ | ||
@@ -523,4 +530,7 @@ Passwordless.prototype.addDelivery = function(name, sendToken, options) { | ||
} else if((options.ttl && typeof options.ttl !== 'number') || | ||
(options.tokenAlgorithm && typeof options.tokenAlgorithm !== 'function')) { | ||
(options.tokenAlgorithm && typeof options.tokenAlgorithm !== 'function') || | ||
(options.numberToken && (!options.numberToken.max || typeof options.numberToken.max !== 'number'))) { | ||
throw new Error('One of the provided options is of the wrong format'); | ||
} else if(options.tokenAlgorithm && options.numberToken) { | ||
throw new Error('options.tokenAlgorithm cannot be used together with options.numberToken'); | ||
} else if(this._defaultDelivery) { | ||
@@ -599,2 +609,16 @@ throw new Error('Only one default delivery method shall be defined and not be mixed up with named methods. Use named delivery methods instead') | ||
/** | ||
* Generates a strong random number between 0 and a maximum value. The | ||
* maximum value cannot exceed 2^32 | ||
* @param {Number} max - Maximum number to be generated | ||
* @return {Number} Random number between 0 and max | ||
* @throws {Error} Will throw an error if there is no sufficient | ||
* entropy accumulated | ||
* @private | ||
*/ | ||
Passwordless.prototype._generateNumberToken = function(max) { | ||
var buf = crypto.randomBytes(4); | ||
return Math.floor(buf.readUInt32BE(0)%max); | ||
}; | ||
module.exports = Passwordless; |
{ | ||
"name": "passwordless", | ||
"version": "1.0.4", | ||
"version": "1.0.5", | ||
"description": "A node.js/express module for passwordless authentication", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
49843
2.71%617
3.87%