Add cron job to cleanup exired oidc objects

This commit is contained in:
Johannes Zellner
2025-03-05 11:29:13 +01:00
parent b8a539a67a
commit b7b738c92b
2 changed files with 30 additions and 2 deletions

View File

@@ -11,7 +11,9 @@ exports = module.exports = {
getClient,
delClient,
updateClient,
listClients
listClients,
cleanupExpired,
};
const assert = require('assert'),
@@ -217,6 +219,22 @@ async function getUserByAuthCode(authCode) {
return await users.get(authData.payload.accountId);
}
// This exposed to run on a cron job
async function cleanupExpired() {
debug('cleanupExpired');
const types = [ 'AuthorizationCode', 'AccessToken', 'Grant', 'Interaction', 'RefreshToken', 'Session' ];
for (const type of types) {
load(type);
for (const key in DATA_STORE[type]) {
if (!DATA_STORE[type][key].expiresAt || DATA_STORE[type][key].expiresAt < Date.now()) delete DATA_STORE[type][key];
}
save(type);
}
}
// -----------------------------
// Generic oidc node module data store model
// -----------------------------
@@ -259,6 +277,8 @@ class CloudronAdapter {
async upsert(id, payload, expiresIn) {
debug(`[${this.name}] upsert: ${id}`);
const expiresAt = expiresIn ? new Date(Date.now() + (expiresIn * 1000)) : 0;
if (this.name === 'Client') {
debug('upsert: this should not happen as it is stored in our db');
} else if (this.name === 'AccessToken' && (payload.clientId === tokens.ID_WEBADMIN || payload.clientId === tokens.ID_DEVELOPMENT)) {
@@ -273,7 +293,7 @@ class CloudronAdapter {
throw error;
}
} else {
DATA_STORE[this.name][id] = { id, expiresIn, payload, consumed: false };
DATA_STORE[this.name][id] = { id, expiresAt, payload, consumed: false };
save(this.name);
}
}