Skip to content

Commit 21a3f86

Browse files
committed
feat(store): add option to 'jobSessionStoreCleanup' to revoke sessions after N days
1 parent 18cc26f commit 21a3f86

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

packages/store/src/session-store-jobs.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,15 @@ import { sessionStoreCleanupExpiredSessions } from "./session-store.js";
66
* {@link sessionStoreCleanupExpiredSessions}. By default, removes expired and revoked
77
* sessions after 14 days.
88
*
9+
* If 'maxSessionLifetimeInDays' is provided, even active sessions will be removed if
10+
* they are created 'maxSessionLifetimeInDays'-days ago.
11+
*
912
* Recommended interval: daily
1013
* Recommended cronExpression: 0 2 * * *
1114
*
1215
* @param {{
1316
* maxRevokedAgeInDays?: number,
17+
* maxSessionLifetimeInDays?: number,
1418
* }} [options]
1519
* @returns {import("./queue-worker.js").QueueWorkerHandler}
1620
*/
@@ -27,6 +31,7 @@ export function jobSessionStoreCleanup(options) {
2731
newEventFromEvent(event),
2832
sql,
2933
options?.maxRevokedAgeInDays ?? 14,
34+
options?.maxSessionLifetimeInDays,
3035
);
3136

3237
eventStop(event);

packages/store/src/session-store.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,12 +390,14 @@ export async function sessionStoreRefreshTokens(
390390
* @param {import("@compas/stdlib").InsightEvent} event
391391
* @param {import("postgres").Sql<{}>} sql
392392
* @param {number} maxRevokedAgeInDays
393+
* @param {number} [maxSessionLifetimeInDays]
393394
* @returns {Promise<void>}
394395
*/
395396
export async function sessionStoreCleanupExpiredSessions(
396397
event,
397398
sql,
398399
maxRevokedAgeInDays,
400+
maxSessionLifetimeInDays,
399401
) {
400402
eventStart(event, "sessionStore.cleanupExpiredSessions");
401403

@@ -423,6 +425,15 @@ export async function sessionStoreCleanupExpiredSessions(
423425
accessTokensNotExists: {},
424426
});
425427

428+
if (!isNil(maxSessionLifetimeInDays) && maxSessionLifetimeInDays > 1) {
429+
const d = new Date();
430+
d.setDate(d.getDate() - maxSessionLifetimeInDays);
431+
432+
await queries.sessionStoreDelete(sql, {
433+
createdAtLowerThan: d,
434+
});
435+
}
436+
426437
eventStop(event);
427438
}
428439

0 commit comments

Comments
 (0)