@accounts/two-factor
Advanced tools
+3
-3
@@ -6,7 +6,7 @@ "use strict"; | ||
| userNotFound: 'User not found', | ||
| codeDidNotMatch: "2FA code didn't match", | ||
| userTwoFactorNotSet: "2FA not set", | ||
| userTwoFactorAlreadySet: "2FA already set", | ||
| codeDidNotMatch: `2FA code didn't match`, | ||
| userTwoFactorNotSet: `2FA not set`, | ||
| userTwoFactorAlreadySet: `2FA already set`, | ||
| codeRequired: '2FA code required', | ||
| }; | ||
| //# sourceMappingURL=errors.js.map |
+84
-114
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.TwoFactor = void 0; | ||
| var tslib_1 = require("tslib"); | ||
| var speakeasy = tslib_1.__importStar(require("speakeasy")); | ||
| var errors_1 = require("./errors"); | ||
| var utils_1 = require("./utils"); | ||
| var defaultOptions = { | ||
| const tslib_1 = require("tslib"); | ||
| const speakeasy = tslib_1.__importStar(require("speakeasy")); | ||
| const errors_1 = require("./errors"); | ||
| const utils_1 = require("./utils"); | ||
| const defaultOptions = { | ||
| secretLength: 20, | ||
@@ -13,7 +13,6 @@ window: 0, | ||
| }; | ||
| var TwoFactor = /** @class */ (function () { | ||
| function TwoFactor(options) { | ||
| if (options === void 0) { options = {}; } | ||
| class TwoFactor { | ||
| constructor(options = {}) { | ||
| this.serviceName = 'two-factor'; | ||
| this.options = tslib_1.__assign(tslib_1.__assign({}, defaultOptions), options); | ||
| this.options = { ...defaultOptions, ...options }; | ||
| } | ||
@@ -23,36 +22,30 @@ /** | ||
| */ | ||
| TwoFactor.prototype.setStore = function (store) { | ||
| setStore(store) { | ||
| this.db = store; | ||
| }; | ||
| } | ||
| /** | ||
| * Authenticate a user with a 2fa code | ||
| */ | ||
| TwoFactor.prototype.authenticate = function (user, code) { | ||
| return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
| var twoFactorService; | ||
| return tslib_1.__generator(this, function (_a) { | ||
| if (!code) { | ||
| throw new Error(this.options.errors.codeRequired); | ||
| } | ||
| twoFactorService = utils_1.getUserTwoFactorService(user); | ||
| // If user does not have 2fa set return error | ||
| if (!twoFactorService) { | ||
| throw new Error(this.options.errors.userTwoFactorNotSet); | ||
| } | ||
| if (!speakeasy.totp.verify({ | ||
| secret: twoFactorService.secret.base32, | ||
| encoding: 'base32', | ||
| token: code, | ||
| window: this.options.window, | ||
| })) { | ||
| throw new Error(this.options.errors.codeDidNotMatch); | ||
| } | ||
| return [2 /*return*/]; | ||
| }); | ||
| }); | ||
| }; | ||
| async authenticate(user, code) { | ||
| if (!code) { | ||
| throw new Error(this.options.errors.codeRequired); | ||
| } | ||
| const twoFactorService = utils_1.getUserTwoFactorService(user); | ||
| // If user does not have 2fa set return error | ||
| if (!twoFactorService) { | ||
| throw new Error(this.options.errors.userTwoFactorNotSet); | ||
| } | ||
| if (!speakeasy.totp.verify({ | ||
| secret: twoFactorService.secret.base32, | ||
| encoding: 'base32', | ||
| token: code, | ||
| window: this.options.window, | ||
| })) { | ||
| throw new Error(this.options.errors.codeDidNotMatch); | ||
| } | ||
| } | ||
| /** | ||
| * Generate a new two factor secret | ||
| */ | ||
| TwoFactor.prototype.getNewAuthSecret = function () { | ||
| getNewAuthSecret() { | ||
| return speakeasy.generateSecret({ | ||
@@ -62,3 +55,3 @@ length: this.options.secretLength, | ||
| }); | ||
| }; | ||
| } | ||
| /** | ||
@@ -69,83 +62,60 @@ * Verify the code is correct | ||
| */ | ||
| TwoFactor.prototype.set = function (userId, secret, code) { | ||
| return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
| var user, twoFactorService; | ||
| return tslib_1.__generator(this, function (_a) { | ||
| switch (_a.label) { | ||
| case 0: | ||
| if (!code) { | ||
| throw new Error(this.options.errors.codeRequired); | ||
| } | ||
| return [4 /*yield*/, this.db.findUserById(userId)]; | ||
| case 1: | ||
| user = _a.sent(); | ||
| if (!user) { | ||
| throw new Error(this.options.errors.userNotFound); | ||
| } | ||
| twoFactorService = utils_1.getUserTwoFactorService(user); | ||
| // If user already have 2fa return error | ||
| if (twoFactorService) { | ||
| throw new Error(this.options.errors.userTwoFactorAlreadySet); | ||
| } | ||
| if (!speakeasy.totp.verify({ | ||
| secret: secret.base32, | ||
| encoding: 'base32', | ||
| token: code, | ||
| window: this.options.window, | ||
| })) return [3 /*break*/, 3]; | ||
| twoFactorService = { | ||
| secret: secret, | ||
| }; | ||
| return [4 /*yield*/, this.db.setService(userId, this.serviceName, twoFactorService)]; | ||
| case 2: | ||
| _a.sent(); | ||
| return [3 /*break*/, 4]; | ||
| case 3: throw new Error(this.options.errors.codeDidNotMatch); | ||
| case 4: return [2 /*return*/]; | ||
| } | ||
| }); | ||
| }); | ||
| }; | ||
| async set(userId, secret, code) { | ||
| if (!code) { | ||
| throw new Error(this.options.errors.codeRequired); | ||
| } | ||
| const user = await this.db.findUserById(userId); | ||
| if (!user) { | ||
| throw new Error(this.options.errors.userNotFound); | ||
| } | ||
| let twoFactorService = utils_1.getUserTwoFactorService(user); | ||
| // If user already have 2fa return error | ||
| if (twoFactorService) { | ||
| throw new Error(this.options.errors.userTwoFactorAlreadySet); | ||
| } | ||
| if (speakeasy.totp.verify({ | ||
| secret: secret.base32, | ||
| encoding: 'base32', | ||
| token: code, | ||
| window: this.options.window, | ||
| })) { | ||
| twoFactorService = { | ||
| secret, | ||
| }; | ||
| await this.db.setService(userId, this.serviceName, twoFactorService); | ||
| } | ||
| else { | ||
| throw new Error(this.options.errors.codeDidNotMatch); | ||
| } | ||
| } | ||
| /** | ||
| * Remove two factor for a user | ||
| */ | ||
| TwoFactor.prototype.unset = function (userId, code) { | ||
| return tslib_1.__awaiter(this, void 0, void 0, function () { | ||
| var user, twoFactorService; | ||
| return tslib_1.__generator(this, function (_a) { | ||
| switch (_a.label) { | ||
| case 0: | ||
| if (!code) { | ||
| throw new Error(this.options.errors.codeRequired); | ||
| } | ||
| return [4 /*yield*/, this.db.findUserById(userId)]; | ||
| case 1: | ||
| user = _a.sent(); | ||
| if (!user) { | ||
| throw new Error(this.options.errors.userNotFound); | ||
| } | ||
| twoFactorService = utils_1.getUserTwoFactorService(user); | ||
| // If user does not have 2fa set return error | ||
| if (!twoFactorService) { | ||
| throw new Error(this.options.errors.userTwoFactorNotSet); | ||
| } | ||
| if (speakeasy.totp.verify({ | ||
| secret: twoFactorService.secret.base32, | ||
| encoding: 'base32', | ||
| token: code, | ||
| window: this.options.window, | ||
| })) { | ||
| this.db.unsetService(userId, this.serviceName); | ||
| } | ||
| else { | ||
| throw new Error(this.options.errors.codeDidNotMatch); | ||
| } | ||
| return [2 /*return*/]; | ||
| } | ||
| }); | ||
| }); | ||
| }; | ||
| return TwoFactor; | ||
| }()); | ||
| async unset(userId, code) { | ||
| if (!code) { | ||
| throw new Error(this.options.errors.codeRequired); | ||
| } | ||
| const user = await this.db.findUserById(userId); | ||
| if (!user) { | ||
| throw new Error(this.options.errors.userNotFound); | ||
| } | ||
| const twoFactorService = utils_1.getUserTwoFactorService(user); | ||
| // If user does not have 2fa set return error | ||
| if (!twoFactorService) { | ||
| throw new Error(this.options.errors.userTwoFactorNotSet); | ||
| } | ||
| if (speakeasy.totp.verify({ | ||
| secret: twoFactorService.secret.base32, | ||
| encoding: 'base32', | ||
| token: code, | ||
| window: this.options.window, | ||
| })) { | ||
| this.db.unsetService(userId, this.serviceName); | ||
| } | ||
| else { | ||
| throw new Error(this.options.errors.codeDidNotMatch); | ||
| } | ||
| } | ||
| } | ||
| exports.TwoFactor = TwoFactor; | ||
| //# sourceMappingURL=two-factor.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"two-factor.js","sourceRoot":"","sources":["../src/two-factor.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"two-factor.js","sourceRoot":"","sources":["../src/two-factor.ts"],"names":[],"mappings":"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"} |
@@ -7,3 +7,3 @@ "use strict"; | ||
| */ | ||
| exports.getUserTwoFactorService = function (user) { | ||
| exports.getUserTwoFactorService = (user) => { | ||
| var _a, _b; | ||
@@ -10,0 +10,0 @@ return (_b = (_a = user.services) === null || _a === void 0 ? void 0 : _a['two-factor']) !== null && _b !== void 0 ? _b : null; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/utils/user.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACU,QAAA,uBAAuB,GAAG,UAAC,IAAU;;IAChD,mBAAO,IAAI,CAAC,QAAQ,0CAAG,YAAY,oCAAK,IAAI,CAAC;AAC/C,CAAC,CAAC"} | ||
| {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/utils/user.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACU,QAAA,uBAAuB,GAAG,CAAC,IAAU,EAA2B,EAAE;;IAC7E,mBAAO,IAAI,CAAC,QAAQ,0CAAG,YAAY,oCAAK,IAAI,CAAC;AAC/C,CAAC,CAAC"} |
+3
-3
| { | ||
| "name": "@accounts/two-factor", | ||
| "version": "0.30.0", | ||
| "version": "0.31.0", | ||
| "license": "MIT", | ||
@@ -29,3 +29,3 @@ "main": "lib/index.js", | ||
| "dependencies": { | ||
| "@accounts/types": "^0.30.0", | ||
| "@accounts/types": "^0.31.0", | ||
| "@types/speakeasy": "2.0.2", | ||
@@ -40,3 +40,3 @@ "speakeasy": "^2.0.0", | ||
| }, | ||
| "gitHead": "a883d3b90c481e9c73a7655ef2aadac092fc6b0e" | ||
| "gitHead": "8938531dd59f40e14e029c8785433acb455bd58c" | ||
| } |
19770
-10.7%426
-6.58%+ Added
- Removed
Updated