@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.
Files changed (59) hide show
  1. package/lib/cjs/2fa/Default2FaToken.d.ts +20 -0
  2. package/lib/cjs/2fa/Default2FaToken.d.ts.map +1 -0
  3. package/lib/cjs/2fa/Default2FaToken.js +122 -0
  4. package/lib/cjs/2fa/Default2FaToken.js.map +1 -0
  5. package/lib/cjs/actions/2fa.d.ts +11 -0
  6. package/lib/cjs/actions/2fa.d.ts.map +1 -0
  7. package/lib/cjs/actions/2fa.js +34 -0
  8. package/lib/cjs/actions/2fa.js.map +1 -0
  9. package/lib/cjs/config/rbac-http.d.ts +13 -0
  10. package/lib/cjs/config/rbac-http.d.ts.map +1 -1
  11. package/lib/cjs/config/rbac-http.js +14 -1
  12. package/lib/cjs/config/rbac-http.js.map +1 -1
  13. package/lib/cjs/controllers/LoginController.d.ts +1 -0
  14. package/lib/cjs/controllers/LoginController.d.ts.map +1 -1
  15. package/lib/cjs/controllers/LoginController.js +39 -108
  16. package/lib/cjs/controllers/LoginController.js.map +1 -1
  17. package/lib/cjs/controllers/TwoFactorAuthController.d.ts +9 -0
  18. package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
  19. package/lib/cjs/controllers/TwoFactorAuthController.js +81 -56
  20. package/lib/cjs/controllers/TwoFactorAuthController.js.map +1 -1
  21. package/lib/cjs/policies/2FaPolicy.d.ts +2 -2
  22. package/lib/cjs/policies/2FaPolicy.d.ts.map +1 -1
  23. package/lib/cjs/policies/2FaPolicy.js +8 -1
  24. package/lib/cjs/policies/2FaPolicy.js.map +1 -1
  25. package/lib/mjs/2fa/Default2FaToken.d.ts +20 -0
  26. package/lib/mjs/2fa/Default2FaToken.d.ts.map +1 -0
  27. package/lib/mjs/2fa/Default2FaToken.js +96 -0
  28. package/lib/mjs/2fa/Default2FaToken.js.map +1 -0
  29. package/lib/mjs/actions/2fa.d.ts +11 -0
  30. package/lib/mjs/actions/2fa.d.ts.map +1 -0
  31. package/lib/mjs/actions/2fa.js +30 -0
  32. package/lib/mjs/actions/2fa.js.map +1 -0
  33. package/lib/mjs/config/rbac-http.d.ts +13 -0
  34. package/lib/mjs/config/rbac-http.d.ts.map +1 -1
  35. package/lib/mjs/config/rbac-http.js +14 -1
  36. package/lib/mjs/config/rbac-http.js.map +1 -1
  37. package/lib/mjs/controllers/LoginController.d.ts +1 -0
  38. package/lib/mjs/controllers/LoginController.d.ts.map +1 -1
  39. package/lib/mjs/controllers/LoginController.js +39 -108
  40. package/lib/mjs/controllers/LoginController.js.map +1 -1
  41. package/lib/mjs/controllers/TwoFactorAuthController.d.ts +9 -1
  42. package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
  43. package/lib/mjs/controllers/TwoFactorAuthController.js +78 -57
  44. package/lib/mjs/controllers/TwoFactorAuthController.js.map +1 -1
  45. package/lib/mjs/policies/2FaPolicy.d.ts +2 -2
  46. package/lib/mjs/policies/2FaPolicy.d.ts.map +1 -1
  47. package/lib/mjs/policies/2FaPolicy.js +8 -1
  48. package/lib/mjs/policies/2FaPolicy.js.map +1 -1
  49. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  50. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  51. package/package.json +12 -11
  52. package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts +0 -1
  53. package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
  54. package/lib/cjs/2fa/SpeakEasy2FaToken.js +0 -48
  55. package/lib/cjs/2fa/SpeakEasy2FaToken.js.map +0 -1
  56. package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts +0 -2
  57. package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
  58. package/lib/mjs/2fa/SpeakEasy2FaToken.js +0 -49
  59. package/lib/mjs/2fa/SpeakEasy2FaToken.js.map +0 -1
