nicot-simple-user 1.0.0

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 (98) hide show
  1. package/.prettierrc +4 -0
  2. package/Dockerfile.puppeteer +45 -0
  3. package/LICENSE +22 -0
  4. package/README.md +414 -0
  5. package/config.example.yaml +7 -0
  6. package/dist/app.module.d.ts +2 -0
  7. package/dist/app.module.js +53 -0
  8. package/dist/app.module.js.map +1 -0
  9. package/dist/main.d.ts +1 -0
  10. package/dist/main.js +26 -0
  11. package/dist/main.js.map +1 -0
  12. package/dist/simple-user/aragami-init.d.ts +2 -0
  13. package/dist/simple-user/aragami-init.js +55 -0
  14. package/dist/simple-user/aragami-init.js.map +1 -0
  15. package/dist/simple-user/index.d.ts +6 -0
  16. package/dist/simple-user/index.js +23 -0
  17. package/dist/simple-user/index.js.map +1 -0
  18. package/dist/simple-user/login/login.controller.d.ts +14 -0
  19. package/dist/simple-user/login/login.controller.js +90 -0
  20. package/dist/simple-user/login/login.controller.js.map +1 -0
  21. package/dist/simple-user/module-builder.d.ts +2 -0
  22. package/dist/simple-user/module-builder.js +34 -0
  23. package/dist/simple-user/module-builder.js.map +1 -0
  24. package/dist/simple-user/options.d.ts +26 -0
  25. package/dist/simple-user/options.js +3 -0
  26. package/dist/simple-user/options.js.map +1 -0
  27. package/dist/simple-user/resolver.d.ts +41 -0
  28. package/dist/simple-user/resolver.js +48 -0
  29. package/dist/simple-user/resolver.js.map +1 -0
  30. package/dist/simple-user/send-code/code-context.d.ts +4 -0
  31. package/dist/simple-user/send-code/code-context.js +8 -0
  32. package/dist/simple-user/send-code/code-context.js.map +1 -0
  33. package/dist/simple-user/send-code/decorators.d.ts +2 -0
  34. package/dist/simple-user/send-code/decorators.js +13 -0
  35. package/dist/simple-user/send-code/decorators.js.map +1 -0
  36. package/dist/simple-user/send-code/send-code.controller.d.ts +9 -0
  37. package/dist/simple-user/send-code/send-code.controller.js +71 -0
  38. package/dist/simple-user/send-code/send-code.controller.js.map +1 -0
  39. package/dist/simple-user/send-code/send-code.dto.d.ts +12 -0
  40. package/dist/simple-user/send-code/send-code.dto.js +55 -0
  41. package/dist/simple-user/send-code/send-code.dto.js.map +1 -0
  42. package/dist/simple-user/send-code/send-code.service.d.ts +18 -0
  43. package/dist/simple-user/send-code/send-code.service.js +144 -0
  44. package/dist/simple-user/send-code/send-code.service.js.map +1 -0
  45. package/dist/simple-user/send-code/wait-time.dto.d.ts +3 -0
  46. package/dist/simple-user/send-code/wait-time.dto.js +29 -0
  47. package/dist/simple-user/send-code/wait-time.dto.js.map +1 -0
  48. package/dist/simple-user/simple-user/change-email.dto.d.ts +3 -0
  49. package/dist/simple-user/simple-user/change-email.dto.js +12 -0
  50. package/dist/simple-user/simple-user/change-email.dto.js.map +1 -0
  51. package/dist/simple-user/simple-user/change-password.dto.d.ts +4 -0
  52. package/dist/simple-user/simple-user/change-password.dto.js +41 -0
  53. package/dist/simple-user/simple-user/change-password.dto.js.map +1 -0
  54. package/dist/simple-user/simple-user/email.dto.d.ts +6 -0
  55. package/dist/simple-user/simple-user/email.dto.js +46 -0
  56. package/dist/simple-user/simple-user/email.dto.js.map +1 -0
  57. package/dist/simple-user/simple-user/login.dto.d.ts +11 -0
  58. package/dist/simple-user/simple-user/login.dto.js +80 -0
  59. package/dist/simple-user/simple-user/login.dto.js.map +1 -0
  60. package/dist/simple-user/simple-user/reset-password.dto.d.ts +4 -0
  61. package/dist/simple-user/simple-user/reset-password.dto.js +32 -0
  62. package/dist/simple-user/simple-user/reset-password.dto.js.map +1 -0
  63. package/dist/simple-user/simple-user/simple-user.service.d.ts +33 -0
  64. package/dist/simple-user/simple-user/simple-user.service.js +338 -0
  65. package/dist/simple-user/simple-user/simple-user.service.js.map +1 -0
  66. package/dist/simple-user/simple-user/user-exists.dto.d.ts +3 -0
  67. package/dist/simple-user/simple-user/user-exists.dto.js +28 -0
  68. package/dist/simple-user/simple-user/user-exists.dto.js.map +1 -0
  69. package/dist/simple-user/simple-user.entity.d.ts +40 -0
  70. package/dist/simple-user/simple-user.entity.js +119 -0
  71. package/dist/simple-user/simple-user.entity.js.map +1 -0
  72. package/dist/simple-user/simple-user.module.d.ts +8 -0
  73. package/dist/simple-user/simple-user.module.js +52 -0
  74. package/dist/simple-user/simple-user.module.js.map +1 -0
  75. package/dist/simple-user/tokens.d.ts +2 -0
  76. package/dist/simple-user/tokens.js +6 -0
  77. package/dist/simple-user/tokens.js.map +1 -0
  78. package/dist/simple-user/user-center/patch-me.d.ts +2 -0
  79. package/dist/simple-user/user-center/patch-me.js +16 -0
  80. package/dist/simple-user/user-center/patch-me.js.map +1 -0
  81. package/dist/simple-user/user-center/user-center.controller.d.ts +13 -0
  82. package/dist/simple-user/user-center/user-center.controller.js +88 -0
  83. package/dist/simple-user/user-center/user-center.controller.js.map +1 -0
  84. package/dist/simple-user/user-center/user-center.service.d.ts +2 -0
  85. package/dist/simple-user/user-center/user-center.service.js +17 -0
  86. package/dist/simple-user/user-center/user-center.service.js.map +1 -0
  87. package/dist/tsconfig.build.tsbuildinfo +1 -0
  88. package/dist/utility/load-config.d.ts +7 -0
  89. package/dist/utility/load-config.js +61 -0
  90. package/dist/utility/load-config.js.map +1 -0
  91. package/eslint.config.mjs +34 -0
  92. package/install-npm-typeorm.sh +3 -0
  93. package/nest-cli.json +7 -0
  94. package/package.json +98 -0
  95. package/test/app-e2e.spec.ts +242 -0
  96. package/test/jest-e2e.json +9 -0
  97. package/tsconfig.build.json +4 -0
  98. package/tsconfig.json +18 -0
