passport-2fa-totp
Version:
TOTP based Two-Factor Authentication for Passport and Node.js
29 lines (23 loc) • 819 B
JavaScript
;
var crypto = require('crypto'),
util = require('util'),
base32 = require('thirty-two'),
qr = require('qr-image');
module.exports = {
register: function (username) {
if (!username) {
throw new TypeError("Username is required");
}
var secret = base32.encode(crypto.randomBytes(32));
secret = secret.toString().replace(/=/g, ''); // Google Authenticator ignores '='
var authUrl = util.format('otpauth://totp/%s?secret=%s', username, secret);
var qrCode = qr.imageSync(authUrl, { type: 'svg' });
return {
secret: secret,
qr: qrCode
};
},
decodeSecret: function (secret) {
return base32.decode(secret);
}
};