@@ -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,122 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __metadata = (this && this.__metadata) || function (k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.Default2FaToken = exports.TWO_FA_METATADATA_KEYS = void 0;
36
+ const di_1 = require("@spinajs/di");
37
+ const configuration_1 = require("@spinajs/configuration");
38
+ const log_1 = require("@spinajs/log");
39
+ const rbac_http_1 = require("@spinajs/rbac-http");
40
+ const OTPAuth = __importStar(require("otpauth"));
41
+ var TWO_FA_METATADATA_KEYS;
42
+ (function (TWO_FA_METATADATA_KEYS) {
43
+ TWO_FA_METATADATA_KEYS["TOKEN"] = "2fa:token";
44
+ TWO_FA_METATADATA_KEYS["ENABLED"] = "2fa:enabled";
45
+ })(TWO_FA_METATADATA_KEYS || (exports.TWO_FA_METATADATA_KEYS = TWO_FA_METATADATA_KEYS = {}));
46
+ let Default2FaToken = class Default2FaToken extends rbac_http_1.TwoFactorAuthProvider {
47
+ constructor() {
48
+ super();
49
+ }
50
+ _getOTP(user, secret) {
51
+ return new OTPAuth.TOTP({
52
+ issuer: this.Config.issuer,
53
+ label: user.Email,
54
+ algorithm: this.Config.algorithm,
55
+ digits: this.Config.digits,
56
+ period: this.Config.period,
57
+ secret: OTPAuth.Secret.fromBase32(secret),
58
+ });
59
+ }
60
+ execute(_) {
61
+ // empty, speakasy works offline eg. google authenticator
62
+ // we dont send any email or sms
63
+ return Promise.resolve();
64
+ }
65
+ async verifyToken(token, user) {
66
+ const twoFaToken = user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN];
67
+ if (!twoFaToken) {
68
+ this.Log.trace(`Cannot verify 2fa token, no 2fa token for user ${user.Id}`);
69
+ return false;
70
+ }
71
+ const totp = this._getOTP(user, twoFaToken);
72
+ const verified = totp.validate({
73
+ token: token,
74
+ window: this.Config.window,
75
+ });
76
+ return verified == null;
77
+ }
78
+ async initialize(user) {
79
+ const secret = new OTPAuth.Secret({ size: this.Config.secretSize });
80
+ const totp = this._getOTP(user, secret.base32);
81
+ user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN] = secret.base32;
82
+ await user.Metadata.sync();
83
+ this.Log.trace(`2fa token initialized for user ${user.Id}`, {
84
+ userId: user.Id,
85
+ });
86
+ /**
87
+ * returns: `otpauth://totp/ACME:Alice?issuer=ACME&secret=US3WHSG7X5KAPV27VANWKQHF3SH3HULL&algorithm=SHA1&digits=6&period=30`
88
+ */
89
+ return totp.toString();
90
+ }
91
+ async getOtpAuthUrl(user) {
92
+ const token = user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN];
93
+ if (!token) {
94
+ this.Log.trace(`Cannot get 2fa auth url, no 2fa token for user ${user.Id}`);
95
+ return null;
96
+ }
97
+ const totp = this._getOTP(user, token);
98
+ return totp.toString();
99
+ }
100
+ async isEnabled(user) {
101
+ const val = await user.Metadata[TWO_FA_METATADATA_KEYS.ENABLED];
102
+ return val;
103
+ }
104
+ async isInitialized(user) {
105
+ const token = user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN];
106
+ return token !== null && token !== undefined && token !== '';
107
+ }
108
+ };
109
+ exports.Default2FaToken = Default2FaToken;
110
+ __decorate([
111
+ (0, configuration_1.Config)('rbac.otpauth'),
112
+ __metadata("design:type", Object)
113
+ ], Default2FaToken.prototype, "Config", void 0);
114
+ __decorate([
115
+ (0, log_1.Logger)('2fa-token'),
116
+ __metadata("design:type", log_1.Log)
117
+ ], Default2FaToken.prototype, "Log", void 0);
118
+ exports.Default2FaToken = Default2FaToken = __decorate([
119
+ (0, di_1.Injectable)(rbac_http_1.TwoFactorAuthProvider),
120
+ __metadata("design:paramtypes", [])
121
+ ], Default2FaToken);
122
+ //# 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,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.auth2Fa = void 0;
4
+ const rbac_1 = require("@spinajs/rbac");
5
+ const configuration_1 = require("@spinajs/configuration");
6
+ const luxon_1 = require("luxon");
7
+ const util_1 = require("@spinajs/util");
8
+ const User2FaPassed_js_1 = require("../events/User2FaPassed.js");
9
+ const rbac_http_1 = require("@spinajs/rbac-http");
10
+ const rbac_2 = require("@spinajs/rbac");
11
+ /**
12
+ *
13
+ * Verify 2fa token for user
14
+ *
15
+ * @param user
16
+ * @param token
17
+ * @returns
18
+ */
19
+ async function auth2Fa(identifier, token) {
20
+ token = (0, util_1._check_arg)((0, util_1._trim)(), util_1._non_empty)(token, 'token');
21
+ return (0, util_1._chain)((0, rbac_1._user_unsafe)(identifier), (0, util_1._catch)((u) => {
22
+ return (0, util_1._chain)((0, configuration_1._service)('rbac.twoFactorAuth', rbac_http_1.TwoFactorAuthProvider), async (twoFa) => twoFa.verifyToken(token, u), (0, rbac_1._user_update)({ LastLoginAt: luxon_1.DateTime.now() }), (0, rbac_1._user_ev)(User2FaPassed_js_1.User2FaPassed));
23
+ }, (err, u) => {
24
+ return (0, util_1._chain)(() => u,
25
+ // send event of failed login
26
+ (0, rbac_1._user_ev)(rbac_2.UserLoginFailed, err),
27
+ // rethrow error for caller
28
+ () => {
29
+ throw err;
30
+ });
31
+ }));
32
+ }
33
+ exports.auth2Fa = auth2Fa;
34
+ //# sourceMappingURL=2fa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"2fa.js","sourceRoot":"","sources":["../../../src/actions/2fa.ts"],"names":[],"mappings":";;;AAAA,wCAA2E;AAE3E,0DAAkD;AAClD,iCAAiC;AACjC,wCAAqG;AACrG,iEAA2D;AAC3D,kDAA2D;AAC3D,wCAAgD;AAGhD;;;;;;;GAOG;AACI,KAAK,UAAU,OAAO,CAAC,UAAkC,EAAE,KAAa;IAC3E,KAAK,GAAG,IAAA,iBAAU,EAAC,IAAA,YAAK,GAAE,EAAE,iBAAU,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO,IAAA,aAAM,EACT,IAAA,mBAAY,EAAC,UAAU,CAAC,EACxB,IAAA,aAAM,EACF,CAAC,CAAO,EAAE,EAAE;QACR,OAAO,IAAA,aAAM,EAAC,IAAA,wBAAQ,EAAC,oBAAoB,EAAE,iCAAqB,CAAC,EAAE,KAAK,EAAE,KAA4B,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAA,mBAAY,EAAC,EAAE,WAAW,EAAE,gBAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAA,eAAQ,EAAC,gCAAa,CAAC,CAAC,CAAC;IACtN,CAAC,EACD,CAAC,GAAG,EAAE,CAAO,EAAE,EAAE;QACb,OAAO,IAAA,aAAM,EACT,GAAG,EAAE,CAAC,CAAC;QAEP,6BAA6B;QAC7B,IAAA,eAAQ,EAAC,sBAAe,EAAE,GAAG,CAAC;QAE9B,2BAA2B;QAC3B,GAAG,EAAE;YACD,MAAM,GAAG,CAAC;QACd,CAAC,CACJ,CAAC;IACN,CAAC,CACJ,CACJ,CAAC;AACN,CAAC;AAxBD,0BAwBC"}
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;YA2BR;;eAEG;;;QAGL;;WAEG;;;;CAQN,CAAC;AAEF,eAAe,QAAQ,CAAC"}
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"}
@@ -14,9 +14,22 @@ const rbacHttp = {
14
14
  },
