@spinajs/rbac-http 2.0.132 → 2.0.133

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 (167) hide show
  1. package/lib/cjs/index.d.ts +0 -4
  2. package/lib/cjs/index.d.ts.map +1 -1
  3. package/lib/cjs/index.js +0 -4
  4. package/lib/cjs/index.js.map +1 -1
  5. package/lib/cjs/middlewares.js +3 -3
  6. package/lib/cjs/middlewares.js.map +1 -1
  7. package/lib/mjs/index.d.ts +0 -4
  8. package/lib/mjs/index.d.ts.map +1 -1
  9. package/lib/mjs/index.js +0 -4
  10. package/lib/mjs/index.js.map +1 -1
  11. package/lib/mjs/middlewares.js +5 -5
  12. package/lib/mjs/middlewares.js.map +1 -1
  13. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  14. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  15. package/package.json +16 -24
  16. package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts +0 -14
  17. package/lib/cjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
  18. package/lib/cjs/2fa/SpeakEasy2FaToken.js +0 -91
  19. package/lib/cjs/2fa/SpeakEasy2FaToken.js.map +0 -1
  20. package/lib/cjs/config/rbac-http.d.ts +0 -30
  21. package/lib/cjs/config/rbac-http.d.ts.map +0 -1
  22. package/lib/cjs/config/rbac-http.js +0 -43
  23. package/lib/cjs/config/rbac-http.js.map +0 -1
  24. package/lib/cjs/controllers/LoginController.d.ts +0 -35
  25. package/lib/cjs/controllers/LoginController.d.ts.map +0 -1
  26. package/lib/cjs/controllers/LoginController.js +0 -307
  27. package/lib/cjs/controllers/LoginController.js.map +0 -1
  28. package/lib/cjs/controllers/TwoFactorAuthController.d.ts +0 -12
  29. package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +0 -1
  30. package/lib/cjs/controllers/TwoFactorAuthController.js +0 -71
  31. package/lib/cjs/controllers/TwoFactorAuthController.js.map +0 -1
  32. package/lib/cjs/controllers/UserAdminController.d.ts +0 -4
  33. package/lib/cjs/controllers/UserAdminController.d.ts.map +0 -1
  34. package/lib/cjs/controllers/UserAdminController.js +0 -19
  35. package/lib/cjs/controllers/UserAdminController.js.map +0 -1
  36. package/lib/cjs/controllers/UserController.d.ts +0 -11
  37. package/lib/cjs/controllers/UserController.d.ts.map +0 -1
  38. package/lib/cjs/controllers/UserController.js +0 -110
  39. package/lib/cjs/controllers/UserController.js.map +0 -1
  40. package/lib/cjs/controllers/UserMetadata.d.ts +0 -7
  41. package/lib/cjs/controllers/UserMetadata.d.ts.map +0 -1
  42. package/lib/cjs/controllers/UserMetadata.js +0 -69
  43. package/lib/cjs/controllers/UserMetadata.js.map +0 -1
  44. package/lib/cjs/dto/login-dto.d.ts +0 -17
  45. package/lib/cjs/dto/login-dto.d.ts.map +0 -1
  46. package/lib/cjs/dto/login-dto.js +0 -33
  47. package/lib/cjs/dto/login-dto.js.map +0 -1
  48. package/lib/cjs/dto/password-dto.d.ts +0 -30
  49. package/lib/cjs/dto/password-dto.d.ts.map +0 -1
  50. package/lib/cjs/dto/password-dto.js +0 -35
  51. package/lib/cjs/dto/password-dto.js.map +0 -1
  52. package/lib/cjs/dto/restore-password-dto.d.ts +0 -24
  53. package/lib/cjs/dto/restore-password-dto.d.ts.map +0 -1
  54. package/lib/cjs/dto/restore-password-dto.js +0 -34
  55. package/lib/cjs/dto/restore-password-dto.js.map +0 -1
  56. package/lib/cjs/dto/token-dto.d.ts +0 -16
  57. package/lib/cjs/dto/token-dto.d.ts.map +0 -1
  58. package/lib/cjs/dto/token-dto.js +0 -32
  59. package/lib/cjs/dto/token-dto.js.map +0 -1
  60. package/lib/cjs/dto/user-dto.d.ts +0 -22
  61. package/lib/cjs/dto/user-dto.d.ts.map +0 -1
  62. package/lib/cjs/dto/user-dto.js +0 -33
  63. package/lib/cjs/dto/user-dto.js.map +0 -1
  64. package/lib/cjs/dto/userLogin-dto.d.ts +0 -22
  65. package/lib/cjs/dto/userLogin-dto.d.ts.map +0 -1
  66. package/lib/cjs/dto/userLogin-dto.js +0 -34
  67. package/lib/cjs/dto/userLogin-dto.js.map +0 -1
  68. package/lib/cjs/events/UserLoginFailed.d.ts +0 -6
  69. package/lib/cjs/events/UserLoginFailed.d.ts.map +0 -1
  70. package/lib/cjs/events/UserLoginFailed.js +0 -25
  71. package/lib/cjs/events/UserLoginFailed.js.map +0 -1
  72. package/lib/cjs/events/UserLoginSuccess.d.ts +0 -6
  73. package/lib/cjs/events/UserLoginSuccess.d.ts.map +0 -1
  74. package/lib/cjs/events/UserLoginSuccess.js +0 -25
  75. package/lib/cjs/events/UserLoginSuccess.js.map +0 -1
  76. package/lib/cjs/events/UserPassordRestore.d.ts +0 -7
  77. package/lib/cjs/events/UserPassordRestore.d.ts.map +0 -1
  78. package/lib/cjs/events/UserPassordRestore.js +0 -26
  79. package/lib/cjs/events/UserPassordRestore.js.map +0 -1
  80. package/lib/cjs/fingerprint/FingerprintJs.d.ts +0 -4
  81. package/lib/cjs/fingerprint/FingerprintJs.d.ts.map +0 -1
  82. package/lib/cjs/fingerprint/FingerprintJs.js +0 -18
  83. package/lib/cjs/fingerprint/FingerprintJs.js.map +0 -1
  84. package/lib/cjs/policies/2FaPolicy.d.ts +0 -8
  85. package/lib/cjs/policies/2FaPolicy.d.ts.map +0 -1
  86. package/lib/cjs/policies/2FaPolicy.js +0 -32
  87. package/lib/cjs/policies/2FaPolicy.js.map +0 -1
  88. package/lib/cjs/policies/captchaPolicy.d.ts +0 -1
  89. package/lib/cjs/policies/captchaPolicy.d.ts.map +0 -1
  90. package/lib/cjs/policies/captchaPolicy.js +0 -1
  91. package/lib/cjs/policies/captchaPolicy.js.map +0 -1
  92. package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts +0 -14
  93. package/lib/mjs/2fa/SpeakEasy2FaToken.d.ts.map +0 -1
  94. package/lib/mjs/2fa/SpeakEasy2FaToken.js +0 -65
  95. package/lib/mjs/2fa/SpeakEasy2FaToken.js.map +0 -1
  96. package/lib/mjs/config/rbac-http.d.ts +0 -30
  97. package/lib/mjs/config/rbac-http.d.ts.map +0 -1
  98. package/lib/mjs/config/rbac-http.js +0 -41
  99. package/lib/mjs/config/rbac-http.js.map +0 -1
  100. package/lib/mjs/controllers/LoginController.d.ts +0 -35
  101. package/lib/mjs/controllers/LoginController.d.ts.map +0 -1
  102. package/lib/mjs/controllers/LoginController.js +0 -304
  103. package/lib/mjs/controllers/LoginController.js.map +0 -1
  104. package/lib/mjs/controllers/TwoFactorAuthController.d.ts +0 -12
  105. package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +0 -1
  106. package/lib/mjs/controllers/TwoFactorAuthController.js +0 -68
  107. package/lib/mjs/controllers/TwoFactorAuthController.js.map +0 -1
  108. package/lib/mjs/controllers/UserAdminController.d.ts +0 -4
  109. package/lib/mjs/controllers/UserAdminController.d.ts.map +0 -1
  110. package/lib/mjs/controllers/UserAdminController.js +0 -16
  111. package/lib/mjs/controllers/UserAdminController.js.map +0 -1
  112. package/lib/mjs/controllers/UserController.d.ts +0 -11
  113. package/lib/mjs/controllers/UserController.d.ts.map +0 -1
  114. package/lib/mjs/controllers/UserController.js +0 -84
  115. package/lib/mjs/controllers/UserController.js.map +0 -1
  116. package/lib/mjs/controllers/UserMetadata.d.ts +0 -7
  117. package/lib/mjs/controllers/UserMetadata.d.ts.map +0 -1
  118. package/lib/mjs/controllers/UserMetadata.js +0 -66
  119. package/lib/mjs/controllers/UserMetadata.js.map +0 -1
  120. package/lib/mjs/dto/login-dto.d.ts +0 -17
  121. package/lib/mjs/dto/login-dto.d.ts.map +0 -1
  122. package/lib/mjs/dto/login-dto.js +0 -30
  123. package/lib/mjs/dto/login-dto.js.map +0 -1
  124. package/lib/mjs/dto/password-dto.d.ts +0 -30
  125. package/lib/mjs/dto/password-dto.d.ts.map +0 -1
  126. package/lib/mjs/dto/password-dto.js +0 -32
  127. package/lib/mjs/dto/password-dto.js.map +0 -1
  128. package/lib/mjs/dto/restore-password-dto.d.ts +0 -24
  129. package/lib/mjs/dto/restore-password-dto.d.ts.map +0 -1
  130. package/lib/mjs/dto/restore-password-dto.js +0 -31
  131. package/lib/mjs/dto/restore-password-dto.js.map +0 -1
  132. package/lib/mjs/dto/token-dto.d.ts +0 -16
  133. package/lib/mjs/dto/token-dto.d.ts.map +0 -1
  134. package/lib/mjs/dto/token-dto.js +0 -29
  135. package/lib/mjs/dto/token-dto.js.map +0 -1
  136. package/lib/mjs/dto/user-dto.d.ts +0 -22
  137. package/lib/mjs/dto/user-dto.d.ts.map +0 -1
  138. package/lib/mjs/dto/user-dto.js +0 -30
  139. package/lib/mjs/dto/user-dto.js.map +0 -1
  140. package/lib/mjs/dto/userLogin-dto.d.ts +0 -22
  141. package/lib/mjs/dto/userLogin-dto.d.ts.map +0 -1
  142. package/lib/mjs/dto/userLogin-dto.js +0 -31
  143. package/lib/mjs/dto/userLogin-dto.js.map +0 -1
  144. package/lib/mjs/events/UserLoginFailed.d.ts +0 -6
  145. package/lib/mjs/events/UserLoginFailed.d.ts.map +0 -1
  146. package/lib/mjs/events/UserLoginFailed.js +0 -22
  147. package/lib/mjs/events/UserLoginFailed.js.map +0 -1
  148. package/lib/mjs/events/UserLoginSuccess.d.ts +0 -6
  149. package/lib/mjs/events/UserLoginSuccess.d.ts.map +0 -1
  150. package/lib/mjs/events/UserLoginSuccess.js +0 -22
  151. package/lib/mjs/events/UserLoginSuccess.js.map +0 -1
  152. package/lib/mjs/events/UserPassordRestore.d.ts +0 -7
  153. package/lib/mjs/events/UserPassordRestore.d.ts.map +0 -1
  154. package/lib/mjs/events/UserPassordRestore.js +0 -23
  155. package/lib/mjs/events/UserPassordRestore.js.map +0 -1
  156. package/lib/mjs/fingerprint/FingerprintJs.d.ts +0 -4
  157. package/lib/mjs/fingerprint/FingerprintJs.d.ts.map +0 -1
  158. package/lib/mjs/fingerprint/FingerprintJs.js +0 -15
  159. package/lib/mjs/fingerprint/FingerprintJs.js.map +0 -1
  160. package/lib/mjs/policies/2FaPolicy.d.ts +0 -8
  161. package/lib/mjs/policies/2FaPolicy.d.ts.map +0 -1
  162. package/lib/mjs/policies/2FaPolicy.js +0 -28
  163. package/lib/mjs/policies/2FaPolicy.js.map +0 -1
  164. package/lib/mjs/policies/captchaPolicy.d.ts +0 -2
  165. package/lib/mjs/policies/captchaPolicy.d.ts.map +0 -1
  166. package/lib/mjs/policies/captchaPolicy.js +0 -2
  167. package/lib/mjs/policies/captchaPolicy.js.map +0 -1