@@ -0,0 +1,338 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.SimpleUserService = void 0;
19
+ const common_1 = require("@nestjs/common");
20
+ const nicot_1 = require("nicot");
21
+ const typeorm_1 = require("typeorm");
22
+ const module_builder_1 = require("../module-builder");
23
+ const tokens_1 = require("../tokens");
24
+ const nestjs_aragami_1 = require("nestjs-aragami");
25
+ const aragami_1 = require("aragami");
26
+ const login_dto_1 = require("./login.dto");
27
+ const send_code_service_1 = require("../send-code/send-code.service");
28
+ const send_code_dto_1 = require("../send-code/send-code.dto");
29
+ const crypto_random_string_1 = __importDefault(require("crypto-random-string"));
30
+ const wait_time_dto_1 = require("../send-code/wait-time.dto");
31
+ class LoginSession {
32
+ }
33
+ __decorate([
34
+ (0, aragami_1.CacheKey)(),
35
+ __metadata("design:type", String)
36
+ ], LoginSession.prototype, "token", void 0);
37
+ class LoginSessionByEmail {
38
+ userIdKey() {
39
+ return `${this.email}:${this.token}`;
40
+ }
41
+ }
42
+ __decorate([
43
+ (0, aragami_1.CacheKey)(),
44
+ __metadata("design:type", Function),
45
+ __metadata("design:paramtypes", []),
46
+ __metadata("design:returntype", void 0)
47
+ ], LoginSessionByEmail.prototype, "userIdKey", null);
48
+ class PasswordLoginFailAttempt {
49
+ }
50
+ let SimpleUserService = class SimpleUserService extends nicot_1.CrudBase {
51
+ constructor(repo, options, optionsEx, aragami, sendCodeService) {
52
+ super(optionsEx.userClass, repo, optionsEx.userServiceCrudExtras || {});
53
+ this.options = options;
54
+ this.optionsEx = optionsEx;
55
+ this.aragami = aragami;
56
+ this.sendCodeService = sendCodeService;
57
+ this.passwordMaxAttempts = this.options.passwordMaxAttempts || 5;
58
+ this.passwordBlockTimeMs = this.options.passwordBlockTimeMs || 15 * 60 * 1000;
59
+ }
60
+ getFindOptions() {
61
+ return {};
62
+ }
63
+ async findOrCreateUser(ctx) {
64
+ const after = async (user) => {
65
+ user.lastActiveIpAddress = ctx.ip;
66
+ user.lastActiveTime = new Date();
67
+ await this.repo.update({
68
+ id: user.id,
69
+ }, {
70
+ lastActiveIpAddress: user.lastActiveIpAddress,
71
+ lastActiveTime: user.lastActiveTime,
72
+ });
73
+ const fn = this.options.afterPutUser || ((u) => u);
74
+ const res = await fn(user);
75
+ return (res || user);
76
+ };
77
+ const findOptions = this.getFindOptions();
78
+ if (ctx.token) {
79
+ const throw401 = () => {
80
+ throw new nicot_1.BlankReturnMessageDto(401, 'Invalid user token').toException();
81
+ };
82
+ const session = await this.aragami.get(LoginSession, ctx.token);
83
+ if (!session) {
84
+ throw401();
85
+ }
86
+ const user = await this.repo.findOne({
87
+ ...findOptions,
88
+ where: { id: session.userId },
89
+ });
90
+ if (!user) {
91
+ throw401();
92
+ }
93
+ return after(user);
94
+ }
95
+ if (this.options.allowAnonymousUsers === false &&
96
+ !ctx.forceAllowAnonymous) {
97
+ throw new nicot_1.BlankReturnMessageDto(401, 'User authentication required').toException();
98
+ }
99
+ const getExistingUser = (repo = this.repo) => repo.findOne({
100
+ ...findOptions,
101
+ where: { ssaid: ctx.ssaid },
102
+ });
103
+ const existingUser = await getExistingUser();
104
+ if (existingUser) {
105
+ return after(existingUser);
106
+ }
107
+ const newUser = await this.aragami.lock(`simple_user_create_${ctx.ssaid}`, async () => {
108
+ return this._mayBeTransaction(async (db, repo) => {
109
+ const existingUserInTx = await getExistingUser(repo);
110
+ if (existingUserInTx) {
111
+ return existingUserInTx;
112
+ }
113
+ const newUser = new this.optionsEx.userClass();
114
+ newUser.ssaid = ctx.ssaid;
115
+ return await repo.save(newUser);
116
+ });
117
+ });
118
+ return after(newUser);
119
+ }
120
+ async findUserWithId(id) {
121
+ const findOptions = this.getFindOptions();
122
+ const user = await this.repo.findOne({
123
+ ...findOptions,
124
+ where: { id },
125
+ });
126
+ if (!user) {
127
+ throw new nicot_1.BlankReturnMessageDto(404, 'User not found.').toException();
128
+ }
129
+ return user;
130
+ }
131
+ async checkUserExists(email) {
132
+ const res = await this.repo.exists({
133
+ where: { email },
134
+ });
135
+ return new nicot_1.GenericReturnMessageDto(200, 'success', { exists: res });
136
+ }
137
+ async checkPasswordRiskControl(ctx, user) {
138
+ const riskControlKeys = [
139
+ `userId:${user.id}:`,
140
+ `ssaid:${ctx.ssaid}:`,
141
+ `ip:${ctx.ip}:`,
142
+ ];
143
+ if (this.passwordBlockTimeMs && this.passwordMaxAttempts) {
144
+ const checks = await Promise.all(riskControlKeys.map(async (key) => {
145
+ const records = await this.aragami.values(PasswordLoginFailAttempt, key);
146
+ if (records.length >= this.passwordMaxAttempts) {
147
+ records.sort((a, b) => a.time.getTime() - b.time.getTime());
148
+ const firstExceed = records[0];
149
+ return (firstExceed.time.getTime() + this.passwordBlockTimeMs - Date.now());
150
+ }
151
+ return undefined;
152
+ }));
153
+ const hits = checks.filter((c) => c !== undefined);
154
+ if (hits.length > 0) {
155
+ const waitTimeMs = Math.max(...hits);
156
+ const waitTimeDto = new wait_time_dto_1.WaitTimeDto();
157
+ waitTimeDto.waitTimeMs = waitTimeMs;
158
+ throw new nicot_1.GenericReturnMessageDto(429, 'Too many failed password attempts. Please wait before retrying.', waitTimeDto).toException();
159
+ }
160
+ }
161
+ }
162
+ async recordPasswordFailAttempt(ctx, user) {
163
+ const riskControlKeys = [
164
+ `userId:${user.id}:`,
165
+ `ssaid:${ctx.ssaid}:`,
166
+ `ip:${ctx.ip}:`,
167
+ ];
168
+ if (this.passwordBlockTimeMs && this.passwordMaxAttempts) {
169
+ const failAttempt = new PasswordLoginFailAttempt();
170
+ failAttempt.userId = user.id;
171
+ failAttempt.ssaid = ctx.ssaid;
172
+ failAttempt.ip = ctx.ip;
173
+ failAttempt.time = new Date();
174
+ await Promise.all(riskControlKeys.map((key) => this.aragami.set(failAttempt, {
175
+ key,
176
+ ttl: this.passwordBlockTimeMs,
177
+ })));
178
+ }
179
+ }
180
+ async login(dto, ctx) {
181
+ if (!dto.code && !dto.password) {
182
+ throw new nicot_1.BlankReturnMessageDto(400, 'Please provide code or password to login.').toException();
183
+ }
184
+ const user = await this.repo.findOne({
185
+ ...this.getFindOptions(),
186
+ where: { email: dto.email },
187
+ });
188
+ const anonymousUser = await this.findOrCreateUser({
189
+ ssaid: ctx.ssaid,
190
+ ip: ctx.ip,
191
+ token: undefined,
192
+ forceAllowAnonymous: true,
193
+ });
194
+ const issueTokenForUser = async (user) => {
195
+ await this.repo.update({
196
+ id: user.id,
197
+ }, {
198
+ loginIpAddress: ctx.ip,
199
+ loginTime: new Date(),
200
+ });
201
+ const token = (0, crypto_random_string_1.default)({
202
+ length: 64,
203
+ type: 'alphanumeric',
204
+ });
205
+ const session = new LoginSession();
206
+ session.token = token;
207
+ session.userId = user.id;
208
+ const loginExpiryTimeMs = this.options.loginExpiryTimeMs || 30 * 24 * 60 * 60 * 1000;
209
+ await this.aragami.set(session, {
210
+ ttl: loginExpiryTimeMs,
211
+ });
212
+ await this.aragami.set(LoginSessionByEmail, {
213
+ token: token,
214
+ email: user.email,
215
+ }, {
216
+ ttl: loginExpiryTimeMs,
217
+ });
218
+ const res = new login_dto_1.LoginResponseDto();
219
+ res.token = token;
220
+ res.tokenExpiresAt = new Date(Date.now() + loginExpiryTimeMs);
221
+ res.userId = user.id;
222
+ return new nicot_1.GenericReturnMessageDto(200, 'success', res);
223
+ };
224
+ const verifyCode = () => this.sendCodeService.verifyCode({
225
+ email: dto.email,
226
+ code: dto.code,
227
+ codePurpose: send_code_dto_1.CodePurpose.Login,
228
+ });
229
+ if (user) {
230
+ if (dto.code) {
231
+ await verifyCode();
232
+ }
233
+ else if (dto.password) {
234
+ await this.checkPasswordRiskControl(ctx, user);
235
+ const passwordValid = await user.checkPassword(dto.password);
236
+ if (!passwordValid) {
237
+ await this.recordPasswordFailAttempt(ctx, user);
238
+ throw new nicot_1.BlankReturnMessageDto(403, 'Invalid password.').toException();
239
+ }
240
+ }
241
+ else {
242
+ throw new nicot_1.BlankReturnMessageDto(400, 'Please provide code or password to login.').toException();
243
+ }
244
+ await this.options.onMigrateUser?.(anonymousUser, user);
245
+ return issueTokenForUser(user);
246
+ }
247
+ else {
248
+ if (!dto.code) {
249
+ throw new nicot_1.BlankReturnMessageDto(404, 'User does not exist. Please provide code to create new user.').toException();
250
+ }
251
+ await verifyCode();
252
+ if (dto.setPassword) {
253
+ await anonymousUser.setPassword(dto.setPassword);
254
+ }
255
+ await this.repo.update({
256
+ id: anonymousUser.id,
257
+ }, {
258
+ email: dto.email,
259
+ ...(dto.setPassword
260
+ ? { passwordHash: anonymousUser.passwordHash }
261
+ : {}),
262
+ ssaid: null,
263
+ registerIpAddress: ctx.ip,
264
+ registerTime: new Date(),
265
+ });
266
+ return issueTokenForUser(anonymousUser);
267
+ }
268
+ }
269
+ async changeEmail(user, dto) {
270
+ if (!user.email) {
271
+ throw new nicot_1.BlankReturnMessageDto(402, 'Not allowed to change email for anonymous user.').toException();
272
+ }
273
+ await this.sendCodeService.verifyCode({
274
+ email: dto.email,
275
+ code: dto.code,
276
+ codePurpose: send_code_dto_1.CodePurpose.ChangeEmail,
277
+ });
278
+ await this.repo.update({
279
+ id: user.id,
280
+ }, {
281
+ email: dto.email,
282
+ });
283
+ return new nicot_1.BlankReturnMessageDto(200, 'success');
284
+ }
285
+ async kickUserEmail(email) {
286
+ const allSessions = await this.aragami.values(LoginSessionByEmail, `${email}:`);
287
+ await Promise.all(allSessions.map((s) => this.aragami.del(LoginSession, s.token)));
288
+ await this.aragami.clear(LoginSessionByEmail, `${email}:`);
289
+ }
290
+ async changePassword(user, dto, ctx) {
291
+ if (!user.email) {
292
+ throw new nicot_1.BlankReturnMessageDto(402, 'Not allowed to change password for anonymous user.').toException();
293
+ }
294
+ if (user.passwordHash) {
295
+ await this.checkPasswordRiskControl(ctx, user);
296
+ const valid = await user.checkPassword(dto.currentPassword);
297
+ if (!valid) {
298
+ await this.recordPasswordFailAttempt(ctx, user);
299
+ throw new nicot_1.BlankReturnMessageDto(403, 'Current password is incorrect.').toException();
300
+ }
301
+ }
302
+ await user.setPassword(dto.newPassword);
303
+ await this.repo.update({
304
+ id: user.id,
305
+ }, {
306
+ passwordHash: user.passwordHash,
307
+ });
308
+ await this.kickUserEmail(user.email);
309
+ return new nicot_1.BlankReturnMessageDto(200, 'success');
310
+ }
311
+ async resetPassword(dto) {
312
+ await this.sendCodeService.verifyCode({
313
+ email: dto.email,
314
+ code: dto.code,
315
+ codePurpose: send_code_dto_1.CodePurpose.ResetPassword,
316
+ });
317
+ const dummyUser = new this.optionsEx.userClass();
318
+ await dummyUser.setPassword(dto.newPassword);
319
+ await this.repo.update({
320
+ email: dto.email,
321
+ }, {
322
+ passwordHash: dummyUser.passwordHash,
323
+ });
324
+ await this.kickUserEmail(dto.email);
325
+ return new nicot_1.BlankReturnMessageDto(200, 'success');
326
+ }
327
+ };
328
+ exports.SimpleUserService = SimpleUserService;
329
+ exports.SimpleUserService = SimpleUserService = __decorate([
330
+ (0, common_1.Injectable)(),
331
+ __param(0, (0, common_1.Inject)(tokens_1.UserRepoToken)),
332
+ __param(1, (0, common_1.Inject)(module_builder_1.MODULE_OPTIONS_TOKEN)),
333
+ __param(2, (0, common_1.Inject)(tokens_1.OptionsExToken)),
334
+ __param(3, (0, nestjs_aragami_1.InjectAragami)()),
335
+ __metadata("design:paramtypes", [typeorm_1.Repository, Object, Object, aragami_1.Aragami,
336
+ send_code_service_1.SendCodeService])
337
+ ], SimpleUserService);
338
+ //# sourceMappingURL=simple-user.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-user.service.js","sourceRoot":"","sources":["../../../src/simple-user/simple-user/simple-user.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare class UserExistsDto {
2
+ exists: boolean;
3
+ }
@@ -0,0 +1,28 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.UserExistsDto = void 0;
13
+ const openapi = require("@nestjs/swagger");
14
+ const swagger_1 = require("@nestjs/swagger");
15
+ class UserExistsDto {
16
+ static _OPENAPI_METADATA_FACTORY() {
17
+ return { exists: { required: true, type: () => Boolean } };
18
+ }
19
+ }
20
+ exports.UserExistsDto = UserExistsDto;
21
+ __decorate([
22
+ (0, swagger_1.ApiProperty)({
23
+ description: 'Indicates whether the user exists',
24
+ example: true,
25
+ }),
26
+ __metadata("design:type", Boolean)
27
+ ], UserExistsDto.prototype, "exists", void 0);
28
+ //# sourceMappingURL=user-exists.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-exists.dto.js","sourceRoot":"","sources":["../../../src/simple-user/simple-user/user-exists.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,aAAa;;;;CAMzB;AAND,sCAMC;AADC;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,IAAI;KACd,CAAC;;6CACc"}
@@ -0,0 +1,40 @@
1
+ declare const SimpleUser_base: new () => {
2
+ id: number;
3
+ applyQuery(qb: import("typeorm").SelectQueryBuilder<any>, entityName: string): void;
4
+ createTime: Date;
5
+ updateTime: Date;
6
+ deleteTime: Date;
7
+ isValidInCreate(): string | undefined;
8
+ beforeCreate(): Promise<void>;
9
+ afterCreate(): Promise<void>;
10
+ beforeGet(): Promise<void>;
11
+ afterGet(): Promise<void>;
12
+ isValidInUpdate(): string | undefined;
13
+ beforeUpdate(): Promise<void>;
14
+ isValidInUpsert(): string | undefined;
15
+ beforeUpsert(): Promise<void>;
16
+ afterUpsert(): Promise<void>;
17
+ pageCount: number;
18
+ recordsPerPage: number;
19
+ getActualPageSettings(): import("nicot").PageSettingsWise;
20
+ getPageCount(): number;
21
+ getRecordsPerPage(): number;
22
+ getStartingFrom(): number;
23
+ applyPaginationQuery(qb: import("typeorm").SelectQueryBuilder<any>): void;
24
+ };
25
+ export declare class SimpleUser extends SimpleUser_base {
26
+ email: string;
27
+ ssaid: string;
28
+ passwordHash: string;
29
+ passwordSet: boolean;
30
+ afterGet(): Promise<void>;
31
+ setPassword(password: string): Promise<void>;
32
+ checkPassword(password: string): Promise<boolean>;
33
+ loginIpAddress: string;
34
+ loginTime: Date;
35
+ registerIpAddress: string;
36
+ registerTime: Date;
37
+ lastActiveIpAddress: string;
38
+ lastActiveTime: Date;
39
+ }
40
+ export {};
@@ -0,0 +1,119 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SimpleUser = void 0;
16
+ const openapi = require("@nestjs/swagger");
17
+ const nicot_1 = require("nicot");
18
+ const typeorm_1 = require("typeorm");
19
+ const argon2_1 = __importDefault(require("argon2"));
20
+ let SimpleUser = class SimpleUser extends (0, nicot_1.IdBase)() {
21
+ async afterGet() {
22
+ this.passwordSet = !!this.passwordHash;
23
+ }
24
+ async setPassword(password) {
25
+ this.passwordHash = await argon2_1.default.hash(password, {
26
+ type: argon2_1.default.argon2id,
27
+ });
28
+ }
29
+ async checkPassword(password) {
30
+ if (!this.passwordHash || !password)
31
+ return false;
32
+ try {
33
+ return await argon2_1.default.verify(this.passwordHash, password);
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ static _OPENAPI_METADATA_FACTORY() {
40
+ return { email: { required: true, type: () => String }, ssaid: { required: true, type: () => String }, passwordHash: { required: true, type: () => String }, passwordSet: { required: true, type: () => Boolean }, loginIpAddress: { required: true, type: () => String }, loginTime: { required: true, type: () => Date }, registerIpAddress: { required: true, type: () => String }, registerTime: { required: true, type: () => Date }, lastActiveIpAddress: { required: true, type: () => String }, lastActiveTime: { required: true, type: () => Date } };
41
+ }
42
+ };
43
+ exports.SimpleUser = SimpleUser;
44
+ __decorate([
45
+ (0, typeorm_1.Index)(),
46
+ (0, nicot_1.NotWritable)(),
47
+ (0, nicot_1.StringColumn)(255, {
48
+ description: 'Email address of the user. Only available for registered users',
49
+ }),
50
+ __metadata("design:type", String)
51
+ ], SimpleUser.prototype, "email", void 0);
52
+ __decorate([
53
+ (0, typeorm_1.Index)(),
54
+ (0, nicot_1.InternalColumn)(),
55
+ (0, nicot_1.StringColumn)(255, {
56
+ description: 'SSAID of the user. Only available for anonymous users',
57
+ }),
58
+ __metadata("design:type", String)
59
+ ], SimpleUser.prototype, "ssaid", void 0);
60
+ __decorate([
61
+ (0, nicot_1.InternalColumn)(),
62
+ (0, nicot_1.StringColumn)(255, {
63
+ description: 'Hashed password of the user. Only available for registered users',
64
+ }),
65
+ __metadata("design:type", String)
66
+ ], SimpleUser.prototype, "passwordHash", void 0);
67
+ __decorate([
68
+ (0, nicot_1.NotColumn)({
69
+ description: 'Indicates whether the user has set a password',
70
+ required: true,
71
+ }),
72
+ __metadata("design:type", Boolean)
73
+ ], SimpleUser.prototype, "passwordSet", void 0);
74
+ __decorate([
75
+ (0, nicot_1.InternalColumn)(),
76
+ (0, nicot_1.StringColumn)(39, {
77
+ description: 'Last login IP address of the user',
78
+ }),
79
+ __metadata("design:type", String)
80
+ ], SimpleUser.prototype, "loginIpAddress", void 0);
81
+ __decorate([
82
+ (0, nicot_1.InternalColumn)(),
83
+ (0, nicot_1.DateColumn)({
84
+ description: 'Last login time of the user',
85
+ }),
86
+ __metadata("design:type", Date)
87
+ ], SimpleUser.prototype, "loginTime", void 0);
88
+ __decorate([
89
+ (0, nicot_1.InternalColumn)(),
90
+ (0, nicot_1.StringColumn)(39, {
91
+ description: 'Registration IP address of the user',
92
+ }),
93
+ __metadata("design:type", String)
94
+ ], SimpleUser.prototype, "registerIpAddress", void 0);
95
+ __decorate([
96
+ (0, nicot_1.InternalColumn)(),
97
+ (0, nicot_1.DateColumn)({
98
+ description: 'Registration time of the user',
99
+ }),
100
+ __metadata("design:type", Date)
101
+ ], SimpleUser.prototype, "registerTime", void 0);
102
+ __decorate([
103
+ (0, nicot_1.InternalColumn)(),
104
+ (0, nicot_1.StringColumn)(39, {
105
+ description: 'Last active IP address of the user',
106
+ }),
107
+ __metadata("design:type", String)
108
+ ], SimpleUser.prototype, "lastActiveIpAddress", void 0);
109
+ __decorate([
110
+ (0, nicot_1.InternalColumn)(),
111
+ (0, nicot_1.DateColumn)({
112
+ description: 'Last active time of the user',
113
+ }),
114
+ __metadata("design:type", Date)
115
+ ], SimpleUser.prototype, "lastActiveTime", void 0);
116
+ exports.SimpleUser = SimpleUser = __decorate([
117
+ (0, typeorm_1.Entity)()
118
+ ], SimpleUser);
119
+ //# sourceMappingURL=simple-user.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-user.entity.js","sourceRoot":"","sources":["../../src/simple-user/simple-user.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iCAOe;AACf,qCAAwC;AACxC,oDAA4B;AAGrB,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,IAAA,cAAM,GAAE;IA6BtC,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IACzC,CAAC;IAMD,KAAK,CAAC,WAAW,CAAC,QAAgB;QAChC,IAAI,CAAC,YAAY,GAAG,MAAM,gBAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC9C,IAAI,EAAE,gBAAM,CAAC,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAElD,IAAI,CAAC;YACH,OAAO,MAAM,gBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YAEP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;;;;CAqCF,CAAA;AA5FY,gCAAU;AAOrB;IANC,IAAA,eAAK,GAAE;IACP,IAAA,mBAAW,GAAE;IACb,IAAA,oBAAY,EAAC,GAAG,EAAE;QACjB,WAAW,EACT,gEAAgE;KACnE,CAAC;;yCACY;AAOd;IALC,IAAA,eAAK,GAAE;IACP,IAAA,sBAAc,GAAE;IAChB,IAAA,oBAAY,EAAC,GAAG,EAAE;QACjB,WAAW,EAAE,uDAAuD;KACrE,CAAC;;yCACY;AAOd;IALC,IAAA,sBAAc,GAAE;IAChB,IAAA,oBAAY,EAAC,GAAG,EAAE;QACjB,WAAW,EACT,kEAAkE;KACrE,CAAC;;gDACmB;AAMrB;IAJC,IAAA,iBAAS,EAAC;QACT,WAAW,EAAE,+CAA+C;QAC5D,QAAQ,EAAE,IAAI;KACf,CAAC;;+CACmB;AAkCrB;IAJC,IAAA,sBAAc,GAAE;IAChB,IAAA,oBAAY,EAAC,EAAE,EAAE;QAChB,WAAW,EAAE,mCAAmC;KACjD,CAAC;;kDACqB;AAMvB;IAJC,IAAA,sBAAc,GAAE;IAChB,IAAA,kBAAU,EAAC;QACV,WAAW,EAAE,6BAA6B;KAC3C,CAAC;8BACS,IAAI;6CAAC;AAMhB;IAJC,IAAA,sBAAc,GAAE;IAChB,IAAA,oBAAY,EAAC,EAAE,EAAE;QAChB,WAAW,EAAE,qCAAqC;KACnD,CAAC;;qDACwB;AAM1B;IAJC,IAAA,sBAAc,GAAE;IAChB,IAAA,kBAAU,EAAC;QACV,WAAW,EAAE,+BAA+B;KAC7C,CAAC;8BACY,IAAI;gDAAC;AAMnB;IAJC,IAAA,sBAAc,GAAE;IAChB,IAAA,oBAAY,EAAC,EAAE,EAAE;QAChB,WAAW,EAAE,oCAAoC;KAClD,CAAC;;uDAC0B;AAM5B;IAJC,IAAA,sBAAc,GAAE;IAChB,IAAA,kBAAU,EAAC;QACV,WAAW,EAAE,8BAA8B;KAC5C,CAAC;8BACc,IAAI;kDAAC;qBA3FV,UAAU;IADtB,IAAA,gBAAM,GAAE;GACI,UAAU,CA4FtB"}
@@ -0,0 +1,8 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { ConfigurableModuleClass } from './module-builder';
3
+ export type SimpleUserRegisterOptions = Parameters<typeof ConfigurableModuleClass.register>[0];
4
+ export type SimpleUserRegisterAsyncOptions = Parameters<typeof ConfigurableModuleClass.registerAsync>[0];
5
+ export declare class SimpleUserModule extends ConfigurableModuleClass {
6
+ static register(options: SimpleUserRegisterOptions): DynamicModule;
7
+ static registerAsync(options: SimpleUserRegisterAsyncOptions): DynamicModule;
8
+ }
@@ -0,0 +1,52 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SimpleUserModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const module_builder_1 = require("./module-builder");
12
+ const aragami_init_1 = require("./aragami-init");
13
+ const simple_user_service_1 = require("./simple-user/simple-user.service");
14
+ const send_code_service_1 = require("./send-code/send-code.service");
15
+ const send_code_controller_1 = require("./send-code/send-code.controller");
16
+ const login_controller_1 = require("./login/login.controller");
17
+ const user_center_controller_1 = require("./user-center/user-center.controller");
18
+ const resolver_1 = require("./resolver");
19
+ const tokens_1 = require("./tokens");
20
+ const patch_me_1 = require("./user-center/patch-me");
21
+ const patchUserCenterControllerMeWithDynamicModule = (module) => {
22
+ const userExProvider = module.providers?.find((p) => p.provide === tokens_1.OptionsExToken);
23
+ if (userExProvider?.useValue) {
24
+ (0, patch_me_1.patchUserCenterControllerMe)(userExProvider.useValue);
25
+ }
26
+ };
27
+ let SimpleUserModule = class SimpleUserModule extends module_builder_1.ConfigurableModuleClass {
28
+ static register(options) {
29
+ const base = super.register(options);
30
+ patchUserCenterControllerMeWithDynamicModule(base);
31
+ return (0, aragami_init_1.attachAragamiWithBridge)(base);
32
+ }
33
+ static registerAsync(options) {
34
+ const base = super.registerAsync(options);
35
+ patchUserCenterControllerMeWithDynamicModule(base);
36
+ return (0, aragami_init_1.attachAragamiWithBridge)(base);
37
+ }
38
+ };
39
+ exports.SimpleUserModule = SimpleUserModule;
40
+ exports.SimpleUserModule = SimpleUserModule = __decorate([
41
+ (0, common_1.Module)({
42
+ providers: [
43
+ simple_user_service_1.SimpleUserService,
44
+ send_code_service_1.SendCodeService,
45
+ resolver_1.userResolverProvider.provider,
46
+ resolver_1.userRiskControlResolverProvider.provider,
47
+ ],
48
+ exports: [simple_user_service_1.SimpleUserService],
49
+ controllers: [send_code_controller_1.SendCodeController, login_controller_1.LoginController, user_center_controller_1.UserCenterController],
50
+ })
51
+ ], SimpleUserModule);
52
+ //# sourceMappingURL=simple-user.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-user.module.js","sourceRoot":"","sources":["../../src/simple-user/simple-user.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAuD;AACvD,qDAA2D;AAC3D,iDAAyD;AACzD,2EAAsE;AACtE,qEAAgE;AAChE,2EAAsE;AACtE,+DAA2D;AAC3D,iFAA4E;AAC5E,yCAGoB;AACpB,qCAA0C;AAE1C,qDAAqE;AAUrE,MAAM,4CAA4C,GAAG,CACnD,MAAqB,EACrB,EAAE;IACF,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAC3C,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,uBAAc,CAClC,CAAC;IACnB,IAAI,cAAc,EAAE,QAAQ,EAAE,CAAC;QAC7B,IAAA,sCAA2B,EAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC;AAYK,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,wCAAuB;IAC3D,MAAM,CAAC,QAAQ,CAAC,OAAkC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrC,4CAA4C,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,IAAA,sCAAuB,EAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,OAAuC;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,4CAA4C,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,IAAA,sCAAuB,EAAC,IAAI,CAAC,CAAC;IACvC,CAAC;CACF,CAAA;AAZY,4CAAgB;2BAAhB,gBAAgB;IAV5B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,uCAAiB;YACjB,mCAAe;YACf,+BAAoB,CAAC,QAAQ;YAC7B,0CAA+B,CAAC,QAAQ;SACzC;QACD,OAAO,EAAE,CAAC,uCAAiB,CAAC;QAC5B,WAAW,EAAE,CAAC,yCAAkB,EAAE,kCAAe,EAAE,6CAAoB,CAAC;KACzE,CAAC;GACW,gBAAgB,CAY5B"}
@@ -0,0 +1,2 @@
1
+ export declare const OptionsExToken: unique symbol;
2
+ export declare const UserRepoToken: unique symbol;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserRepoToken = exports.OptionsExToken = void 0;
4
+ exports.OptionsExToken = Symbol('OptionsExToken');
5
+ exports.UserRepoToken = Symbol('UserRepoToken');
6
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/simple-user/tokens.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC1C,QAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { SimpleUserExtraOptions } from '../options';
2
+ export declare const patchUserCenterControllerMe: (extras: SimpleUserExtraOptions) => void;