15
15
  },
16
16
  rbac: {
17
+ otpauth: {
18
+ /**
19
+ * change this to your app name, it will be used as issuer in otpauth token
20
+ */
21
+ issuer: 'Spinajs',
22
+ /**
23
+ * recommended defaults for rest
24
+ */
25
+ algorithm: 'SHA1',
26
+ digits: 6,
27
+ period: 30,
28
+ window: 1,
29
+ },
17
30
  twoFactorAuth: {
18
31
  enabled: true,
19
- service: 'SpeakEasy2FaToken',
32
+ service: 'Default2FaToken',
20
33
  },
21
34
  fingerprint: {
22
35
  enabled: false,
@@ -1 +1 @@
1
- {"version":3,"file":"rbac-http.js","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,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,mBAAmB;SAC7B;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,kBAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"rbac-http.js","sourceRoot":"","sources":["../../../src/config/rbac-http.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,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,kBAAe,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;IAGxC,SAAS,CAAC,mBAAmB,EAAE,GAAG,CAAC;IAGnC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAIf,KAAK,CAAS,WAAW,EAAE,YAAY;IAoKvC,MAAM,CAAW,IAAI,EAAE,MAAM;IA4B7B,MAAM,CAAiB,IAAI,EAAE,IAAI;CA0F/C"}
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"}
@@ -25,38 +25,51 @@ let LoginController = class LoginController extends http_1.BaseController {
25
25
  try {
26
26
  const user = await (0, rbac_1.auth)(credentials.Email, credentials.Password);
27
27
  const session = new rbac_1.UserSession();
28
+ const coockies = [
29
+ {
30
+ Name: 'ssid',
31
+ Value: session.SessionId,
32
+ Options: {
33
+ signed: true,
34
+ httpOnly: true,
35
+ // set expiration time in ms
36
+ maxAge: this.SessionExpirationTime * 1000,
37
+ // any optopnal cookie options
38
+ // or override default ones
39
+ ...this.SessionCookieConfig
40
+ },
41
+ },
42
+ ];
28
43
  session.Data.set('User', user.Uuid);
29
- // TEMP
30
- session.Data.set('Authorized', true);
31
44
  // set expiration time ( default val in config )
32
45
  session.extend();
33
46
  await this.SessionProvider.save(session);
34
- this._log.trace('User logged in', {
47
+ if (this.TwoFactorAuthEnabled) {
48
+ this._log.trace('User logged in, 2fa required', {
49
+ Uuid: user.Uuid
50
+ });
51
+ session.Data.set('Authorized', false);
52
+ session.Data.set('TwoFactorAuth', true);
53
+ return new http_1.Ok({
54
+ TwoFactorAuthRequired: true,
55
+ Authorized: false
56
+ }, {
57
+ Coockies: coockies,
58
+ });
59
+ }
60
+ this._log.trace('User logged in, no 2fa required', {
35
61
  Uuid: user.Uuid
36
62
  });
37
63
  const grants = this.AC.getGrants();
38
64
  const userGrants = user.Role.map(r => (0, rbac_1._unwindGrants)(r, grants));
39
65
  const combinedGrants = Object.assign({}, ...userGrants);
40
66
  return new http_1.Ok({
41
- ...user.dehydrate(),
67
+ ...user.dehydrateWithRelations({
68
+ dateTimeFormat: "iso"
69
+ }),
42
70
  Grants: combinedGrants,
43
- Metadata: user.Metadata.map(m => m.dehydrate())
44
71
  }, {
45
- Coockies: [
46
- {
47
- Name: 'ssid',
48
- Value: session.SessionId,
49
- Options: {
50
- signed: true,
51
- httpOnly: true,
52
- // set expiration time in ms
53
- maxAge: this.SessionExpirationTime * 1000,
54
- // any optopnal cookie options
55
- // or override default ones
56
- ...this.SessionCookieConfig
57
- },
58
- },
59
- ],
72
+ Coockies: coockies
60
73
  });
61
74
  }
62
75
  catch (err) {
@@ -69,94 +82,6 @@ let LoginController = class LoginController extends http_1.BaseController {
69
82
  });
70
83
  }
71
84
  }
72
- // @Post('new-password')
73
- // @Policy(NotLoggedPolicy)
74
- // public async setNewPassword(@Query() token: string, @Body() pwd: RestorePasswordDto) {
75
- // const user = await User.query()
76
- // .innerJoin(UserMetadata, function () {
77
- // this.where({
78
- // Key: 'password:reset:token',
79
- // Value: token,
80
- // });
81
- // })
82
- // .populate('Metadata')
83
- // .first();
84
- // if (!user) {
85
- // return new NotFound({
86
- // error: {
87
- // code: 'ERR_USER_NOT_FOUND',
88
- // message: 'No user found for this reset token',
89
- // },
90
- // });
91
- // }
92
- // const val = (await user.Metadata['password:reset:start']) as DateTime;
93
- // const now = DateTime.now().plus({ seconds: -this.PasswordResetTokenTTL });
94
- // if (val < now) {
95
- // return new BadRequest({
96
- // error: {
97
- // code: 'ERR_RESET_TOKEN_EXPIRED',
98
- // message: 'Password reset token expired',
99
- // },
100
- // });
101
- // }
102
- // if (!this.PasswordValidationService.check(pwd.Password)) {
103
- // return new BadRequest({
104
- // error: {
105
- // code: 'ERR_PASSWORD_RULE',
106
- // message: 'Invalid password, does not match password rules',
107
- // },
108
- // });
109
- // }
110
- // if (pwd.Password !== pwd.ConfirmPassword) {
111
- // return new BadRequest({
112
- // error: {
113
- // code: 'ERR_PASSWORD_NOT_MATCH',
114
- // message: 'Password and repeat password does not match',
115
- // },
116
- // });
117
- // }
118
- // const hashedPassword = await this.PasswordProvider.hash(pwd.Password);
119
- // user.Password = hashedPassword;
120
- // await user.update();
121
- // /**
122
- // * Delete all reset related meta for user
123
- // */
124
- // await user.Metadata.delete(/password:reset.*/);
125
- // // add to action list
126
- // await user.Actions.add(
127
- // new UserAction({
128
- // Persistent: true,
129
- // Action: 'password:reset',
130
- // }),
131
- // );
132
- // // inform others
133
- // await this.Queue.emit(new UserPasswordChanged(user.Uuid));
134
- // }
135
- // @Post('forgot-password')
136
- // @Policy(NotLoggedPolicy)
137
- // public async forgotPassword(@Body() login: UserLoginDto) {
138
- // const user = await this.AuthProvider.getByEmail(login.Email);
139
- // if (!user.IsActive || user.IsBanned || user.DeletedAt !== null) {
140
- // return new InvalidOperation('User is inactive, banned or deleted. Contact system administrator');
141
- // }
142
- // const token = uuidv4();
143
- // // assign meta to user
144
- // await (user.Metadata['password:reset'] = true);
145
- // await (user.Metadata['password:reset:token'] = token);
146
- // await (user.Metadata['password:reset:start'] = DateTime.now());
147
- // await user.Actions.add(
148
- // new UserAction({
149
- // Action: 'user:password:reset',
150
- // Data: DateTime.now().toISO(),
151
- // Persistent: true,
152
- // }),
153
- // );
154
- // await this.Queue.emit(new UserPasswordRestore(user.Uuid, token));
155
- // return new Ok({
156
- // reset_token: token,
157
- // ttl: this.PasswordResetTokenTTL,
158
- // });
159
- // }
160
85
  async logout(ssid) {
161
86
  if (!ssid) {
162
87
  return new http_1.Ok();
@@ -203,6 +128,12 @@ __decorate([
203
128
  }),
204
129
  __metadata("design:type", Number)
205
130
  ], LoginController.prototype, "SessionExpirationTime", void 0);
131
+ __decorate([
132
+ (0, configuration_1.Config)('rbac.twoFactorAuth.enabled', {
133
+ defaultValue: false,
134
+ }),
135
+ __metadata("design:type", Boolean)
136
+ ], LoginController.prototype, "TwoFactorAuthEnabled", void 0);
206
137
  __decorate([
207
138
  (0, configuration_1.Config)('rbac.session.cookie', {}),
208
139
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"LoginController.js","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LoginController.js","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"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"}
@@ -1 +1,10 @@
1
+ import { TokenDto } from './../dto/token-dto.js';
2
+ import { BaseController, Ok, Unauthorized } from '@spinajs/http';
3
+ import { ISession, SessionProvider, User as UserModel } from '@spinajs/rbac';
4
+ import { QueueService } from '@spinajs/queue';
5
+ export declare class TwoFactorAuthController extends BaseController {
6
+ protected Queue: QueueService;
7
+ protected SessionProvider: SessionProvider;
8
+ verifyToken(logged: UserModel, token: TokenDto, session: ISession): Promise<Ok | Unauthorized>;
9
+ }
1
10
  //# sourceMappingURL=TwoFactorAuthController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TwoFactorAuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"TwoFactorAuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAY,EAAE,EAAQ,YAAY,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAyC,MAAM,eAAe,CAAC;AAOpH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C,qBAEa,uBAAwB,SAAQ,cAAc;IAEvD,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IAG9B,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG9B,WAAW,CAAS,MAAM,EAAE,SAAS,EAAU,KAAK,EAAE,QAAQ,EAAa,OAAO,EAAE,QAAQ;CAuC5G"}