@@ -1,304 +0,0 @@
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 { InvalidOperation } from '@spinajs/exceptions';
14
- import { UserLoginDto } from '../dto/userLogin-dto.js';
15
- import { BaseController, BasePath, Post, Body, Ok, Get, Cookie, CookieResponse, Unauthorized, Header, Policy, Query, BadRequest, NotFound } from '@spinajs/http';
16
- import { AuthProvider, FederatedAuthProvider, PasswordProvider, PasswordValidationProvider, Session, SessionProvider, User, UserMetadata, UserPasswordChanged } from '@spinajs/rbac';
17
- import { Autoinject } from '@spinajs/di';
18
- import { AutoinjectService, Config, Configuration } from '@spinajs/configuration';
19
- import { FingerprintProvider, TwoFactorAuthProvider } from '../interfaces.js';
20
- import { QueueService } from '@spinajs/queue';
21
- import { NotLoggedPolicy } from '../policies/NotLoggedPolicy.js';
22
- import { LoggedPolicy } from '../policies/LoggedPolicy.js';
23
- import { UserPasswordRestore } from '../events/UserPassordRestore.js';
24
- import { RestorePasswordDto } from '../dto/restore-password-dto.js';
25
- import { v4 as uuidv4 } from 'uuid';
26
- import { DateTime } from 'luxon';
27
- import { UserAction } from '@spinajs/rbac';
28
- import { UserLoginSuccess } from '../events/UserLoginSuccess.js';
29
- let LoginController = class LoginController extends BaseController {
30
- async loginFederated(credentials, caller) {
31
- const strategy = this.FederatedLoginStrategies.find((x) => x.callerCheck(caller));
32
- if (!strategy) {
33
- throw new InvalidOperation(`No auth stragegy registered for caller ${caller}`);
34
- }
35
- const result = await strategy.authenticate(credentials);
36
- if (!result.Error) {
37
- // proceed with standard authentication
38
- return await this.authenticate(result.User);
39
- }
40
- return new Unauthorized(result.Error);
41
- }
42
- /**
43
- *
44
- * Api call for listing avaible federated login strategies
45
- *
46
- * @returns response with avaible login strategies
47
- */
48
- async federatedLoginList() {
49
- return new Ok(this.FederatedLoginStrategies.map((x) => x.Name));
50
- }
51
- async login(credentials) {
52
- const result = await this.AuthProvider.authenticate(credentials.Email, credentials.Password);
53
- if (!result.Error) {
54
- // proceed with standard authentication
55
- return await this.authenticate(result.User);
56
- }
57
- return new Unauthorized(result.Error);
58
- }
59
- async setNewPassword(token, pwd) {
60
- const user = await User.query()
61
- .innerJoin(UserMetadata, function () {
62
- this.where({
63
- Key: 'password:reset:token',
64
- Value: token,
65
- });
66
- })
67
- .populate('Metadata')
68
- .first();
69
- if (!user) {
70
- return new NotFound({
71
- error: {
72
- code: 'ERR_USER_NOT_FOUND',
73
- message: 'No user found for this reset token',
74
- },
75
- });
76
- }
77
- const val = (await user.Metadata['password:reset:start']);
78
- const now = DateTime.now().plus({ seconds: -this.PasswordResetTokenTTL });
79
- if (val < now) {
80
- return new BadRequest({
81
- error: {
82
- code: 'ERR_RESET_TOKEN_EXPIRED',
83
- message: 'Password reset token expired',
84
- },
85
- });
86
- }
87
- if (!this.PasswordValidationService.check(pwd.Password)) {
88
- return new BadRequest({
89
- error: {
90
- code: 'ERR_PASSWORD_RULE',
91
- message: 'Invalid password, does not match password rules',
92
- },
93
- });
94
- }
95
- if (pwd.Password !== pwd.ConfirmPassword) {
96
- return new BadRequest({
97
- error: {
98
- code: 'ERR_PASSWORD_NOT_MATCH',
99
- message: 'Password and repeat password does not match',
100
- },
101
- });
102
- }
103
- const hashedPassword = await this.PasswordProvider.hash(pwd.Password);
104
- user.Password = hashedPassword;
105
- await user.update();
106
- /**
107
- * Delete all reset related meta for user
108
- */
109
- await user.Metadata.delete(/password:reset.*/);
110
- // add to action list
111
- await user.Actions.add(new UserAction({
112
- Persistent: true,
113
- Action: 'password:reset',
114
- }));
115
- // inform others
116
- await this.Queue.emit(new UserPasswordChanged(user.Uuid));
117
- }
118
- async forgotPassword(login) {
119
- const user = await this.AuthProvider.getByEmail(login.Email);
120
- if (!user.IsActive || user.IsBanned || user.DeletedAt !== null) {
121
- return new InvalidOperation('User is inactive, banned or deleted. Contact system administrator');
122
- }
123
- const token = uuidv4();
124
- // assign meta to user
125
- await (user.Metadata['password:reset'] = true);
126
- await (user.Metadata['password:reset:token'] = token);
127
- await (user.Metadata['password:reset:start'] = DateTime.now());
128
- await user.Actions.add(new UserAction({
129
- Action: 'user:password:reset',
130
- Data: DateTime.now().toISO(),
131
- Persistent: true,
132
- }));
133
- await this.Queue.emit(new UserPasswordRestore(user.Uuid, token));
134
- return new Ok({
135
- reset_token: token,
136
- ttl: this.PasswordResetTokenTTL,
137
- });
138
- }
139
- async logout(ssid) {
140
- if (!ssid) {
141
- return new Ok();
142
- }
143
- await this.SessionProvider.delete(ssid);
144
- // send empty cookie to confirm session deletion
145
- return new CookieResponse('ssid', null, this.SessionExpirationTime);
146
- }
147
- async authenticate(user, federated) {
148
- if (!user) {
149
- return new Unauthorized({
150
- error: {
151
- message: 'login or password incorrect',
152
- },
153
- });
154
- }
155
- await user.Metadata.populate();
156
- const session = new Session();
157
- const dUser = user.dehydrate();
158
- session.Data.set('User', dUser);
159
- // we found user but we still dont know if is authorized
160
- // eg. 2fa auth is not performed
161
- // create session, but user is not yet authorized
162
- session.Data.set('Authorized', false);
163
- // if its federated login, skip 2fa - assume
164
- // external login service provided it
165
- if (this.TwoFactorConfig.enabled || !federated) {
166
- await this.SessionProvider.save(session);
167
- const enabledForUser = await this.TwoFactorAuthProvider.isEnabled(user);
168
- /**
169
- * if 2fa is enabled for user, proceed
170
- */
171
- if (enabledForUser) {
172
- /**
173
- * check if 2fa system is initialized for user eg. private key is generated.
174
- */
175
- const isInitialized = await this.TwoFactorAuthProvider.isInitialized(user);
176
- if (!isInitialized) {
177
- const twoFaResult = await this.TwoFactorAuthProvider.initialize(user);
178
- return new CookieResponse('ssid', session.SessionId, this.SessionExpirationTime, true, {
179
- toFactorAuth: true,
180
- twoFactorAuthFirstTime: true,
181
- method: this.TwoFactorConfig.service,
182
- data: twoFaResult,
183
- }, { httpOnly: true });
184
- }
185
- // give chance to execute 2fa eg. send sms or email
186
- await this.TwoFactorAuthProvider.execute(user);
187
- // return session to identify user
188
- // and only info that twoFactor auth is requested
189
- return new CookieResponse('ssid', session.SessionId, this.SessionExpirationTime, true, {
190
- toFactorAuth: true,
191
- }, { httpOnly: true });
192
- }
193
- }
194
- // 2fa is not enabled, so we found user, it means it is logged
195
- session.Data.set('Authorized', true);
196
- await this.SessionProvider.save(session);
197
- await this.Queue.emit(new UserLoginSuccess(user.Uuid));
198
- user.LastLoginAt = DateTime.now();
199
- await user.update();
200
- // BEWARE: httpOnly coockie, only accesible via http method in browser
201
- // return coockie session id with additional user data
202
- return new CookieResponse('ssid', session.SessionId, this.SessionExpirationTime, true, dUser, { httpOnly: true });
203
- }
204
- };
205
- __decorate([
206
- Autoinject(),
207
- __metadata("design:type", Configuration)
208
- ], LoginController.prototype, "Configuration", void 0);
209
- __decorate([
210
- AutoinjectService('rbac.auth'),
211
- __metadata("design:type", AuthProvider)
212
- ], LoginController.prototype, "AuthProvider", void 0);
213
- __decorate([
214
- AutoinjectService('rbac.session'),
215
- __metadata("design:type", SessionProvider)
216
- ], LoginController.prototype, "SessionProvider", void 0);
217
- __decorate([
218
- Config('rbac.session.expiration', {
219
- defaultValue: 120,
220
- }),
221
- __metadata("design:type", Number)
222
- ], LoginController.prototype, "SessionExpirationTime", void 0);
223
- __decorate([
224
- Config('rbac.password_reset.ttl'),
225
- __metadata("design:type", Number)
226
- ], LoginController.prototype, "PasswordResetTokenTTL", void 0);
227
- __decorate([
228
- AutoinjectService('rbac.twoFactorAuth'),
229
- __metadata("design:type", TwoFactorAuthProvider)
230
- ], LoginController.prototype, "TwoFactorAuthProvider", void 0);
231
- __decorate([
232
- AutoinjectService('rbac.fingerprint'),
233
- __metadata("design:type", FingerprintProvider)
234
- ], LoginController.prototype, "FingerprintProvider", void 0);
235
- __decorate([
236
- AutoinjectService('rbac.password.validation'),
237
- __metadata("design:type", PasswordValidationProvider)
238
- ], LoginController.prototype, "PasswordValidationService", void 0);
239
- __decorate([
240
- Autoinject(FederatedAuthProvider),
241
- __metadata("design:type", Array)
242
- ], LoginController.prototype, "FederatedLoginStrategies", void 0);
243
- __decorate([
244
- Autoinject(),
245
- __metadata("design:type", PasswordProvider)
246
- ], LoginController.prototype, "PasswordProvider", void 0);
247
- __decorate([
248
- Autoinject(QueueService),
249
- __metadata("design:type", QueueService)
250
- ], LoginController.prototype, "Queue", void 0);
251
- __decorate([
252
- Post('federated-login'),
253
- Policy(NotLoggedPolicy),
254
- __param(0, Body()),
255
- __param(1, Header('Host')),
256
- __metadata("design:type", Function),
257
- __metadata("design:paramtypes", [Object, String]),
258
- __metadata("design:returntype", Promise)
259
- ], LoginController.prototype, "loginFederated", null);
260
- __decorate([
261
- Get(),
262
- Policy(NotLoggedPolicy),
263
- __metadata("design:type", Function),
264
- __metadata("design:paramtypes", []),
265
- __metadata("design:returntype", Promise)
266
- ], LoginController.prototype, "federatedLoginList", null);
267
- __decorate([
268
- Post(),
269
- Policy(NotLoggedPolicy),
270
- __param(0, Body()),
271
- __metadata("design:type", Function),
272
- __metadata("design:paramtypes", [UserLoginDto]),
273
- __metadata("design:returntype", Promise)
274
- ], LoginController.prototype, "login", null);
275
- __decorate([
276
- Post('new-password'),
277
- Policy(NotLoggedPolicy),
278
- __param(0, Query()),
279
- __param(1, Body()),
280
- __metadata("design:type", Function),
281
- __metadata("design:paramtypes", [String, RestorePasswordDto]),
282
- __metadata("design:returntype", Promise)
283
- ], LoginController.prototype, "setNewPassword", null);
284
- __decorate([
285
- Post('forgot-password'),
286
- Policy(NotLoggedPolicy),
287
- __param(0, Body()),
288
- __metadata("design:type", Function),
289
- __metadata("design:paramtypes", [UserLoginDto]),
290
- __metadata("design:returntype", Promise)
291
- ], LoginController.prototype, "forgotPassword", null);
292
- __decorate([
293
- Get(),
294
- Policy(LoggedPolicy),
295
- __param(0, Cookie()),
296
- __metadata("design:type", Function),
297
- __metadata("design:paramtypes", [String]),
298
- __metadata("design:returntype", Promise)
299
- ], LoginController.prototype, "logout", null);
300
- LoginController = __decorate([
301
- BasePath('user/auth')
302
- ], LoginController);
303
- export { LoginController };
304
- //# sourceMappingURL=LoginController.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoginController.js","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import { TokenDto } from './../dto/token-dto.js';
2
- import { BaseController, Ok, Unauthorized } from '@spinajs/http';
3
- import { SessionProvider, User as UserModel } from '@spinajs/rbac';
4
- import { TwoFactorAuthProvider } from '../interfaces.js';
5
- import { QueueService } from '@spinajs/queue';
6
- export declare class TwoFactorAuthController extends BaseController {
7
- protected Queue: QueueService;
8
- protected SessionProvider: SessionProvider;
9
- protected TwoFactorAuthProvider: TwoFactorAuthProvider;
10
- verifyToken(logged: UserModel, token: TokenDto, ssid: string): Promise<Unauthorized | Ok>;
11
- }
12
- //# sourceMappingURL=TwoFactorAuthController.d.ts.map
@@ -1 +0,0 @@
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,EAAoB,EAAE,EAAQ,YAAY,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,eAAe,CAAC;AAMnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAIzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAEa,uBAAwB,SAAQ,cAAc;IAEzD,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IAG9B,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAG1C,WAAW,CAAS,MAAM,EAAE,SAAS,EAAU,KAAK,EAAE,QAAQ,EAAY,IAAI,EAAE,MAAM;CAoBpG"}
@@ -1,68 +0,0 @@
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, Cookie, Ok, Post, Unauthorized } from '@spinajs/http';
15
- import { SessionProvider, User as UserModel } from '@spinajs/rbac';
16
- import { Body, Policy } from '@spinajs/http';
17
- import { User } from '../decorators.js';
18
- import { TwoFacRouteEnabled } from '../policies/2FaPolicy.js';
19
- import { AutoinjectService } from '@spinajs/configuration';
20
- import { TwoFactorAuthProvider } from '../interfaces.js';
21
- import { DateTime } from 'luxon';
22
- import { UserLoginSuccess } from '../events/UserLoginSuccess.js';
23
- import { Autoinject } from '@spinajs/di';
24
- import { QueueService } from '@spinajs/queue';
25
- let TwoFactorAuthController = class TwoFactorAuthController extends BaseController {
26
- async verifyToken(logged, token, ssid) {
27
- const result = await this.TwoFactorAuthProvider.verifyToken(token.Token, logged);
28
- if (result) {
29
- return new Unauthorized(`invalid token`);
30
- }
31
- logged.LastLoginAt = DateTime.now();
32
- await logged.update();
33
- await this.Queue.emit(new UserLoginSuccess(logged.Uuid));
34
- await this.SessionProvider.save(ssid, {
35
- Authorized: true,
36
- TwoFactorAuth_check: true,
37
- });
38
- // return user data
39
- return new Ok(logged.dehydrate());
40
- }
41
- };
42
- __decorate([
43
- Autoinject(QueueService),
44
- __metadata("design:type", QueueService)
45
- ], TwoFactorAuthController.prototype, "Queue", void 0);
46
- __decorate([
47
- AutoinjectService('rbac.session'),
48
- __metadata("design:type", SessionProvider)
49
- ], TwoFactorAuthController.prototype, "SessionProvider", void 0);
50
- __decorate([
51
- AutoinjectService('rbac.twoFactorAuth'),
52
- __metadata("design:type", TwoFactorAuthProvider)
53
- ], TwoFactorAuthController.prototype, "TwoFactorAuthProvider", void 0);
54
- __decorate([
55
- Post('2fa/verify'),
56
- __param(0, User()),
57
- __param(1, Body()),
58
- __param(2, Cookie()),
59
- __metadata("design:type", Function),
60
- __metadata("design:paramtypes", [UserModel, TokenDto, String]),
61
- __metadata("design:returntype", Promise)
62
- ], TwoFactorAuthController.prototype, "verifyToken", null);
63
- TwoFactorAuthController = __decorate([
64
- BasePath('user/auth'),
65
- Policy(TwoFacRouteEnabled)
66
- ], TwoFactorAuthController);
67
- export { TwoFactorAuthController };
68
- //# sourceMappingURL=TwoFactorAuthController.js.map
@@ -1 +0,0 @@
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,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIvC,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,cAAc;IAW5C,AAAN,KAAK,CAAC,WAAW,CAAS,MAAiB,EAAU,KAAe,EAAY,IAAY;QACjG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEjF,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,YAAY,CAAC,eAAe,CAAC,CAAC;SAC1C;QAED,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QAEtB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzD,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE;YACpC,UAAU,EAAE,IAAI;YAChB,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;QAEH,mBAAmB;QACnB,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AA9BC;IAAC,UAAU,CAAC,YAAY,CAAC;8BACR,YAAY;sDAAC;AAE9B;IAAC,iBAAiB,CAAC,cAAc,CAAC;8BACP,eAAe;gEAAC;AAE3C;IAAC,iBAAiB,CAAC,oBAAoB,CAAC;8BACP,qBAAqB;sEAAC;AAG1C;IADZ,IAAI,CAAC,YAAY,CAAC;IACO,WAAA,IAAI,EAAE,CAAA;IAAqB,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,MAAM,EAAE,CAAA;;qCAA7C,SAAS,EAAiB,QAAQ;;0DAmB1E;AA9BU,uBAAuB;IAFnC,QAAQ,CAAC,WAAW,CAAC;IACrB,MAAM,CAAC,kBAAkB,CAAC;GACd,uBAAuB,CA+BnC;SA/BY,uBAAuB"}
@@ -1,4 +0,0 @@
1
- import { BaseController } from '@spinajs/http';
2
- export declare class UsersController extends BaseController {
3
- }
4
- //# sourceMappingURL=UserAdminController.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserAdminController.d.ts","sourceRoot":"","sources":["../../../src/controllers/UserAdminController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAY,MAAM,eAAe,CAAC;AAGzD,qBAEa,eAAgB,SAAQ,cAAc;CAuElD"}
@@ -1,16 +0,0 @@
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 { BaseController, BasePath } from '@spinajs/http';
8
- import { Resource } from './../decorators.js';
9
- let UsersController = class UsersController extends BaseController {
10
- };
11
- UsersController = __decorate([
12
- Resource('user'),
13
- BasePath('user')
14
- ], UsersController);
15
- export { UsersController };
16
- //# sourceMappingURL=UserAdminController.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserAdminController.js","sourceRoot":"","sources":["../../../src/controllers/UserAdminController.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAIvC,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,cAAc;CAuElD,CAAA;AAvEY,eAAe;IAF3B,QAAQ,CAAC,MAAM,CAAC;IAChB,QAAQ,CAAC,MAAM,CAAC;GACJ,eAAe,CAuE3B;SAvEY,eAAe"}
@@ -1,11 +0,0 @@
1
- import { PasswordDto } from '../dto/password-dto.js';
2
- import { User as UserModel, PasswordProvider, SessionProvider } from '@spinajs/rbac';
3
- import { BaseController, Ok } from '@spinajs/http';
4
- export declare class UserController extends BaseController {
5
- protected PasswordProvider: PasswordProvider;
6
- protected CoockieSecret: string;
7
- protected SessionProvider: SessionProvider;
8
- refresh(user: UserModel, ssid: string): Promise<Ok>;
9
- newPassword(user: UserModel, pwd: PasswordDto): Promise<Ok>;
10
- }
11
- //# sourceMappingURL=UserController.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserController.d.ts","sourceRoot":"","sources":["../../../src/controllers/UserController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,cAAc,EAAiB,EAAE,EAAuB,MAAM,eAAe,CAAC;AAQvF,qBAEa,cAAe,SAAQ,cAAc;IAEhD,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAG7C,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAGhC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAI9B,OAAO,CAAS,IAAI,EAAE,SAAS,EAAY,IAAI,EAAE,MAAM;IAkBvD,WAAW,CAAS,IAAI,EAAE,SAAS,EAAU,GAAG,EAAE,WAAW;CAgB3E"}
@@ -1,84 +0,0 @@
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 { PasswordDto } from '../dto/password-dto.js';
14
- import { User as UserModel, PasswordProvider, SessionProvider } from '@spinajs/rbac';
15
- import { BaseController, BasePath, Get, Ok, Body, Patch, Cookie } from '@spinajs/http';
16
- import { InvalidArgument, Forbidden } from '@spinajs/exceptions';
17
- import { Autoinject } from '@spinajs/di';
18
- import { Permission, User, Resource } from '../decorators.js';
19
- import { Config } from '@spinajs/configuration';
20
- import * as cs from 'cookie-signature';
21
- let UserController = class UserController extends BaseController {
22
- async refresh(user, ssid) {
23
- // get user data from db
24
- await user.refresh();
25
- await user.Metadata.populate();
26
- // refresh session data from DB
27
- const sId = cs.unsign(ssid, this.CoockieSecret);
28
- if (sId) {
29
- const session = await this.SessionProvider.restore(sId);
30
- if (session) {
31
- session.Data.set('User', user.dehydrate());
32
- }
33
- }
34
- return new Ok(user.dehydrate());
35
- }
36
- async newPassword(user, pwd) {
37
- if (pwd.Password !== pwd.ConfirmPassword) {
38
- throw new InvalidArgument('password does not match');
39
- }
40
- const isValid = await this.PasswordProvider.verify(user.Password, pwd.OldPassword);
41
- if (!isValid) {
42
- throw new Forbidden('old password do not match');
43
- }
44
- const hashedPassword = await this.PasswordProvider.hash(pwd.Password);
45
- user.Password = hashedPassword;
46
- await user.update();
47
- return new Ok();
48
- }
49
- };
50
- __decorate([
51
- Autoinject(),
52
- __metadata("design:type", PasswordProvider)
53
- ], UserController.prototype, "PasswordProvider", void 0);
54
- __decorate([
55
- Config('http.cookie.secret'),
56
- __metadata("design:type", String)
57
- ], UserController.prototype, "CoockieSecret", void 0);
58
- __decorate([
59
- Autoinject(),
60
- __metadata("design:type", SessionProvider)
61
- ], UserController.prototype, "SessionProvider", void 0);
62
- __decorate([
63
- Get(),
64
- Permission('readOwn'),
65
- __param(0, User()),
66
- __param(1, Cookie()),
67
- __metadata("design:type", Function),
68
- __metadata("design:paramtypes", [UserModel, String]),
69
- __metadata("design:returntype", Promise)
70
- ], UserController.prototype, "refresh", null);
71
- __decorate([
72
- Patch('/password'),
73
- __param(0, User()),
74
- __param(1, Body()),
75
- __metadata("design:type", Function),
76
- __metadata("design:paramtypes", [UserModel, PasswordDto]),
77
- __metadata("design:returntype", Promise)
78
- ], UserController.prototype, "newPassword", null);
79
- UserController = __decorate([
80
- BasePath('user'),
81
- Resource('user')
82
- ], UserController);
83
- export { UserController };
84
- //# sourceMappingURL=UserController.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserController.js","sourceRoot":"","sources":["../../../src/controllers/UserController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAKhC,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,cAAc;IAYnC,AAAN,KAAK,CAAC,OAAO,CAAS,IAAe,EAAY,IAAY;QAClE,wBAAwB;QACxB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAE/B,+BAA+B;QAC/B,MAAM,GAAG,GAAmB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,GAAG,EAAE;YACP,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAC5C;SACF;QAED,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAClC,CAAC;IAGY,AAAN,KAAK,CAAC,WAAW,CAAS,IAAe,EAAU,GAAgB;QACxE,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,eAAe,EAAE;YACxC,MAAM,IAAI,eAAe,CAAC,yBAAyB,CAAC,CAAC;SACtD;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAEnF,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;SAClD;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;QAC/B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,EAAE,EAAE,CAAC;IAClB,CAAC;CACF,CAAA;AA7CC;IAAC,UAAU,EAAE;8BACe,gBAAgB;wDAAC;AAE7C;IAAC,MAAM,CAAC,oBAAoB,CAAC;;qDACG;AAEhC;IAAC,UAAU,EAAE;8BACc,eAAe;uDAAC;AAI9B;IAFZ,GAAG,EAAE;IACL,UAAU,CAAC,SAAS,CAAC;IACA,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,MAAM,EAAE,CAAA;;qCAApB,SAAS;;6CAe3C;AAGY;IADZ,KAAK,CAAC,WAAW,CAAC;IACO,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,IAAI,EAAE,CAAA;;qCAAlB,SAAS,EAAe,WAAW;;iDAezE;AA7CU,cAAc;IAF1B,QAAQ,CAAC,MAAM,CAAC;IAChB,QAAQ,CAAC,MAAM,CAAC;GACJ,cAAc,CA8C1B;SA9CY,cAAc"}
@@ -1,7 +0,0 @@
1
- import { Ok } from '@spinajs/http';
2
- import { User as UserModel, UserMetadata } from '@spinajs/rbac';
3
- export declare class UserMetaController {
4
- addMetadata(logged: UserModel, user: UserModel, meta: UserMetadata): Promise<Ok>;
5
- updateMetadata(logged: UserModel, user: UserModel, meta: UserMetadata): Promise<Ok>;
6
- }
7
- //# sourceMappingURL=UserMetadata.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserMetadata.d.ts","sourceRoot":"","sources":["../../../src/controllers/UserMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,EAAE,EAAa,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIhE,qBAEa,kBAAkB;IAIhB,WAAW,CAAS,MAAM,EAAE,SAAS,EAAe,IAAI,EAAE,SAAS,EAAa,IAAI,EAAE,YAAY;IAWlG,cAAc,CAAS,MAAM,EAAE,SAAS,EAAe,IAAI,EAAE,SAAS,EAAe,IAAI,EAAE,YAAY;CAcrH"}
@@ -1,66 +0,0 @@
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 { Put, Post, BasePath, Ok, Forbidden } from '@spinajs/http';
14
- import { User as UserModel, UserMetadata } from '@spinajs/rbac';
15
- import { Permission, User, Resource } from '../decorators.js';
16
- import { FromModel, AsModel } from '@spinajs/orm-http';
17
- let UserMetaController = class UserMetaController {
18
- async addMetadata(logged, user, meta) {
19
- if (logged.Id !== user.Id) {
20
- throw new Forbidden('cannot add metadata to another user');
21
- }
22
- await user.Metadata.add(meta);
23
- return new Ok(meta);
24
- }
25
- async updateMetadata(logged, user, meta) {
26
- if (logged.Id !== user.Id) {
27
- throw new Forbidden('cannot add metadata to another user');
28
- }
29
- await meta.User.populate();
30
- if (meta.User.Value.Id !== logged.Id) {
31
- throw new Forbidden('cannot edit metadata that is not own by user');
32
- }
33
- await meta.update();
34
- return new Ok();
35
- }
36
- };
37
- __decorate([
38
- Post(),
39
- Permission('updateOwn'),
40
- __param(0, User()),
41
- __param(1, FromModel()),
42
- __param(2, AsModel()),
43
- __metadata("design:type", Function),
44
- __metadata("design:paramtypes", [UserModel, UserModel, UserMetadata]),
45
- __metadata("design:returntype", Promise)
46
- ], UserMetaController.prototype, "addMetadata", null);
47
- __decorate([
48
- Put('user/:user/metadata/:meta'),
49
- Permission('updateOwn'),
50
- __param(0, User()),
51
- __param(1, FromModel()),
52
- __param(2, FromModel()),
53
- __metadata("design:type", Function),
54
- __metadata("design:paramtypes", [UserModel, UserModel, UserMetadata]),
55
- __metadata("design:returntype", Promise)
56
- ], UserMetaController.prototype, "updateMetadata", null);
57
- UserMetaController = __decorate([
58
- BasePath('user/:user/metadata'),
59
- Resource('user.metadata')
60
- ], UserMetaController);
61
- export { UserMetaController };
62
- // function userOwnerPermissionStrategy(){
63
- // // 1. obtain current logged user
64
- // // 2. find
65
- // }
66
- //# sourceMappingURL=UserMetadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserMetadata.js","sourceRoot":"","sources":["../../../src/controllers/UserMetadata.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAIhD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAIhB,AAAN,KAAK,CAAC,WAAW,CAAS,MAAiB,EAAe,IAAe,EAAa,IAAkB;QAC7G,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;YACzB,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;SAC5D;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAIY,AAAN,KAAK,CAAC,cAAc,CAAS,MAAiB,EAAe,IAAe,EAAe,IAAkB;QAClH,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;YACzB,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;SAC5D;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE;YACpC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACrE;QAED,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEpB,OAAO,IAAI,EAAE,EAAE,CAAC;IAClB,CAAC;CACF,CAAA;AAzBc;IAFZ,IAAI,EAAE;IACN,UAAU,CAAC,WAAW,CAAC;IACE,WAAA,IAAI,EAAE,CAAA;IAAqB,WAAA,SAAS,EAAE,CAAA;IAAmB,WAAA,OAAO,EAAE,CAAA;;qCAAnD,SAAS,EAAqB,SAAS,EAAmB,YAAY;;qDAO9G;AAIY;IAFZ,GAAG,CAAC,2BAA2B,CAAC;IAChC,UAAU,CAAC,WAAW,CAAC;IACK,WAAA,IAAI,EAAE,CAAA;IAAqB,WAAA,SAAS,EAAE,CAAA;IAAmB,WAAA,SAAS,EAAE,CAAA;;qCAArD,SAAS,EAAqB,SAAS,EAAqB,YAAY;;wDAanH;AA5BU,kBAAkB;IAF9B,QAAQ,CAAC,qBAAqB,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC;GACb,kBAAkB,CA6B9B;SA7BY,kBAAkB;AA+B/B,0CAA0C;AAE1C,sCAAsC;AACtC,gBAAgB;AAEhB,IAAI"}