@hed-hog/core 0.0.109 → 0.0.111
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.
- package/dist/mail/mail.service.d.ts.map +1 -1
- package/dist/mail/mail.service.js +0 -14
- package/dist/mail/mail.service.js.map +1 -1
- package/dist/session/session.service.d.ts +8 -0
- package/dist/session/session.service.d.ts.map +1 -1
- package/dist/session/session.service.js +48 -1
- package/dist/session/session.service.js.map +1 -1
- package/dist/task/task.service.d.ts +3 -1
- package/dist/task/task.service.d.ts.map +1 -1
- package/dist/task/task.service.js +28 -15
- package/dist/task/task.service.js.map +1 -1
- package/hedhog/data/setting_group.yaml +43 -0
- package/package.json +2 -2
- package/src/mail/mail.service.ts +0 -17
- package/src/session/session.service.ts +53 -1
- package/src/task/task.service.ts +28 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail.service.d.ts","sourceRoot":"","sources":["../../src/mail/mail.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,qBACa,WAAW;IAMpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAIjB,aAAa,EAAE,aAAa,EAE5B,eAAe,EAAE,eAAe,EAEhC,aAAa,EAAE,aAAa,EAE5B,OAAO,EAAE,cAAc;IAG1C;;OAEG;IACG,YAAY;;;;IA8EZ,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa;;;;;;;;;IAuCpD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;IAqC9B,MAAM,CAAC,IAAI,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;IAqCtB,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;IA+EpD,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAetD,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"mail.service.d.ts","sourceRoot":"","sources":["../../src/mail/mail.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,qBACa,WAAW;IAMpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAIjB,aAAa,EAAE,aAAa,EAE5B,eAAe,EAAE,eAAe,EAEhC,aAAa,EAAE,aAAa,EAE5B,OAAO,EAAE,cAAc;IAG1C;;OAEG;IACG,YAAY;;;;IA8EZ,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa;;;;;;;;;IAuCpD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;IAqC9B,MAAM,CAAC,IAAI,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;IAqCtB,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;IA+EpD,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAetD,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,oBAAoB;YAmCpC,eAAe;YAYf,eAAe;IAqB7B,OAAO,CAAC,mBAAmB;IAerB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EACjC,IAAI,EACJ,KAAK,EACL,OAAO,EACP,IAAI,EACJ,SAAS,GACV,EAAE,WAAW;IAiCR,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS;;;;;;;;;;;CAwGrD"}
|
|
@@ -321,9 +321,6 @@ let MailService = MailService_1 = class MailService {
|
|
|
321
321
|
'configured-mail',
|
|
322
322
|
'mail-from'
|
|
323
323
|
]);
|
|
324
|
-
console.log({
|
|
325
|
-
settings
|
|
326
|
-
});
|
|
327
324
|
if (!settings['configured-mail']) {
|
|
328
325
|
this.logger.warn('Mail service is not configured. Aborting sending email.');
|
|
329
326
|
return;
|
|
@@ -391,20 +388,9 @@ let MailService = MailService_1 = class MailService {
|
|
|
391
388
|
'configured-mail',
|
|
392
389
|
'mail-from'
|
|
393
390
|
]);
|
|
394
|
-
console.log({
|
|
395
|
-
settings
|
|
396
|
-
});
|
|
397
391
|
if (!settings['configured-mail']) {
|
|
398
392
|
throw new common_1.BadRequestException('Mail service is not configured.');
|
|
399
393
|
}
|
|
400
|
-
console.log('sendTestMail data:', {
|
|
401
|
-
slug,
|
|
402
|
-
email,
|
|
403
|
-
subject,
|
|
404
|
-
body,
|
|
405
|
-
variables,
|
|
406
|
-
settings
|
|
407
|
-
});
|
|
408
394
|
try {
|
|
409
395
|
const parsedSubject = variables
|
|
410
396
|
? this.interpolateTemplate(subject, variables)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail.service.js","sourceRoot":"","sources":["../../src/mail/mail.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mail.service.js","sourceRoot":"","sources":["../../src/mail/mail.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,5 +65,13 @@ export declare class SessionService {
|
|
|
65
65
|
ip_address: string;
|
|
66
66
|
user_agent: string;
|
|
67
67
|
}>;
|
|
68
|
+
/**
|
|
69
|
+
* Enforce maximum concurrent sessions limit for a user.
|
|
70
|
+
* If the limit is reached, expires the oldest sessions to make room for new ones.
|
|
71
|
+
*
|
|
72
|
+
* @param userId - The user ID to check
|
|
73
|
+
* @param maxSessions - Maximum number of concurrent sessions allowed
|
|
74
|
+
*/
|
|
75
|
+
private enforceSessionLimit;
|
|
68
76
|
}
|
|
69
77
|
//# sourceMappingURL=session.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.service.d.ts","sourceRoot":"","sources":["../../src/session/session.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAanD,qBACa,cAAc;IAGvB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAErB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAErB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAZ1B,MAAM,EAAE,aAAa,EAErB,QAAQ,EAAE,eAAe,EAEhB,OAAO,EAAE,cAAc,EAEvB,KAAK,EAAE,YAAY,EAEnB,IAAI,EAAE,WAAW,EAEjB,IAAI,EAAE,WAAW,EAEjB,iBAAiB,EAAE,iBAAiB;IAGjD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"session.service.d.ts","sourceRoot":"","sources":["../../src/session/session.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAanD,qBACa,cAAc;IAGvB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAErB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAErB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAZ1B,MAAM,EAAE,aAAa,EAErB,QAAQ,EAAE,eAAe,EAEhB,OAAO,EAAE,cAAc,EAEvB,KAAK,EAAE,YAAY,EAEnB,IAAI,EAAE,WAAW,EAEjB,IAAI,EAAE,WAAW,EAEjB,iBAAiB,EAAE,iBAAiB;IAGjD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;IAsC3E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;IAwBlF,wBAAwB,CAAC,GAAG,KAAA,EAAE,YAAY,EAAE,MAAM;IAclD,eAAe,CAAC,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM;;;;;;;YAoCvD,YAAY;YAmBZ,mBAAmB;IAQ3B,sBAAsB,CAAC,MAAM,EAAE,MAAM;IAWrC,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAIhC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;IAazD;;;;;;OAMG;YACW,mBAAmB;CAsClC"}
|
|
@@ -44,10 +44,15 @@ let SessionService = class SessionService {
|
|
|
44
44
|
throw new common_1.BadRequestException((0, api_locale_1.getLocaleText)('session.userAgentRequired', locale, 'User agent is required to create a session.'));
|
|
45
45
|
}
|
|
46
46
|
const settings = await this.setting.getSettingValues([
|
|
47
|
-
'refresh-token-expiration-minutes'
|
|
47
|
+
'refresh-token-expiration-minutes',
|
|
48
|
+
'max-concurrent-sessions'
|
|
48
49
|
]);
|
|
49
50
|
const token = await this.token.createOpaqueToken();
|
|
50
51
|
const hash = this.security.hashWithPepper(token);
|
|
52
|
+
const maxSessions = Number(settings['max-concurrent-sessions']) || 0;
|
|
53
|
+
if (maxSessions > 0) {
|
|
54
|
+
await this.enforceSessionLimit(userId, maxSessions);
|
|
55
|
+
}
|
|
51
56
|
const session = await this.prisma.user_session.create({
|
|
52
57
|
data: {
|
|
53
58
|
user_id: userId,
|
|
@@ -175,6 +180,48 @@ let SessionService = class SessionService {
|
|
|
175
180
|
}
|
|
176
181
|
});
|
|
177
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Enforce maximum concurrent sessions limit for a user.
|
|
185
|
+
* If the limit is reached, expires the oldest sessions to make room for new ones.
|
|
186
|
+
*
|
|
187
|
+
* @param userId - The user ID to check
|
|
188
|
+
* @param maxSessions - Maximum number of concurrent sessions allowed
|
|
189
|
+
*/
|
|
190
|
+
async enforceSessionLimit(userId, maxSessions) {
|
|
191
|
+
// Count active sessions for this user
|
|
192
|
+
const activeSessions = await this.prisma.user_session.findMany({
|
|
193
|
+
where: {
|
|
194
|
+
user_id: userId,
|
|
195
|
+
revoked_at: null,
|
|
196
|
+
expires_at: {
|
|
197
|
+
gt: new Date()
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
orderBy: {
|
|
201
|
+
created_at: 'asc'
|
|
202
|
+
},
|
|
203
|
+
select: {
|
|
204
|
+
id: true
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
// If we're at or over the limit, expire the oldest sessions
|
|
208
|
+
const sessionsToExpire = activeSessions.length - maxSessions + 1;
|
|
209
|
+
if (sessionsToExpire > 0) {
|
|
210
|
+
const sessionIdsToExpire = activeSessions
|
|
211
|
+
.slice(0, sessionsToExpire)
|
|
212
|
+
.map(s => s.id);
|
|
213
|
+
await this.prisma.user_session.updateMany({
|
|
214
|
+
where: {
|
|
215
|
+
id: {
|
|
216
|
+
in: sessionIdsToExpire
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
data: {
|
|
220
|
+
expires_at: new Date() // Expire immediately
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
178
225
|
};
|
|
179
226
|
exports.SessionService = SessionService;
|
|
180
227
|
exports.SessionService = SessionService = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.service.js","sourceRoot":"","sources":["../../src/session/session.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAAoD;AACpD,4DAA2E;AAC3E,oDAAoD;AACpD,yCAA4C;AAC5C,2CAAgH;AAChH,+BAAsC;AACtC,mEAA+D;AAC/D,gEAA4D;AAC5D,0DAAsD;AACtD,uDAAmD;AAc5C,IAAM,cAAc,GAApB,MAAM,cAAc;IAEzB,YACU,MAAqB,EAErB,QAAyB,EAEhB,OAAuB,EAEvB,KAAmB,EAEnB,IAAiB,EAEjB,IAAiB,EAEjB,iBAAoC;QAZ7C,WAAM,GAAN,MAAM,CAAe;QAErB,aAAQ,GAAR,QAAQ,CAAiB;QAEhB,YAAO,GAAP,OAAO,CAAgB;QAEvB,UAAK,GAAL,KAAK,CAAc;QAEnB,SAAI,GAAJ,IAAI,CAAa;QAEjB,SAAI,GAAJ,IAAI,CAAa;QAEjB,sBAAiB,GAAjB,iBAAiB,CAAmB;IACnD,CAAC;IAEL,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAc,EAAE,SAAiB,EAAE,SAAiB;QAC/E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,4BAAmB,CAAC,IAAA,0BAAa,EAAC,wBAAwB,EAAE,MAAM,EAAE,0CAA0C,CAAC,CAAC,CAAC;QAC7H,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,4BAAmB,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,MAAM,EAAE,6CAA6C,CAAC,CAAC,CAAC;QACnI,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,4BAAmB,CAAC,IAAA,0BAAa,EAAC,2BAA2B,EAAE,MAAM,EAAE,6CAA6C,CAAC,CAAC,CAAC;QACnI,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACnD,kCAAkC;
|
|
1
|
+
{"version":3,"file":"session.service.js","sourceRoot":"","sources":["../../src/session/session.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { PrismaService } from '@hed-hog/api-prisma';
|
|
2
|
+
import { SettingService } from '../setting/setting.service';
|
|
2
3
|
export declare class TasksService {
|
|
3
4
|
private readonly prismaService;
|
|
5
|
+
private readonly settingService;
|
|
4
6
|
private readonly logger;
|
|
5
|
-
constructor(prismaService: PrismaService);
|
|
7
|
+
constructor(prismaService: PrismaService, settingService: SettingService);
|
|
6
8
|
/**
|
|
7
9
|
* Executa todas as tarefas de limpeza do banco de dados diariamente à meia-noite.
|
|
8
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.service.d.ts","sourceRoot":"","sources":["../../src/task/task.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,qBACa,YAAY;
|
|
1
|
+
{"version":3,"file":"task.service.d.ts","sourceRoot":"","sources":["../../src/task/task.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,qBACa,YAAY;IAIrB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;gBAGrC,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAGjD;;;;;OAKG;IAEG,KAAK;IAqBX;;;;;;;;;;;;OAYG;YACW,yBAAyB;IAyBvC;;;;;;;;;;;;;OAaG;YACW,oBAAoB;IA0BlC;;;;;;;;;;;;;;;;;OAiBG;YACW,oCAAoC;IAgClD;;;;;;;;;;;;;;;;;;;;OAoBG;YACW,uCAAuC;CAoCtD"}
|
|
@@ -14,9 +14,12 @@ exports.TasksService = void 0;
|
|
|
14
14
|
const api_prisma_1 = require("@hed-hog/api-prisma");
|
|
15
15
|
const common_1 = require("@nestjs/common");
|
|
16
16
|
const schedule_1 = require("@nestjs/schedule");
|
|
17
|
+
const client_1 = require("@prisma/client");
|
|
18
|
+
const setting_service_1 = require("../setting/setting.service");
|
|
17
19
|
let TasksService = TasksService_1 = class TasksService {
|
|
18
|
-
constructor(prismaService) {
|
|
20
|
+
constructor(prismaService, settingService) {
|
|
19
21
|
this.prismaService = prismaService;
|
|
22
|
+
this.settingService = settingService;
|
|
20
23
|
this.logger = new common_1.Logger(TasksService_1.name);
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
@@ -54,20 +57,22 @@ let TasksService = TasksService_1 = class TasksService {
|
|
|
54
57
|
* Limite: 20.000 registros por execução para evitar lock prolongado da tabela.
|
|
55
58
|
*/
|
|
56
59
|
async clearExpiredMfaChallenges() {
|
|
60
|
+
const settings = await this.settingService.getSettingValues(['cleanup-batch-limit']);
|
|
61
|
+
const batchLimit = Number(settings['cleanup-batch-limit']) || 20000;
|
|
57
62
|
this.logger.verbose('Starting cleanup of expired/verified MFA challenges');
|
|
58
63
|
const startAt = Date.now();
|
|
59
|
-
await this.prismaService.$
|
|
64
|
+
await this.prismaService.$executeRaw `
|
|
60
65
|
WITH del AS (
|
|
61
66
|
SELECT user_mfa_id
|
|
62
67
|
FROM user_mfa_challenge
|
|
63
68
|
WHERE expires_at < now()
|
|
64
69
|
OR verified_at IS NOT NULL
|
|
65
70
|
ORDER BY user_mfa_id
|
|
66
|
-
LIMIT
|
|
71
|
+
LIMIT ${batchLimit}
|
|
67
72
|
)
|
|
68
73
|
DELETE FROM user_mfa_challenge c
|
|
69
74
|
USING del
|
|
70
|
-
WHERE c.user_mfa_id = del.user_mfa_id
|
|
75
|
+
WHERE c.user_mfa_id = del.user_mfa_id
|
|
71
76
|
`;
|
|
72
77
|
this.logger.verbose(`Expired/verified MFA challenges cleaned up in ${Date.now() - startAt}ms`);
|
|
73
78
|
}
|
|
@@ -86,20 +91,23 @@ let TasksService = TasksService_1 = class TasksService {
|
|
|
86
91
|
* Limite: 20.000 registros por execução para evitar lock prolongado da tabela.
|
|
87
92
|
*/
|
|
88
93
|
async clearExpiredSessions() {
|
|
94
|
+
const settings = await this.settingService.getSettingValues(['cleanup-batch-limit', 'session-retention-days']);
|
|
95
|
+
const batchLimit = Number(settings['cleanup-batch-limit']) || 20000;
|
|
96
|
+
const retentionDays = Number(settings['session-retention-days']) || 90;
|
|
89
97
|
this.logger.verbose('Starting cleanup of expired sessions');
|
|
90
98
|
const startAt = Date.now();
|
|
91
|
-
await this.prismaService.$
|
|
99
|
+
await this.prismaService.$executeRaw `
|
|
92
100
|
WITH del AS (
|
|
93
101
|
SELECT id
|
|
94
102
|
FROM user_session
|
|
95
103
|
WHERE expires_at < now()
|
|
96
|
-
AND created_at < (now() -
|
|
104
|
+
AND created_at < (now() - ${client_1.Prisma.sql `INTERVAL '${client_1.Prisma.raw(String(retentionDays))} days'`})
|
|
97
105
|
ORDER BY id
|
|
98
|
-
LIMIT
|
|
106
|
+
LIMIT ${batchLimit}
|
|
99
107
|
)
|
|
100
108
|
DELETE FROM user_session s
|
|
101
109
|
USING del
|
|
102
|
-
WHERE s.id = del.id
|
|
110
|
+
WHERE s.id = del.id
|
|
103
111
|
`;
|
|
104
112
|
this.logger.verbose(`Expired sessions cleaned up in ${Date.now() - startAt}ms`);
|
|
105
113
|
}
|
|
@@ -122,15 +130,17 @@ let TasksService = TasksService_1 = class TasksService {
|
|
|
122
130
|
* Limite: 20.000 registros por execução para evitar lock prolongado das tabelas.
|
|
123
131
|
*/
|
|
124
132
|
async clearExpiredUserIdentifierChallenges() {
|
|
133
|
+
const settings = await this.settingService.getSettingValues(['cleanup-batch-limit']);
|
|
134
|
+
const batchLimit = Number(settings['cleanup-batch-limit']) || 20000;
|
|
125
135
|
this.logger.verbose('Starting cleanup of expired user identifier challenges');
|
|
126
136
|
const startAt = Date.now();
|
|
127
|
-
await this.prismaService.$
|
|
137
|
+
await this.prismaService.$executeRaw `
|
|
128
138
|
WITH expired_challenges AS (
|
|
129
139
|
SELECT user_identifier_id
|
|
130
140
|
FROM user_identifier_challenge
|
|
131
141
|
WHERE expires_at < now() AND verified_at IS NULL
|
|
132
142
|
ORDER BY user_identifier_id
|
|
133
|
-
LIMIT
|
|
143
|
+
LIMIT ${batchLimit}
|
|
134
144
|
),
|
|
135
145
|
deleted_challenges AS (
|
|
136
146
|
DELETE FROM user_identifier_challenge c
|
|
@@ -142,7 +152,7 @@ let TasksService = TasksService_1 = class TasksService {
|
|
|
142
152
|
DELETE FROM user_identifier ui
|
|
143
153
|
USING deleted_challenges
|
|
144
154
|
WHERE ui.id = deleted_challenges.user_identifier_id
|
|
145
|
-
AND ui.verified_at IS NULL
|
|
155
|
+
AND ui.verified_at IS NULL
|
|
146
156
|
`;
|
|
147
157
|
this.logger.verbose(`Expired user identifier challenges and unverified identifiers cleaned up in ${Date.now() - startAt}ms`);
|
|
148
158
|
}
|
|
@@ -168,9 +178,11 @@ let TasksService = TasksService_1 = class TasksService {
|
|
|
168
178
|
* Limite: 20.000 registros por execução para evitar lock prolongado das tabelas.
|
|
169
179
|
*/
|
|
170
180
|
async clearUnverifiedMfaWithExpiredChallenges() {
|
|
181
|
+
const settings = await this.settingService.getSettingValues(['cleanup-batch-limit']);
|
|
182
|
+
const batchLimit = Number(settings['cleanup-batch-limit']) || 20000;
|
|
171
183
|
this.logger.verbose('Starting cleanup of unverified MFA with expired challenges');
|
|
172
184
|
const startAt = Date.now();
|
|
173
|
-
await this.prismaService.$
|
|
185
|
+
await this.prismaService.$executeRaw `
|
|
174
186
|
WITH unverified_mfa AS (
|
|
175
187
|
SELECT um.id
|
|
176
188
|
FROM user_mfa um
|
|
@@ -181,7 +193,7 @@ let TasksService = TasksService_1 = class TasksService {
|
|
|
181
193
|
WHERE umc.user_mfa_id = um.id
|
|
182
194
|
AND umc.expires_at >= now()
|
|
183
195
|
)
|
|
184
|
-
LIMIT
|
|
196
|
+
LIMIT ${batchLimit}
|
|
185
197
|
),
|
|
186
198
|
deleted_challenges AS (
|
|
187
199
|
DELETE FROM user_mfa_challenge umc
|
|
@@ -191,7 +203,7 @@ let TasksService = TasksService_1 = class TasksService {
|
|
|
191
203
|
)
|
|
192
204
|
DELETE FROM user_mfa um
|
|
193
205
|
USING unverified_mfa
|
|
194
|
-
WHERE um.id = unverified_mfa.id
|
|
206
|
+
WHERE um.id = unverified_mfa.id
|
|
195
207
|
`;
|
|
196
208
|
this.logger.verbose(`Unverified MFA with expired challenges cleaned up in ${Date.now() - startAt}ms`);
|
|
197
209
|
}
|
|
@@ -205,6 +217,7 @@ __decorate([
|
|
|
205
217
|
], TasksService.prototype, "clear", null);
|
|
206
218
|
exports.TasksService = TasksService = TasksService_1 = __decorate([
|
|
207
219
|
(0, common_1.Injectable)(),
|
|
208
|
-
__metadata("design:paramtypes", [api_prisma_1.PrismaService
|
|
220
|
+
__metadata("design:paramtypes", [api_prisma_1.PrismaService,
|
|
221
|
+
setting_service_1.SettingService])
|
|
209
222
|
], TasksService);
|
|
210
223
|
//# sourceMappingURL=task.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.service.js","sourceRoot":"","sources":["../../src/task/task.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,oDAAoD;AACpD,2CAAoD;AACpD,+CAAwD;
|
|
1
|
+
{"version":3,"file":"task.service.js","sourceRoot":"","sources":["../../src/task/task.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,oDAAoD;AACpD,2CAAoD;AACpD,+CAAwD;AACxD,2CAAwC;AACxC,gEAA4D;AAGrD,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAGvB,YACmB,aAA4B,EAC5B,cAA8B;QAD9B,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAJhC,WAAM,GAAG,IAAI,eAAM,CAAC,cAAY,CAAC,IAAI,CAAC,CAAC;IAKrD,CAAC;IAEJ;;;;;OAKG;IAEG,AAAN,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAE1D,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAE1D,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAE1D,MAAM,IAAI,CAAC,oCAAoC,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAE1D,MAAM,IAAI,CAAC,uCAAuC,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAE1D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,KAAK,CAAC,yBAAyB;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,IAAI,KAAK,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3B,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAA;;;;;;;gBAOxB,UAAU;;;;;KAKrB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,iDAAiD,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,CAC1E,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,KAAK,CAAC,oBAAoB;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAC/G,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,IAAI,KAAK,CAAC;QACpE,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3B,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAA;;;;;sCAKF,eAAM,CAAC,GAAG,CAAA,aAAa,eAAM,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ;;gBAEtF,UAAU;;;;;KAKrB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,kCAAkC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,CAC3D,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACK,KAAK,CAAC,oCAAoC;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,IAAI,KAAK,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3B,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAA;;;;;;gBAMxB,UAAU;;;;;;;;;;;;;KAarB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,+EAA+E,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,CACxG,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACK,KAAK,CAAC,uCAAuC;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,IAAI,KAAK,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,4DAA4D,CAC7D,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3B,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAA;;;;;;;;;;;gBAWxB,UAAU;;;;;;;;;;;KAWrB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,wDAAwD,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,CACjF,CAAC;IACJ,CAAC;CACF,CAAA;AA7NY,oCAAY;AAejB;IADL,IAAA,eAAI,EAAC,yBAAc,CAAC,qBAAqB,CAAC;;;;yCAoB1C;uBAlCU,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAKuB,0BAAa;QACZ,gCAAc;GALtC,YAAY,CA6NxB"}
|
|
@@ -28,6 +28,38 @@
|
|
|
28
28
|
pt: A URL da API do sistema
|
|
29
29
|
value: http://localhost:3100
|
|
30
30
|
user_override: false
|
|
31
|
+
- slug: maintenance
|
|
32
|
+
icon: database-cog
|
|
33
|
+
name:
|
|
34
|
+
en: Maintenance
|
|
35
|
+
pt: Manutenção
|
|
36
|
+
description:
|
|
37
|
+
en: Database maintenance and cleanup settings.
|
|
38
|
+
pt: Configurações de manutenção e limpeza do banco de dados.
|
|
39
|
+
relations:
|
|
40
|
+
setting:
|
|
41
|
+
- slug: cleanup-batch-limit
|
|
42
|
+
type: number
|
|
43
|
+
component: input-number
|
|
44
|
+
name:
|
|
45
|
+
en: Cleanup Batch Limit
|
|
46
|
+
pt: Limite de Lote de Limpeza
|
|
47
|
+
description:
|
|
48
|
+
en: Maximum number of records to delete per cleanup task execution to avoid long table locks
|
|
49
|
+
pt: Número máximo de registros a deletar por execução de tarefa de limpeza para evitar locks prolongados da tabela
|
|
50
|
+
value: 20000
|
|
51
|
+
user_override: false
|
|
52
|
+
- slug: session-retention-days
|
|
53
|
+
type: number
|
|
54
|
+
component: input-number
|
|
55
|
+
name:
|
|
56
|
+
en: Session Retention Days
|
|
57
|
+
pt: Dias de Retenção de Sessão
|
|
58
|
+
description:
|
|
59
|
+
en: Number of days to retain expired sessions before permanent deletion for audit purposes
|
|
60
|
+
pt: Número de dias para reter sessões expiradas antes da exclusão permanente para fins de auditoria
|
|
61
|
+
value: 90
|
|
62
|
+
user_override: false
|
|
31
63
|
- slug: authentication
|
|
32
64
|
icon: lock-password
|
|
33
65
|
name:
|
|
@@ -194,6 +226,17 @@
|
|
|
194
226
|
en: The length of the multifactor authentication email code
|
|
195
227
|
pt: O comprimento do código de email de autenticação multifatorial
|
|
196
228
|
value: 6
|
|
229
|
+
- slug: max-concurrent-sessions
|
|
230
|
+
type: number
|
|
231
|
+
component: input-number
|
|
232
|
+
name:
|
|
233
|
+
en: Max Concurrent Sessions
|
|
234
|
+
pt: Máximo de Sessões Simultâneas
|
|
235
|
+
description:
|
|
236
|
+
en: Maximum number of active sessions per user. Set to 0 for unlimited sessions. When limit is reached, oldest sessions will be expired automatically.
|
|
237
|
+
pt: Número máximo de sessões ativas por usuário. Defina como 0 para sessões ilimitadas. Quando o limite for atingido, as sessões mais antigas serão expiradas automaticamente.
|
|
238
|
+
value: 0
|
|
239
|
+
user_override: false
|
|
197
240
|
- slug: localization
|
|
198
241
|
icon: world
|
|
199
242
|
name:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hed-hog/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.111",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"dependencies": {
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"uuid": "^11.1.0",
|
|
32
32
|
"@hed-hog/types": "0.0.1",
|
|
33
33
|
"@hed-hog/api-pagination": "0.0.4",
|
|
34
|
-
"@hed-hog/api": "0.0.3",
|
|
35
34
|
"@hed-hog/api-mail": "0.0.7",
|
|
35
|
+
"@hed-hog/api": "0.0.3",
|
|
36
36
|
"@hed-hog/api-prisma": "0.0.4",
|
|
37
37
|
"@hed-hog/api-locale": "0.0.10"
|
|
38
38
|
},
|
package/src/mail/mail.service.ts
CHANGED
|
@@ -332,10 +332,6 @@ export class MailService {
|
|
|
332
332
|
'mail-from'
|
|
333
333
|
]);
|
|
334
334
|
|
|
335
|
-
console.log({
|
|
336
|
-
settings
|
|
337
|
-
})
|
|
338
|
-
|
|
339
335
|
if (!settings['configured-mail']) {
|
|
340
336
|
this.logger.warn('Mail service is not configured. Aborting sending email.');
|
|
341
337
|
return;
|
|
@@ -425,23 +421,10 @@ export class MailService {
|
|
|
425
421
|
'mail-from'
|
|
426
422
|
]);
|
|
427
423
|
|
|
428
|
-
console.log({
|
|
429
|
-
settings
|
|
430
|
-
})
|
|
431
|
-
|
|
432
424
|
if (!settings['configured-mail']) {
|
|
433
425
|
throw new BadRequestException('Mail service is not configured.');
|
|
434
426
|
}
|
|
435
427
|
|
|
436
|
-
console.log('sendTestMail data:', {
|
|
437
|
-
slug,
|
|
438
|
-
email,
|
|
439
|
-
subject,
|
|
440
|
-
body,
|
|
441
|
-
variables,
|
|
442
|
-
settings
|
|
443
|
-
})
|
|
444
|
-
|
|
445
428
|
try {
|
|
446
429
|
const parsedSubject = variables
|
|
447
430
|
? this.interpolateTemplate(subject, variables)
|
|
@@ -53,10 +53,17 @@ export class SessionService {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
const settings = await this.setting.getSettingValues([
|
|
56
|
-
'refresh-token-expiration-minutes'
|
|
56
|
+
'refresh-token-expiration-minutes',
|
|
57
|
+
'max-concurrent-sessions'
|
|
57
58
|
]);
|
|
58
59
|
const token = await this.token.createOpaqueToken();
|
|
59
60
|
const hash = this.security.hashWithPepper(token)
|
|
61
|
+
const maxSessions = Number(settings['max-concurrent-sessions']) || 0;
|
|
62
|
+
|
|
63
|
+
if (maxSessions > 0) {
|
|
64
|
+
await this.enforceSessionLimit(userId, maxSessions);
|
|
65
|
+
}
|
|
66
|
+
|
|
60
67
|
const session = await this.prisma.user_session.create({
|
|
61
68
|
data: {
|
|
62
69
|
user_id: userId,
|
|
@@ -199,4 +206,49 @@ export class SessionService {
|
|
|
199
206
|
})
|
|
200
207
|
}
|
|
201
208
|
|
|
209
|
+
/**
|
|
210
|
+
* Enforce maximum concurrent sessions limit for a user.
|
|
211
|
+
* If the limit is reached, expires the oldest sessions to make room for new ones.
|
|
212
|
+
*
|
|
213
|
+
* @param userId - The user ID to check
|
|
214
|
+
* @param maxSessions - Maximum number of concurrent sessions allowed
|
|
215
|
+
*/
|
|
216
|
+
private async enforceSessionLimit(userId: number, maxSessions: number): Promise<void> {
|
|
217
|
+
// Count active sessions for this user
|
|
218
|
+
const activeSessions = await this.prisma.user_session.findMany({
|
|
219
|
+
where: {
|
|
220
|
+
user_id: userId,
|
|
221
|
+
revoked_at: null,
|
|
222
|
+
expires_at: {
|
|
223
|
+
gt: new Date()
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
orderBy: {
|
|
227
|
+
created_at: 'asc'
|
|
228
|
+
},
|
|
229
|
+
select: {
|
|
230
|
+
id: true
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// If we're at or over the limit, expire the oldest sessions
|
|
235
|
+
const sessionsToExpire = activeSessions.length - maxSessions + 1;
|
|
236
|
+
if (sessionsToExpire > 0) {
|
|
237
|
+
const sessionIdsToExpire = activeSessions
|
|
238
|
+
.slice(0, sessionsToExpire)
|
|
239
|
+
.map(s => s.id);
|
|
240
|
+
|
|
241
|
+
await this.prisma.user_session.updateMany({
|
|
242
|
+
where: {
|
|
243
|
+
id: {
|
|
244
|
+
in: sessionIdsToExpire
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
data: {
|
|
248
|
+
expires_at: new Date() // Expire immediately
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
202
254
|
}
|
package/src/task/task.service.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { PrismaService } from '@hed-hog/api-prisma';
|
|
2
2
|
import { Injectable, Logger } from '@nestjs/common';
|
|
3
3
|
import { Cron, CronExpression } from '@nestjs/schedule';
|
|
4
|
+
import { Prisma } from '@prisma/client';
|
|
5
|
+
import { SettingService } from '../setting/setting.service';
|
|
4
6
|
|
|
5
7
|
@Injectable()
|
|
6
8
|
export class TasksService {
|
|
7
9
|
private readonly logger = new Logger(TasksService.name);
|
|
8
10
|
|
|
9
|
-
constructor(
|
|
11
|
+
constructor(
|
|
12
|
+
private readonly prismaService: PrismaService,
|
|
13
|
+
private readonly settingService: SettingService,
|
|
14
|
+
) {}
|
|
10
15
|
|
|
11
16
|
/**
|
|
12
17
|
* Executa todas as tarefas de limpeza do banco de dados diariamente à meia-noite.
|
|
@@ -50,21 +55,23 @@ export class TasksService {
|
|
|
50
55
|
* Limite: 20.000 registros por execução para evitar lock prolongado da tabela.
|
|
51
56
|
*/
|
|
52
57
|
private async clearExpiredMfaChallenges(): Promise<void> {
|
|
58
|
+
const settings = await this.settingService.getSettingValues(['cleanup-batch-limit']);
|
|
59
|
+
const batchLimit = Number(settings['cleanup-batch-limit']) || 20000;
|
|
53
60
|
this.logger.verbose('Starting cleanup of expired/verified MFA challenges');
|
|
54
61
|
const startAt = Date.now();
|
|
55
62
|
|
|
56
|
-
await this.prismaService.$
|
|
63
|
+
await this.prismaService.$executeRaw`
|
|
57
64
|
WITH del AS (
|
|
58
65
|
SELECT user_mfa_id
|
|
59
66
|
FROM user_mfa_challenge
|
|
60
67
|
WHERE expires_at < now()
|
|
61
68
|
OR verified_at IS NOT NULL
|
|
62
69
|
ORDER BY user_mfa_id
|
|
63
|
-
LIMIT
|
|
70
|
+
LIMIT ${batchLimit}
|
|
64
71
|
)
|
|
65
72
|
DELETE FROM user_mfa_challenge c
|
|
66
73
|
USING del
|
|
67
|
-
WHERE c.user_mfa_id = del.user_mfa_id
|
|
74
|
+
WHERE c.user_mfa_id = del.user_mfa_id
|
|
68
75
|
`;
|
|
69
76
|
|
|
70
77
|
this.logger.verbose(
|
|
@@ -87,21 +94,24 @@ export class TasksService {
|
|
|
87
94
|
* Limite: 20.000 registros por execução para evitar lock prolongado da tabela.
|
|
88
95
|
*/
|
|
89
96
|
private async clearExpiredSessions(): Promise<void> {
|
|
97
|
+
const settings = await this.settingService.getSettingValues(['cleanup-batch-limit', 'session-retention-days']);
|
|
98
|
+
const batchLimit = Number(settings['cleanup-batch-limit']) || 20000;
|
|
99
|
+
const retentionDays = Number(settings['session-retention-days']) || 90;
|
|
90
100
|
this.logger.verbose('Starting cleanup of expired sessions');
|
|
91
101
|
const startAt = Date.now();
|
|
92
102
|
|
|
93
|
-
await this.prismaService.$
|
|
103
|
+
await this.prismaService.$executeRaw`
|
|
94
104
|
WITH del AS (
|
|
95
105
|
SELECT id
|
|
96
106
|
FROM user_session
|
|
97
107
|
WHERE expires_at < now()
|
|
98
|
-
AND created_at < (now() -
|
|
108
|
+
AND created_at < (now() - ${Prisma.sql`INTERVAL '${Prisma.raw(String(retentionDays))} days'`})
|
|
99
109
|
ORDER BY id
|
|
100
|
-
LIMIT
|
|
110
|
+
LIMIT ${batchLimit}
|
|
101
111
|
)
|
|
102
112
|
DELETE FROM user_session s
|
|
103
113
|
USING del
|
|
104
|
-
WHERE s.id = del.id
|
|
114
|
+
WHERE s.id = del.id
|
|
105
115
|
`;
|
|
106
116
|
|
|
107
117
|
this.logger.verbose(
|
|
@@ -128,16 +138,18 @@ export class TasksService {
|
|
|
128
138
|
* Limite: 20.000 registros por execução para evitar lock prolongado das tabelas.
|
|
129
139
|
*/
|
|
130
140
|
private async clearExpiredUserIdentifierChallenges(): Promise<void> {
|
|
141
|
+
const settings = await this.settingService.getSettingValues(['cleanup-batch-limit']);
|
|
142
|
+
const batchLimit = Number(settings['cleanup-batch-limit']) || 20000;
|
|
131
143
|
this.logger.verbose('Starting cleanup of expired user identifier challenges');
|
|
132
144
|
const startAt = Date.now();
|
|
133
145
|
|
|
134
|
-
await this.prismaService.$
|
|
146
|
+
await this.prismaService.$executeRaw`
|
|
135
147
|
WITH expired_challenges AS (
|
|
136
148
|
SELECT user_identifier_id
|
|
137
149
|
FROM user_identifier_challenge
|
|
138
150
|
WHERE expires_at < now() AND verified_at IS NULL
|
|
139
151
|
ORDER BY user_identifier_id
|
|
140
|
-
LIMIT
|
|
152
|
+
LIMIT ${batchLimit}
|
|
141
153
|
),
|
|
142
154
|
deleted_challenges AS (
|
|
143
155
|
DELETE FROM user_identifier_challenge c
|
|
@@ -149,7 +161,7 @@ export class TasksService {
|
|
|
149
161
|
DELETE FROM user_identifier ui
|
|
150
162
|
USING deleted_challenges
|
|
151
163
|
WHERE ui.id = deleted_challenges.user_identifier_id
|
|
152
|
-
AND ui.verified_at IS NULL
|
|
164
|
+
AND ui.verified_at IS NULL
|
|
153
165
|
`;
|
|
154
166
|
|
|
155
167
|
this.logger.verbose(
|
|
@@ -179,12 +191,14 @@ export class TasksService {
|
|
|
179
191
|
* Limite: 20.000 registros por execução para evitar lock prolongado das tabelas.
|
|
180
192
|
*/
|
|
181
193
|
private async clearUnverifiedMfaWithExpiredChallenges(): Promise<void> {
|
|
194
|
+
const settings = await this.settingService.getSettingValues(['cleanup-batch-limit']);
|
|
195
|
+
const batchLimit = Number(settings['cleanup-batch-limit']) || 20000;
|
|
182
196
|
this.logger.verbose(
|
|
183
197
|
'Starting cleanup of unverified MFA with expired challenges',
|
|
184
198
|
);
|
|
185
199
|
const startAt = Date.now();
|
|
186
200
|
|
|
187
|
-
await this.prismaService.$
|
|
201
|
+
await this.prismaService.$executeRaw`
|
|
188
202
|
WITH unverified_mfa AS (
|
|
189
203
|
SELECT um.id
|
|
190
204
|
FROM user_mfa um
|
|
@@ -195,7 +209,7 @@ export class TasksService {
|
|
|
195
209
|
WHERE umc.user_mfa_id = um.id
|
|
196
210
|
AND umc.expires_at >= now()
|
|
197
211
|
)
|
|
198
|
-
LIMIT
|
|
212
|
+
LIMIT ${batchLimit}
|
|
199
213
|
),
|
|
200
214
|
deleted_challenges AS (
|
|
201
215
|
DELETE FROM user_mfa_challenge umc
|
|
@@ -205,13 +219,11 @@ export class TasksService {
|
|
|
205
219
|
)
|
|
206
220
|
DELETE FROM user_mfa um
|
|
207
221
|
USING unverified_mfa
|
|
208
|
-
WHERE um.id = unverified_mfa.id
|
|
222
|
+
WHERE um.id = unverified_mfa.id
|
|
209
223
|
`;
|
|
210
224
|
|
|
211
225
|
this.logger.verbose(
|
|
212
226
|
`Unverified MFA with expired challenges cleaned up in ${Date.now() - startAt}ms`,
|
|
213
227
|
);
|
|
214
228
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
229
|
}
|