@spinajs/rbac-http-user 2.0.372 → 2.0.374
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/2fa/Default2FaToken.d.ts +20 -0
- package/lib/cjs/2fa/Default2FaToken.d.ts.map +1 -0
- package/lib/cjs/2fa/Default2FaToken.js +122 -0
- package/lib/cjs/2fa/Default2FaToken.js.map +1 -0
- package/lib/cjs/actions/2fa.d.ts +11 -0
- package/lib/cjs/actions/2fa.d.ts.map +1 -0
- package/lib/cjs/actions/2fa.js +34 -0
- package/lib/cjs/actions/2fa.js.map +1 -0
- package/lib/cjs/config/rbac-http.d.ts +13 -0
- package/lib/cjs/config/rbac-http.d.ts.map +1 -1
- package/lib/cjs/config/rbac-http.js +14 -1
- package/lib/cjs/config/rbac-http.js.map +1 -1
- package/lib/cjs/controllers/LoginController.d.ts +1 -0
- package/lib/cjs/controllers/LoginController.d.ts.map +1 -1
- package/lib/cjs/controllers/LoginController.js +39 -108
- package/lib/cjs/controllers/LoginController.js.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts +9 -0
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthController.js +81 -56
- package/lib/cjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/cjs/policies/2FaPolicy.d.ts +2 -2
- package/lib/cjs/policies/2FaPolicy.d.ts.map +1 -1
- package/lib/cjs/policies/2FaPolicy.js +8 -1
- package/lib/cjs/policies/2FaPolicy.js.map +1 -1
- package/lib/mjs/2fa/Default2FaToken.d.ts +20 -0
- package/lib/mjs/2fa/Default2FaToken.d.ts.map +1 -0
- package/lib/mjs/2fa/Default2FaToken.js +96 -0
- package/lib/mjs/2fa/Default2FaToken.js.map +1 -0
- package/lib/mjs/actions/2fa.d.ts +11 -0
- package/lib/mjs/actions/2fa.d.ts.map +1 -0
- package/lib/mjs/actions/2fa.js +30 -0
- package/lib/mjs/actions/2fa.js.map +1 -0
- package/lib/mjs/config/rbac-http.d.ts +13 -0
- package/lib/mjs/config/rbac-http.d.ts.map +1 -1
- package/lib/mjs/config/rbac-http.js +14 -1
- package/lib/mjs/config/rbac-http.js.map +1 -1
- package/lib/mjs/controllers/LoginController.d.ts +1 -0
- package/lib/mjs/controllers/LoginController.d.ts.map +1 -1
- package/lib/mjs/controllers/LoginController.js +39 -108
- package/lib/mjs/controllers/LoginController.js.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts +9 -1
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthController.js +78 -57
- package/lib/mjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/mjs/policies/2FaPolicy.d.ts +2 -2
- package/lib/mjs/policies/2FaPolicy.d.ts.map +1 -1
- package/lib/mjs/policies/2FaPolicy.js +8 -1
- package/lib/mjs/policies/2FaPolicy.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +12 -11
- package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts +0 -1
- package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
- package/lib/cjs/2fa/SpeakEasy2FaToken.js +0 -48
- package/lib/cjs/2fa/SpeakEasy2FaToken.js.map +0 -1
- package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts +0 -2
- package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
- package/lib/mjs/2fa/SpeakEasy2FaToken.js +0 -49
- package/lib/mjs/2fa/SpeakEasy2FaToken.js.map +0 -1
|
@@ -1,57 +1,82 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TwoFactorAuthController = void 0;
|
|
16
|
+
const token_dto_js_1 = require("./../dto/token-dto.js");
|
|
17
|
+
const http_1 = require("@spinajs/http");
|
|
18
|
+
const rbac_1 = require("@spinajs/rbac");
|
|
19
|
+
const rbac_http_1 = require("@spinajs/rbac-http");
|
|
20
|
+
const http_2 = require("@spinajs/http");
|
|
21
|
+
const _2FaPolicy_js_1 = require("../policies/2FaPolicy.js");
|
|
22
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
23
|
+
const di_1 = require("@spinajs/di");
|
|
24
|
+
const queue_1 = require("@spinajs/queue");
|
|
25
|
+
const rbac_http_2 = require("@spinajs/rbac-http");
|
|
26
|
+
const _2fa_js_1 = require("./../actions/2fa.js");
|
|
27
|
+
let TwoFactorAuthController = class TwoFactorAuthController extends http_1.BaseController {
|
|
28
|
+
async verifyToken(logged, token, session) {
|
|
29
|
+
try {
|
|
30
|
+
await (0, _2fa_js_1.auth2Fa)(logged, token.Token);
|
|
31
|
+
// 2fa complete, mark as authorized
|
|
32
|
+
// fron now on user is considered authorized
|
|
33
|
+
session.Data.set('Authorized', true);
|
|
34
|
+
session.Data.delete('TwoFactorAuth');
|
|
35
|
+
await this.SessionProvider.save(session);
|
|
36
|
+
this._log.trace('User logged in, 2fa authorized', {
|
|
37
|
+
Uuid: logged.Uuid
|
|
38
|
+
});
|
|
39
|
+
const grants = this.AC.getGrants();
|
|
40
|
+
const userGrants = logged.Role.map(r => (0, rbac_1._unwindGrants)(r, grants));
|
|
41
|
+
const combinedGrants = Object.assign({}, ...userGrants);
|
|
42
|
+
return new http_1.Ok({
|
|
43
|
+
...logged.dehydrateWithRelations({
|
|
44
|
+
dateTimeFormat: "iso"
|
|
45
|
+
}),
|
|
46
|
+
Grants: combinedGrants,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
this._log.error(err);
|
|
51
|
+
return new http_1.Unauthorized({
|
|
52
|
+
error: {
|
|
53
|
+
code: 'E_2FA_FAILED',
|
|
54
|
+
message: '2fa check failed',
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
exports.TwoFactorAuthController = TwoFactorAuthController;
|
|
61
|
+
__decorate([
|
|
62
|
+
(0, di_1.Autoinject)(queue_1.QueueService),
|
|
63
|
+
__metadata("design:type", queue_1.QueueService)
|
|
64
|
+
], TwoFactorAuthController.prototype, "Queue", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
(0, configuration_1.AutoinjectService)('rbac.session'),
|
|
67
|
+
__metadata("design:type", rbac_1.SessionProvider)
|
|
68
|
+
], TwoFactorAuthController.prototype, "SessionProvider", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
(0, http_1.Post)('2fa/verify'),
|
|
71
|
+
__param(0, (0, rbac_http_2.User)()),
|
|
72
|
+
__param(1, (0, http_2.Body)()),
|
|
73
|
+
__param(2, (0, rbac_http_1.Session)()),
|
|
74
|
+
__metadata("design:type", Function),
|
|
75
|
+
__metadata("design:paramtypes", [rbac_1.User, token_dto_js_1.TokenDto, Object]),
|
|
76
|
+
__metadata("design:returntype", Promise)
|
|
77
|
+
], TwoFactorAuthController.prototype, "verifyToken", null);
|
|
78
|
+
exports.TwoFactorAuthController = TwoFactorAuthController = __decorate([
|
|
79
|
+
(0, http_1.BasePath)('user/auth'),
|
|
80
|
+
(0, http_2.Policy)(_2FaPolicy_js_1.TwoFacRouteEnabled)
|
|
81
|
+
], TwoFactorAuthController);
|
|
57
82
|
//# sourceMappingURL=TwoFactorAuthController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwoFactorAuthController.js","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"TwoFactorAuthController.js","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wDAAiD;AACjD,wCAAiF;AACjF,wCAAoH;AACpH,kDAA6C;AAC7C,wCAA6C;AAE7C,4DAA8D;AAC9D,0DAAqE;AACrE,oCAAyC;AACzC,0CAA8C;AAE9C,kDAA0C;AAC1C,iDAA8C;AAIvC,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,qBAAc;IAQ1C,AAAN,KAAK,CAAC,WAAW,CAAS,MAAiB,EAAU,KAAe,EAAa,OAAiB;QAErG,IAAI,CAAC;YACD,MAAM,IAAA,iBAAO,EAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnC,mCAAmC;YACnC,4CAA4C;YAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACrC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gCAAgC,EAAE;gBAC9C,IAAI,EAAE,MAAM,CAAC,IAAI;aACpB,CAAC,CAAC;YAGH,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,oBAAa,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YAClE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC;YAGxD,OAAO,IAAI,SAAE,CAAC;gBACV,GAAG,MAAM,CAAC,sBAAsB,CAAC;oBAC7B,cAAc,EAAE,KAAK;iBACxB,CAAC;gBACF,MAAM,EAAE,cAAc;aACzB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAErB,OAAO,IAAI,mBAAY,CAAC;gBACpB,KAAK,EAAE;oBACH,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,kBAAkB;iBAC9B;aACJ,CAAC,CAAC;QACP,CAAC;IACL,CAAC;CACJ,CAAA;AA/CY,0DAAuB;AAEtB;IADT,IAAA,eAAU,EAAC,oBAAY,CAAC;8BACR,oBAAY;sDAAC;AAGpB;IADT,IAAA,iCAAiB,EAAC,cAAc,CAAC;8BACP,sBAAe;gEAAC;AAG9B;IADZ,IAAA,WAAI,EAAC,YAAY,CAAC;IACO,WAAA,IAAA,gBAAI,GAAE,CAAA;IAAqB,WAAA,IAAA,WAAI,GAAE,CAAA;IAAmB,WAAA,IAAA,mBAAO,GAAE,CAAA;;qCAA9C,WAAS,EAAiB,uBAAQ;;0DAsC1E;kCA9CQ,uBAAuB;IAFnC,IAAA,eAAQ,EAAC,WAAW,CAAC;IACrB,IAAA,aAAM,EAAC,kCAAkB,CAAC;GACd,uBAAuB,CA+CnC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { BasePolicy } from '@spinajs/http';
|
|
1
|
+
import { BasePolicy, Request as sRequest } from '@spinajs/http';
|
|
2
2
|
import { TwoFactorAuthConfig } from '@spinajs/rbac-http';
|
|
3
3
|
export declare class TwoFacRouteEnabled extends BasePolicy {
|
|
4
4
|
protected TwoFactorConfig: TwoFactorAuthConfig;
|
|
5
5
|
isEnabled(): boolean;
|
|
6
|
-
execute(): Promise<void>;
|
|
6
|
+
execute(req: sRequest): Promise<void>;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=2FaPolicy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"2FaPolicy.d.ts","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"2FaPolicy.d.ts","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,qBAAa,kBAAmB,SAAQ,UAAU;IAEhD,SAAS,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAExC,SAAS,IAAI,OAAO;IAGpB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAe7C"}
|
|
@@ -13,14 +13,21 @@ exports.TwoFacRouteEnabled = void 0;
|
|
|
13
13
|
const exceptions_1 = require("@spinajs/exceptions");
|
|
14
14
|
const configuration_1 = require("@spinajs/configuration");
|
|
15
15
|
const http_1 = require("@spinajs/http");
|
|
16
|
+
const exceptions_2 = require("@spinajs/exceptions");
|
|
16
17
|
class TwoFacRouteEnabled extends http_1.BasePolicy {
|
|
17
18
|
isEnabled() {
|
|
18
19
|
return true;
|
|
19
20
|
}
|
|
20
|
-
execute() {
|
|
21
|
+
execute(req) {
|
|
21
22
|
if (this.TwoFactorConfig.enabled === false) {
|
|
22
23
|
throw new exceptions_1.InvalidOperation('2 factor auth is not enabled');
|
|
23
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Check only if user passed login page and waiting for TwoFactorAuth
|
|
27
|
+
*/
|
|
28
|
+
if (!req.storage || !req.storage.User || !req.storage.Session?.Data.get('TwoFactorAuth')) {
|
|
29
|
+
throw new exceptions_2.AuthenticationFailed('user not logged');
|
|
30
|
+
}
|
|
24
31
|
return Promise.resolve();
|
|
25
32
|
}
|
|
26
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"2FaPolicy.js","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAuD;AACvD,0DAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"2FaPolicy.js","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAuD;AACvD,0DAAgD;AAChD,wCAAgE;AAEhE,oDAA2D;AAE3D,MAAa,kBAAmB,SAAQ,iBAAU;IAIzC,SAAS;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACM,OAAO,CAAC,GAAa;QAC1B,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3C,MAAM,IAAI,6BAAgB,CAAC,8BAA8B,CAAC,CAAC;QAC7D,CAAC;QAED;;WAEG;QACH,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,iCAAoB,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC;QAGD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAtBD,gDAsBC;AApBW;IADT,IAAA,sBAAM,EAAC,oBAAoB,CAAC;;2DACkB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { User } from '@spinajs/rbac';
|
|
2
|
+
import { Log } from '@spinajs/log';
|
|
3
|
+
import { TwoFactorAuthProvider } from "@spinajs/rbac-http";
|
|
4
|
+
export declare enum TWO_FA_METATADATA_KEYS {
|
|
5
|
+
TOKEN = "2fa:token",
|
|
6
|
+
ENABLED = "2fa:enabled"
|
|
7
|
+
}
|
|
8
|
+
export declare class Default2FaToken extends TwoFactorAuthProvider {
|
|
9
|
+
protected Config: any;
|
|
10
|
+
protected Log: Log;
|
|
11
|
+
constructor();
|
|
12
|
+
private _getOTP;
|
|
13
|
+
execute(_: User): Promise<void>;
|
|
14
|
+
verifyToken(token: string, user: User): Promise<boolean>;
|
|
15
|
+
initialize(user: User): Promise<any>;
|
|
16
|
+
getOtpAuthUrl(user: User): Promise<string | null>;
|
|
17
|
+
isEnabled(user: User): Promise<boolean>;
|
|
18
|
+
isInitialized(user: User): Promise<boolean>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Default2FaToken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Default2FaToken.d.ts","sourceRoot":"","sources":["../../../src/2fa/Default2FaToken.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,oBAAY,sBAAsB;IAC9B,KAAK,cAAc;IACnB,OAAO,gBAAgB;CAC1B;AAED,qBACa,eAAgB,SAAQ,qBAAqB;IAEtD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;IAGtB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;;IAMnB,OAAO,CAAC,OAAO;IAYR,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBxD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IAiBpC,aAAa,CAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAYlD,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvC,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;CAI3D"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Injectable } from '@spinajs/di';
|
|
11
|
+
import { Config } from '@spinajs/configuration';
|
|
12
|
+
import { Log, Logger } from '@spinajs/log';
|
|
13
|
+
import { TwoFactorAuthProvider } from "@spinajs/rbac-http";
|
|
14
|
+
import * as OTPAuth from "otpauth";
|
|
15
|
+
export var TWO_FA_METATADATA_KEYS;
|
|
16
|
+
(function (TWO_FA_METATADATA_KEYS) {
|
|
17
|
+
TWO_FA_METATADATA_KEYS["TOKEN"] = "2fa:token";
|
|
18
|
+
TWO_FA_METATADATA_KEYS["ENABLED"] = "2fa:enabled";
|
|
19
|
+
})(TWO_FA_METATADATA_KEYS || (TWO_FA_METATADATA_KEYS = {}));
|
|
20
|
+
let Default2FaToken = class Default2FaToken extends TwoFactorAuthProvider {
|
|
21
|
+
constructor() {
|
|
22
|
+
super();
|
|
23
|
+
}
|
|
24
|
+
_getOTP(user, secret) {
|
|
25
|
+
return new OTPAuth.TOTP({
|
|
26
|
+
issuer: this.Config.issuer,
|
|
27
|
+
label: user.Email,
|
|
28
|
+
algorithm: this.Config.algorithm,
|
|
29
|
+
digits: this.Config.digits,
|
|
30
|
+
period: this.Config.period,
|
|
31
|
+
secret: OTPAuth.Secret.fromBase32(secret),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
execute(_) {
|
|
35
|
+
// empty, speakasy works offline eg. google authenticator
|
|
36
|
+
// we dont send any email or sms
|
|
37
|
+
return Promise.resolve();
|
|
38
|
+
}
|
|
39
|
+
async verifyToken(token, user) {
|
|
40
|
+
const twoFaToken = user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN];
|
|
41
|
+
if (!twoFaToken) {
|
|
42
|
+
this.Log.trace(`Cannot verify 2fa token, no 2fa token for user ${user.Id}`);
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const totp = this._getOTP(user, twoFaToken);
|
|
46
|
+
const verified = totp.validate({
|
|
47
|
+
token: token,
|
|
48
|
+
window: this.Config.window,
|
|
49
|
+
});
|
|
50
|
+
return verified == null;
|
|
51
|
+
}
|
|
52
|
+
async initialize(user) {
|
|
53
|
+
const secret = new OTPAuth.Secret({ size: this.Config.secretSize });
|
|
54
|
+
const totp = this._getOTP(user, secret.base32);
|
|
55
|
+
user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN] = secret.base32;
|
|
56
|
+
await user.Metadata.sync();
|
|
57
|
+
this.Log.trace(`2fa token initialized for user ${user.Id}`, {
|
|
58
|
+
userId: user.Id,
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* returns: `otpauth://totp/ACME:Alice?issuer=ACME&secret=US3WHSG7X5KAPV27VANWKQHF3SH3HULL&algorithm=SHA1&digits=6&period=30`
|
|
62
|
+
*/
|
|
63
|
+
return totp.toString();
|
|
64
|
+
}
|
|
65
|
+
async getOtpAuthUrl(user) {
|
|
66
|
+
const token = user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN];
|
|
67
|
+
if (!token) {
|
|
68
|
+
this.Log.trace(`Cannot get 2fa auth url, no 2fa token for user ${user.Id}`);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
const totp = this._getOTP(user, token);
|
|
72
|
+
return totp.toString();
|
|
73
|
+
}
|
|
74
|
+
async isEnabled(user) {
|
|
75
|
+
const val = await user.Metadata[TWO_FA_METATADATA_KEYS.ENABLED];
|
|
76
|
+
return val;
|
|
77
|
+
}
|
|
78
|
+
async isInitialized(user) {
|
|
79
|
+
const token = user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN];
|
|
80
|
+
return token !== null && token !== undefined && token !== '';
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
__decorate([
|
|
84
|
+
Config('rbac.otpauth'),
|
|
85
|
+
__metadata("design:type", Object)
|
|
86
|
+
], Default2FaToken.prototype, "Config", void 0);
|
|
87
|
+
__decorate([
|
|
88
|
+
Logger('2fa-token'),
|
|
89
|
+
__metadata("design:type", Log)
|
|
90
|
+
], Default2FaToken.prototype, "Log", void 0);
|
|
91
|
+
Default2FaToken = __decorate([
|
|
92
|
+
Injectable(TwoFactorAuthProvider),
|
|
93
|
+
__metadata("design:paramtypes", [])
|
|
94
|
+
], Default2FaToken);
|
|
95
|
+
export { Default2FaToken };
|
|
96
|
+
//# sourceMappingURL=Default2FaToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Default2FaToken.js","sourceRoot":"","sources":["../../../src/2fa/Default2FaToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { User } from '@spinajs/rbac';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* Verify 2fa token for user
|
|
5
|
+
*
|
|
6
|
+
* @param user
|
|
7
|
+
* @param token
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export declare function auth2Fa(identifier: number | string | User, token: string): Promise<unknown>;
|
|
11
|
+
//# sourceMappingURL=2fa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2fa.d.ts","sourceRoot":"","sources":["../../../src/actions/2fa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwC,MAAM,eAAe,CAAC;AAU3E;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,oBAwB9E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { _user_ev, _user_unsafe, _user_update } from '@spinajs/rbac';
|
|
2
|
+
import { _service } from '@spinajs/configuration';
|
|
3
|
+
import { DateTime } from 'luxon';
|
|
4
|
+
import { _chain, _check_arg, _non_empty, _trim, _catch } from '@spinajs/util';
|
|
5
|
+
import { User2FaPassed } from '../events/User2FaPassed.js';
|
|
6
|
+
import { TwoFactorAuthProvider } from '@spinajs/rbac-http';
|
|
7
|
+
import { UserLoginFailed } from '@spinajs/rbac';
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* Verify 2fa token for user
|
|
11
|
+
*
|
|
12
|
+
* @param user
|
|
13
|
+
* @param token
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
16
|
+
export async function auth2Fa(identifier, token) {
|
|
17
|
+
token = _check_arg(_trim(), _non_empty)(token, 'token');
|
|
18
|
+
return _chain(_user_unsafe(identifier), _catch((u) => {
|
|
19
|
+
return _chain(_service('rbac.twoFactorAuth', TwoFactorAuthProvider), async (twoFa) => twoFa.verifyToken(token, u), _user_update({ LastLoginAt: DateTime.now() }), _user_ev(User2FaPassed));
|
|
20
|
+
}, (err, u) => {
|
|
21
|
+
return _chain(() => u,
|
|
22
|
+
// send event of failed login
|
|
23
|
+
_user_ev(UserLoginFailed, err),
|
|
24
|
+
// rethrow error for caller
|
|
25
|
+
() => {
|
|
26
|
+
throw err;
|
|
27
|
+
});
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=2fa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2fa.js","sourceRoot":"","sources":["../../../src/actions/2fa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAmB,KAAK,EAAQ,MAAM,EAAE,MAAM,eAAe,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAAkC,EAAE,KAAa;IAC3E,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO,MAAM,CACT,YAAY,CAAC,UAAU,CAAC,EACxB,MAAM,CACF,CAAC,CAAO,EAAE,EAAE;QACR,OAAO,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,KAAK,EAAE,KAA4B,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACtN,CAAC,EACD,CAAC,GAAG,EAAE,CAAO,EAAE,EAAE;QACb,OAAO,MAAM,CACT,GAAG,EAAE,CAAC,CAAC;QAEP,6BAA6B;QAC7B,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC;QAE9B,2BAA2B;QAC3B,GAAG,EAAE;YACD,MAAM,GAAG,CAAC;QACd,CAAC,CACJ,CAAC;IACN,CAAC,CACJ,CACJ,CAAC;AACN,CAAC"}
|
|
@@ -7,6 +7,19 @@ declare const rbacHttp: {
|
|
|
7
7
|
};
|
|
8
8
|
};
|
|
9
9
|
rbac: {
|
|
10
|
+
otpauth: {
|
|
11
|
+
/**
|
|
12
|
+
* change this to your app name, it will be used as issuer in otpauth token
|
|
13
|
+
*/
|
|
14
|
+
issuer: string;
|
|
15
|
+
/**
|
|
16
|
+
* recommended defaults for rest
|
|
17
|
+
*/
|
|
18
|
+
algorithm: string;
|
|
19
|
+
digits: number;
|
|
20
|
+
period: number;
|
|
21
|
+
window: number;
|
|
22
|
+
};
|
|
10
23
|
twoFactorAuth: {
|
|
11
24
|
enabled: boolean;
|
|
12
25
|
service: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbac-http.d.ts","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"rbac-http.d.ts","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,QAAQ;;;;;;;;;;YAUR;;eAEG;;YAGH;;eAEG;;;;;;;;;;;;;;;;;;;;;;YAwBH;;eAEG;;;QAGL;;WAEG;;;;CAQN,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -12,9 +12,22 @@ const rbacHttp = {
|
|
|
12
12
|
},
|
|
13
13
|
},
|
|
14
14
|
rbac: {
|
|
15
|
+
otpauth: {
|
|
16
|
+
/**
|
|
17
|
+
* change this to your app name, it will be used as issuer in otpauth token
|
|
18
|
+
*/
|
|
19
|
+
issuer: 'Spinajs',
|
|
20
|
+
/**
|
|
21
|
+
* recommended defaults for rest
|
|
22
|
+
*/
|
|
23
|
+
algorithm: 'SHA1',
|
|
24
|
+
digits: 6,
|
|
25
|
+
period: 30,
|
|
26
|
+
window: 1,
|
|
27
|
+
},
|
|
15
28
|
twoFactorAuth: {
|
|
16
29
|
enabled: true,
|
|
17
|
-
service: '
|
|
30
|
+
service: 'Default2FaToken',
|
|
18
31
|
},
|
|
19
32
|
fingerprint: {
|
|
20
33
|
enabled: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbac-http.js","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACxI,CAAC;AAGD,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,WAAW,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACjC,OAAO,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzB,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACtB;KACF;IACD,IAAI,EAAE;QACJ,aAAa,EAAE;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"rbac-http.js","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACxI,CAAC;AAGD,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,WAAW,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACjC,OAAO,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzB,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACtB;KACF;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP;;eAEG;YACH,MAAM,EAAE,SAAS;YAEjB;;eAEG;YACH,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,CAAC;SACV;QACD,aAAa,EAAE;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,iBAAiB;SAC3B;QACD,WAAW,EAAE;YACX,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,eAAe;SACzB;QACD,OAAO,EAAC;YACN,MAAM,EAAE;gBACN,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,QAAQ,EAAE;YACR,sCAAsC;YACtC,QAAQ,EAAE,EAAE;YAEZ;;eAEG;YACH,kBAAkB,EAAE,CAAC;SACtB;QACD;;WAEG;QACH,cAAc,EAAE,KAAK;KACtB;IACD,IAAI,EAAE;IACJ,iBAAiB;IACjB,+CAA+C;IAC/C,KAAK;KACN;CACF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -8,6 +8,7 @@ export declare class LoginController extends BaseController {
|
|
|
8
8
|
protected AuthProvider: AuthProvider;
|
|
9
9
|
protected SessionProvider: SessionProvider;
|
|
10
10
|
protected SessionExpirationTime: number;
|
|
11
|
+
protected TwoFactorAuthEnabled: boolean;
|
|
11
12
|
protected SessionCookieConfig: any;
|
|
12
13
|
protected AC: AccessControl;
|
|
13
14
|
login(credentials: UserLoginDto): Promise<Ok | Unauthorized>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginController.d.ts","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAwB,EAAE,EAAe,YAAY,EAAU,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAqB,aAAa,EAAiB,MAAM,eAAe,CAAC;AAE/G,OAAO,EAA6B,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGlF,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,qBACa,eAAgB,SAAQ,cAAc;IAEjD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAGvC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAGrC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAK3C,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"LoginController.d.ts","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAwB,EAAE,EAAe,YAAY,EAAU,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAqB,aAAa,EAAiB,MAAM,eAAe,CAAC;AAE/G,OAAO,EAA6B,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGlF,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,qBACa,eAAgB,SAAQ,cAAc;IAEjD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAGvC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAGrC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAK3C,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAKxC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAKxC,SAAS,CAAC,mBAAmB,EAAE,GAAG,CAAC;IAGnC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAIf,KAAK,CAAS,WAAW,EAAE,YAAY;IA0EvC,MAAM,CAAW,IAAI,EAAE,MAAM;IA4B7B,MAAM,CAAiB,IAAI,EAAE,IAAI;CA0F/C"}
|