@spinajs/rbac-http-user 2.0.373 → 2.0.375

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 (75) 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 +12 -0
  6. package/lib/cjs/actions/2fa.d.ts.map +1 -0
  7. package/lib/cjs/actions/2fa.js +40 -0
  8. package/lib/cjs/actions/2fa.js.map +1 -0
  9. package/lib/cjs/cli/EnableUser2Fa.d.ts +9 -0
  10. package/lib/cjs/cli/EnableUser2Fa.d.ts.map +1 -0
  11. package/lib/cjs/cli/EnableUser2Fa.js +37 -0
  12. package/lib/cjs/cli/EnableUser2Fa.js.map +1 -0
  13. package/lib/cjs/config/rbac-http.d.ts +13 -0
  14. package/lib/cjs/config/rbac-http.d.ts.map +1 -1
  15. package/lib/cjs/config/rbac-http.js +14 -1
  16. package/lib/cjs/config/rbac-http.js.map +1 -1
  17. package/lib/cjs/controllers/LoginController.d.ts +1 -0
  18. package/lib/cjs/controllers/LoginController.d.ts.map +1 -1
  19. package/lib/cjs/controllers/LoginController.js +39 -108
  20. package/lib/cjs/controllers/LoginController.js.map +1 -1
  21. package/lib/cjs/controllers/TwoFactorAuthController.d.ts +9 -0
  22. package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
  23. package/lib/cjs/controllers/TwoFactorAuthController.js +81 -56
  24. package/lib/cjs/controllers/TwoFactorAuthController.js.map +1 -1
  25. package/lib/cjs/events/User2FaEnabled.d.ts +4 -0
  26. package/lib/cjs/events/User2FaEnabled.d.ts.map +1 -0
  27. package/lib/cjs/events/User2FaEnabled.js +18 -0
  28. package/lib/cjs/events/User2FaEnabled.js.map +1 -0
  29. package/lib/cjs/policies/2FaPolicy.d.ts +2 -2
  30. package/lib/cjs/policies/2FaPolicy.d.ts.map +1 -1
  31. package/lib/cjs/policies/2FaPolicy.js +8 -1
  32. package/lib/cjs/policies/2FaPolicy.js.map +1 -1
  33. package/lib/mjs/2fa/Default2FaToken.d.ts +20 -0
  34. package/lib/mjs/2fa/Default2FaToken.d.ts.map +1 -0
  35. package/lib/mjs/2fa/Default2FaToken.js +96 -0
  36. package/lib/mjs/2fa/Default2FaToken.js.map +1 -0
  37. package/lib/mjs/actions/2fa.d.ts +12 -0
  38. package/lib/mjs/actions/2fa.d.ts.map +1 -0
  39. package/lib/mjs/actions/2fa.js +35 -0
  40. package/lib/mjs/actions/2fa.js.map +1 -0
  41. package/lib/mjs/cli/EnableUser2Fa.d.ts +9 -0
  42. package/lib/mjs/cli/EnableUser2Fa.d.ts.map +1 -0
  43. package/lib/mjs/cli/EnableUser2Fa.js +34 -0
  44. package/lib/mjs/cli/EnableUser2Fa.js.map +1 -0
  45. package/lib/mjs/config/rbac-http.d.ts +13 -0
  46. package/lib/mjs/config/rbac-http.d.ts.map +1 -1
  47. package/lib/mjs/config/rbac-http.js +14 -1
  48. package/lib/mjs/config/rbac-http.js.map +1 -1
  49. package/lib/mjs/controllers/LoginController.d.ts +1 -0
  50. package/lib/mjs/controllers/LoginController.d.ts.map +1 -1
  51. package/lib/mjs/controllers/LoginController.js +39 -108
  52. package/lib/mjs/controllers/LoginController.js.map +1 -1
  53. package/lib/mjs/controllers/TwoFactorAuthController.d.ts +9 -1
  54. package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
  55. package/lib/mjs/controllers/TwoFactorAuthController.js +78 -57
  56. package/lib/mjs/controllers/TwoFactorAuthController.js.map +1 -1
  57. package/lib/mjs/events/User2FaEnabled.d.ts +4 -0
  58. package/lib/mjs/events/User2FaEnabled.d.ts.map +1 -0
  59. package/lib/mjs/events/User2FaEnabled.js +15 -0
  60. package/lib/mjs/events/User2FaEnabled.js.map +1 -0
  61. package/lib/mjs/policies/2FaPolicy.d.ts +2 -2
  62. package/lib/mjs/policies/2FaPolicy.d.ts.map +1 -1
  63. package/lib/mjs/policies/2FaPolicy.js +8 -1
  64. package/lib/mjs/policies/2FaPolicy.js.map +1 -1
  65. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  66. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  67. package/package.json +12 -11
  68. package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts +0 -1
  69. package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
  70. package/lib/cjs/2fa/SpeakEasy2FaToken.js +0 -48
  71. package/lib/cjs/2fa/SpeakEasy2FaToken.js.map +0 -1
  72. package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts +0 -2
  73. package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
  74. package/lib/mjs/2fa/SpeakEasy2FaToken.js +0 -49
  75. package/lib/mjs/2fa/SpeakEasy2FaToken.js.map +0 -1
