@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
@@ -1,57 +1,82 @@
1
- // import { TokenDto } from './../dto/token-dto.js';
2
- // import { BaseController, BasePath, Cookie, Ok, Post, Unauthorized } from '@spinajs/http';
3
- // import { ISession, SessionProvider, User as UserModel, _user_ev, _user_update} from '@spinajs/rbac';
4
- // import { Session } from "@spinajs/rbac-http";
5
- // import { Body, Policy } from '@spinajs/http';
6
- // import _ from 'lodash';
7
- // import { User } from '../decorators.js';
8
- // import { TwoFacRouteEnabled } from '../policies/2FaPolicy.js';
9
- // import { AutoinjectService, _service } from '@spinajs/configuration';
10
- // import { TwoFactorAuthProvider } from '../interfaces.js';
11
- // import { DateTime } from 'luxon';
12
- // import { UserLoginSuccess } from '../events/UserLoginSuccess.js';
13
- // import { Autoinject } from '@spinajs/di';
14
- // import { QueueService } from '@spinajs/queue';
15
- // import { _chain, _check_arg, _non_empty, _non_null, _tap, _trim, _use } from '@spinajs/util';
16
- // import { User2FaPassed } from '../events/User2FaPassed.js';
17
- // export async function auth2Fa(user: User, token: string) {
18
- // user = _check_arg(_non_null())(user, 'user');
19
- // token = _check_arg(_trim(), _non_empty)(token, 'token');
20
- // return _chain(
21
- // _use(_service<TwoFactorAuthProvider>('rbac.twoFactorAuth'), 'twoFa'),
22
- // _tap(async ({ twoFa }: { twoFa: TwoFactorAuthProvider }) => {
23
- // await twoFa.verifyToken(token, user);
24
- // }),
25
- // _user_update({
26
- // LastLoginAt: DateTime.now()
27
- // }),
28
- // _user_ev(User2FaPassed)
29
- // );
30
- // }
31
- // @BasePath('user/auth')
32
- // @Policy(TwoFacRouteEnabled)
33
- // export class TwoFactorAuthController extends BaseController {
34
- // @Autoinject(QueueService)
35
- // protected Queue: QueueService;
36
- // @AutoinjectService('rbac.session')
37
- // protected SessionProvider: SessionProvider;
38
- // @AutoinjectService('rbac.twoFactorAuth')
39
- // protected TwoFactorAuthProvider: TwoFactorAuthProvider;
40
- // @Post('2fa/verify')
41
- // public async verifyToken(@User() logged: UserModel, @Body() token: TokenDto, @Session() session : ISession) {
42
- // const result = await this.TwoFactorAuthProvider.verifyToken(token.Token, logged);
43
- // if (result) {
44
- // return new Unauthorized(`invalid token`);
45
- // }
46
- // logged.LastLoginAt = DateTime.now();
47
- // await logged.update();
48
- // await this.Queue.emit(new UserLoginSuccess(logged.Uuid));
49
- // await this.SessionProvider.save(ssid, {
50
- // Authorized: true,
51
- // TwoFactorAuth_check: true,
52
- // });
53
- // // return user data
54
- // return new Ok(logged.dehydrate());
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,oDAAoD;AACpD,4FAA4F;AAC5F,uGAAuG;AACvG,gDAAgD;AAChD,gDAAgD;AAChD,0BAA0B;AAC1B,2CAA2C;AAC3C,iEAAiE;AACjE,wEAAwE;AACxE,4DAA4D;AAC5D,oCAAoC;AACpC,oEAAoE;AACpE,4CAA4C;AAC5C,iDAAiD;AACjD,gGAAgG;AAChG,8DAA8D;AAE9D,6DAA6D;AAC7D,kDAAkD;AAClD,6DAA6D;AAE7D,mBAAmB;AACnB,4EAA4E;AAC5E,oEAAoE;AACpE,8CAA8C;AAC9C,UAAU;AACV,qBAAqB;AACrB,oCAAoC;AACpC,UAAU;AACV,8BAA8B;AAC9B,OAAO;AACP,IAAI;AAEJ,yBAAyB;AACzB,8BAA8B;AAC9B,gEAAgE;AAChE,8BAA8B;AAC9B,mCAAmC;AAEnC,uCAAuC;AACvC,gDAAgD;AAEhD,6CAA6C;AAC7C,4DAA4D;AAE5D,wBAAwB;AACxB,kHAAkH;AAClH,wFAAwF;AAExF,oBAAoB;AACpB,kDAAkD;AAClD,QAAQ;AAER,2CAA2C;AAC3C,6BAA6B;AAE7B,gEAAgE;AAEhE,8CAA8C;AAC9C,0BAA0B;AAC1B,mCAAmC;AACnC,UAAU;AAEV,0BAA0B;AAC1B,yCAAyC;AACzC,MAAM;AACN,IAAI"}
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;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,kBAAmB,SAAQ,UAAU;IAEhD,SAAS,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAExC,SAAS,IAAI,OAAO;IAGpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhC"}
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,wCAA2C;AAG3C,MAAa,kBAAmB,SAAQ,iBAAU;IAIzC,SAAS;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACM,OAAO;QACZ,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3C,MAAM,IAAI,6BAAgB,CAAC,8BAA8B,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAdD,gDAcC;AAZW;IADT,IAAA,sBAAM,EAAC,oBAAoB,CAAC;;2DACkB"}
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;;;;;;;;;;;;;;;;;;;;;;;;;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"}
@@ -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: 'SpeakEasy2FaToken',
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,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,eAAe,QAAQ,CAAC"}
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;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"}