Add cron job to cleanup exired oidc objects
This commit is contained in:
24
src/oidc.js
24
src/oidc.js
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user