@@ -22,38 +22,51 @@ let LoginController = class LoginController extends BaseController {
22
22
  try {
23
23
  const user = await auth(credentials.Email, credentials.Password);
24
24
  const session = new UserSession();
25
+ const coockies = [
26
+ {
27
+ Name: 'ssid',
28
+ Value: session.SessionId,
29
+ Options: {
30
+ signed: true,
31
+ httpOnly: true,
32
+ // set expiration time in ms
33
+ maxAge: this.SessionExpirationTime * 1000,
34
+ // any optopnal cookie options
35
+ // or override default ones
36
+ ...this.SessionCookieConfig
37
+ },
38
+ },
39
+ ];
25
40
  session.Data.set('User', user.Uuid);
26
- // TEMP
27
- session.Data.set('Authorized', true);
28
41
  // set expiration time ( default val in config )
29
42
  session.extend();
30
43
  await this.SessionProvider.save(session);
31
- this._log.trace('User logged in', {
44
+ if (this.TwoFactorAuthEnabled) {
45
+ this._log.trace('User logged in, 2fa required', {
46
+ Uuid: user.Uuid
47
+ });
48
+ session.Data.set('Authorized', false);
49
+ session.Data.set('TwoFactorAuth', true);
50
+ return new Ok({
51
+ TwoFactorAuthRequired: true,
52
+ Authorized: false
53
+ }, {
54
+ Coockies: coockies,
55
+ });
56
+ }
57
+ this._log.trace('User logged in, no 2fa required', {
32
58
  Uuid: user.Uuid
33
59
  });
34
60
  const grants = this.AC.getGrants();
35
61
  const userGrants = user.Role.map(r => _unwindGrants(r, grants));
36
62
  const combinedGrants = Object.assign({}, ...userGrants);
37
63
  return new Ok({
38
- ...user.dehydrate(),
64
+ ...user.dehydrateWithRelations({
65
+ dateTimeFormat: "iso"
66
+ }),
39
67
  Grants: combinedGrants,
40
- Metadata: user.Metadata.map(m => m.dehydrate())
41
68
  }, {
42
- Coockies: [
43
- {
44
- Name: 'ssid',
45
- Value: session.SessionId,
46
- Options: {
47
- signed: true,
48
- httpOnly: true,
49
- // set expiration time in ms
50
- maxAge: this.SessionExpirationTime * 1000,
51
- // any optopnal cookie options
52
- // or override default ones
53
- ...this.SessionCookieConfig
54
- },
55
- },
56
- ],
69
+ Coockies: coockies
57
70
  });
58
71
  }
59
72
  catch (err) {
@@ -66,94 +79,6 @@ let LoginController = class LoginController extends BaseController {
66
79
  });
67
80
  }
68
81
  }
69
- // @Post('new-password')
70
- // @Policy(NotLoggedPolicy)
71
- // public async setNewPassword(@Query() token: string, @Body() pwd: RestorePasswordDto) {
72
- // const user = await User.query()
73
- // .innerJoin(UserMetadata, function () {
74
- // this.where({
75
- // Key: 'password:reset:token',
76
- // Value: token,
77
- // });
78
- // })
79
- // .populate('Metadata')
80
- // .first();
81
- // if (!user) {
82
- // return new NotFound({
83
- // error: {
84
- // code: 'ERR_USER_NOT_FOUND',
85
- // message: 'No user found for this reset token',
86
- // },
87
- // });
88
- // }
89
- // const val = (await user.Metadata['password:reset:start']) as DateTime;
90
- // const now = DateTime.now().plus({ seconds: -this.PasswordResetTokenTTL });
91
- // if (val < now) {
92
- // return new BadRequest({
93
- // error: {
94
- // code: 'ERR_RESET_TOKEN_EXPIRED',
95
- // message: 'Password reset token expired',
96
- // },
97
- // });
98
- // }
99
- // if (!this.PasswordValidationService.check(pwd.Password)) {
100
- // return new BadRequest({
101
- // error: {
102
- // code: 'ERR_PASSWORD_RULE',
103
- // message: 'Invalid password, does not match password rules',
104
- // },
105
- // });
106
- // }
107
- // if (pwd.Password !== pwd.ConfirmPassword) {
108
- // return new BadRequest({
109
- // error: {
110
- // code: 'ERR_PASSWORD_NOT_MATCH',
111
- // message: 'Password and repeat password does not match',
112
- // },
113
- // });
114
- // }
115
- // const hashedPassword = await this.PasswordProvider.hash(pwd.Password);
116
- // user.Password = hashedPassword;
117
- // await user.update();
118
- // /**
119
- // * Delete all reset related meta for user
120
- // */
121
- // await user.Metadata.delete(/password:reset.*/);
122
- // // add to action list
123
- // await user.Actions.add(
124
- // new UserAction({
125
- // Persistent: true,
126
- // Action: 'password:reset',
127
- // }),
128
- // );
129
- // // inform others
130
- // await this.Queue.emit(new UserPasswordChanged(user.Uuid));
131
- // }
132
- // @Post('forgot-password')
133
- // @Policy(NotLoggedPolicy)
134
- // public async forgotPassword(@Body() login: UserLoginDto) {
135
- // const user = await this.AuthProvider.getByEmail(login.Email);
136
- // if (!user.IsActive || user.IsBanned || user.DeletedAt !== null) {
137
- // return new InvalidOperation('User is inactive, banned or deleted. Contact system administrator');
138
- // }
139
- // const token = uuidv4();
140
- // // assign meta to user
141
- // await (user.Metadata['password:reset'] = true);
142
- // await (user.Metadata['password:reset:token'] = token);
143
- // await (user.Metadata['password:reset:start'] = DateTime.now());
144
- // await user.Actions.add(
145
- // new UserAction({
146
- // Action: 'user:password:reset',
147
- // Data: DateTime.now().toISO(),
148
- // Persistent: true,
149
- // }),
150
- // );
151
- // await this.Queue.emit(new UserPasswordRestore(user.Uuid, token));
152
- // return new Ok({
153
- // reset_token: token,
154
- // ttl: this.PasswordResetTokenTTL,
155
- // });
156
- // }
157
82
  async logout(ssid) {
158
83
  if (!ssid) {
159
84
  return new Ok();
@@ -199,6 +124,12 @@ __decorate([
199
124
  }),
200
125
  __metadata("design:type", Number)
201
126
  ], LoginController.prototype, "SessionExpirationTime", void 0);
127
+ __decorate([
128
+ Config('rbac.twoFactorAuth.enabled', {
129
+ defaultValue: false,
130
+ }),
131
+ __metadata("design:type", Boolean)
132
+ ], LoginController.prototype, "TwoFactorAuthEnabled", void 0);
202
133
  __decorate([
203
134
  Config('rbac.session.cookie', {}),
204
135
  __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,2 +1,10 @@
1
- export {};
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
+ }
2
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"}
@@ -1,58 +1,79 @@
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 {};
18
- // export async function auth2Fa(user: User, token: string) {
19
- // user = _check_arg(_non_null())(user, 'user');
20
- // token = _check_arg(_trim(), _non_empty)(token, 'token');
21
- // return _chain(
22
- // _use(_service<TwoFactorAuthProvider>('rbac.twoFactorAuth'), 'twoFa'),
23
- // _tap(async ({ twoFa }: { twoFa: TwoFactorAuthProvider }) => {
24
- // await twoFa.verifyToken(token, user);
25
- // }),
26
- // _user_update({
27
- // LastLoginAt: DateTime.now()
28
- // }),
29
- // _user_ev(User2FaPassed)
30
- // );
31
- // }
32
- // @BasePath('user/auth')
33
- // @Policy(TwoFacRouteEnabled)
34
- // export class TwoFactorAuthController extends BaseController {
35
- // @Autoinject(QueueService)
36
- // protected Queue: QueueService;
37
- // @AutoinjectService('rbac.session')
38
- // protected SessionProvider: SessionProvider;
39
- // @AutoinjectService('rbac.twoFactorAuth')
40
- // protected TwoFactorAuthProvider: TwoFactorAuthProvider;
41
- // @Post('2fa/verify')
42
- // public async verifyToken(@User() logged: UserModel, @Body() token: TokenDto, @Session() session : ISession) {
43
- // const result = await this.TwoFactorAuthProvider.verifyToken(token.Token, logged);
44
- // if (result) {
45
- // return new Unauthorized(`invalid token`);
46
- // }
47
- // logged.LastLoginAt = DateTime.now();
48
- // await logged.update();
49
- // await this.Queue.emit(new UserLoginSuccess(logged.Uuid));
50
- // await this.SessionProvider.save(ssid, {
51
- // Authorized: true,
52
- // TwoFactorAuth_check: true,
53
- // });
54
- // // return user data
55
- // return new Ok(logged.dehydrate());
56
- // }
57
- // }
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { TokenDto } from './../dto/token-dto.js';
14
+ import { BaseController, BasePath, Ok, Post, Unauthorized } from '@spinajs/http';
15
+ import { SessionProvider, User as UserModel, _unwindGrants } from '@spinajs/rbac';
16
+ import { Session } from "@spinajs/rbac-http";
17
+ import { Body, Policy } from '@spinajs/http';
18
+ import { TwoFacRouteEnabled } from '../policies/2FaPolicy.js';
19
+ import { AutoinjectService } from '@spinajs/configuration';
20
+ import { Autoinject } from '@spinajs/di';
21
+ import { QueueService } from '@spinajs/queue';
22
+ import { User } from "@spinajs/rbac-http";
23
+ import { auth2Fa } from "./../actions/2fa.js";
24
+ let TwoFactorAuthController = class TwoFactorAuthController extends BaseController {
25
+ async verifyToken(logged, token, session) {
26
+ try {
27
+ await auth2Fa(logged, token.Token);
28
+ // 2fa complete, mark as authorized
29
+ // fron now on user is considered authorized
30
+ session.Data.set('Authorized', true);
31
+ session.Data.delete('TwoFactorAuth');
32
+ await this.SessionProvider.save(session);
33
+ this._log.trace('User logged in, 2fa authorized', {
34
+ Uuid: logged.Uuid
35
+ });
36
+ const grants = this.AC.getGrants();
37
+ const userGrants = logged.Role.map(r => _unwindGrants(r, grants));
38
+ const combinedGrants = Object.assign({}, ...userGrants);
39
+ return new Ok({
40
+ ...logged.dehydrateWithRelations({
41
+ dateTimeFormat: "iso"
42
+ }),
43
+ Grants: combinedGrants,
44
+ });
45
+ }
46
+ catch (err) {
47
+ this._log.error(err);
48
+ return new Unauthorized({
49
+ error: {
50
+ code: 'E_2FA_FAILED',
51
+ message: '2fa check failed',
52
+ },
53
+ });
54
+ }
55
+ }
56
+ };
57
+ __decorate([
58
+ Autoinject(QueueService),
59
+ __metadata("design:type", QueueService)
60
+ ], TwoFactorAuthController.prototype, "Queue", void 0);
61
+ __decorate([
62
+ AutoinjectService('rbac.session'),
63
+ __metadata("design:type", SessionProvider)
64
+ ], TwoFactorAuthController.prototype, "SessionProvider", void 0);
65
+ __decorate([
66
+ Post('2fa/verify'),
67
+ __param(0, User()),
68
+ __param(1, Body()),
69
+ __param(2, Session()),
70
+ __metadata("design:type", Function),
71
+ __metadata("design:paramtypes", [UserModel, TokenDto, Object]),
72
+ __metadata("design:returntype", Promise)
73
+ ], TwoFactorAuthController.prototype, "verifyToken", null);
74
+ TwoFactorAuthController = __decorate([
75
+ BasePath('user/auth'),
76
+ Policy(TwoFacRouteEnabled)
77
+ ], TwoFactorAuthController);
78
+ export { TwoFactorAuthController };
58
79
  //# 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,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAY,eAAe,EAAE,IAAI,IAAI,SAAS,EAA0B,aAAa,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAY,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAIvC,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,cAAc;IAQ1C,AAAN,KAAK,CAAC,WAAW,CAAS,MAAiB,EAAU,KAAe,EAAa,OAAiB;QAErG,IAAI,CAAC;YACD,MAAM,OAAO,CAAC,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,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YAClE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC;YAGxD,OAAO,IAAI,EAAE,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,YAAY,CAAC;gBACpB,KAAK,EAAE;oBACH,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,kBAAkB;iBAC9B;aACJ,CAAC,CAAC;QACP,CAAC;IACL,CAAC;CACJ,CAAA;AA7Ca;IADT,UAAU,CAAC,YAAY,CAAC;8BACR,YAAY;sDAAC;AAGpB;IADT,iBAAiB,CAAC,cAAc,CAAC;8BACP,eAAe;gEAAC;AAG9B;IADZ,IAAI,CAAC,YAAY,CAAC;IACO,WAAA,IAAI,EAAE,CAAA;IAAqB,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,OAAO,EAAE,CAAA;;qCAA9C,SAAS,EAAiB,QAAQ;;0DAsC1E;AA9CQ,uBAAuB;IAFnC,QAAQ,CAAC,WAAW,CAAC;IACrB,MAAM,CAAC,kBAAkB,CAAC;GACd,uBAAuB,CA+CnC"}
@@ -0,0 +1,4 @@
1
+ import { UserEvent } from '@spinajs/rbac';
2
+ export declare class User2FaEnabled extends UserEvent {
3
+ }
4
+ //# sourceMappingURL=User2FaEnabled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"User2FaEnabled.d.ts","sourceRoot":"","sources":["../../../src/events/User2FaEnabled.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,qBACa,cAAe,SAAQ,SAAS;CAAG"}
@@ -0,0 +1,15 @@
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
+ import { Event } from '@spinajs/queue';
8
+ import { UserEvent } from '@spinajs/rbac';
9
+ let User2FaEnabled = class User2FaEnabled extends UserEvent {
10
+ };
11
+ User2FaEnabled = __decorate([
12
+ Event()
13
+ ], User2FaEnabled);
14
+ export { User2FaEnabled };
15
+ //# sourceMappingURL=User2FaEnabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"User2FaEnabled.js","sourceRoot":"","sources":["../../../src/events/User2FaEnabled.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGnC,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,SAAS;CAAG,CAAA;AAAnC,cAAc;IAD1B,KAAK,EAAE;GACK,cAAc,CAAqB"}
@@ -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"}
@@ -10,14 +10,21 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import { InvalidOperation } from '@spinajs/exceptions';
11
11
  import { Config } from '@spinajs/configuration';
12
12
  import { BasePolicy } from '@spinajs/http';
13
+ import { AuthenticationFailed } from '@spinajs/exceptions';
13
14
  export class TwoFacRouteEnabled extends BasePolicy {
14
15
  isEnabled() {
15
16
  return true;
16
17
  }
17
- execute() {
18
+ execute(req) {
18
19
  if (this.TwoFactorConfig.enabled === false) {
19
20
  throw new InvalidOperation('2 factor auth is not enabled');
20
21
  }
22
+ /**
23
+ * Check only if user passed login page and waiting for TwoFactorAuth
24
+ */
25
+ if (!req.storage || !req.storage.User || !req.storage.Session?.Data.get('TwoFactorAuth')) {
26
+ throw new AuthenticationFailed('user not logged');
27
+ }
21
28
  return Promise.resolve();
22
29
  }
23
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"2FaPolicy.js","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAIzC,SAAS;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACM,OAAO;QACZ,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3C,MAAM,IAAI,gBAAgB,CAAC,8BAA8B,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAZW;IADT,MAAM,CAAC,oBAAoB,CAAC;;2DACkB"}
1
+ {"version":3,"file":"2FaPolicy.js","sourceRoot":"","sources":["../../../src/policies/2FaPolicy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAuB,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,OAAO,kBAAmB,SAAQ,UAAU;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,gBAAgB,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,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC;QAGD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AApBW;IADT,MAAM,CAAC,oBAAoB,CAAC;;2DACkB"}