58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
|
|
||
|
const Redis = use('Redis');
|
||
|
const Logger = use('Logger');
|
||
|
const {v4: uuidv4} = require('uuid');
|
||
|
|
||
|
|
||
|
const TOKEN_NAMESPACE = 'expired_token';
|
||
|
const TokenTypes = {
|
||
|
RP: 'rp',
|
||
|
};
|
||
|
class ExpiredToken {
|
||
|
/**
|
||
|
*
|
||
|
* @param {{id:number; email:string}} payload
|
||
|
* @param {number} ttl in seconds default 86400 (24 hours)
|
||
|
*/
|
||
|
static async generateResetPasswordToken(payload, ttl = 86400) {
|
||
|
try {
|
||
|
Logger.debug(`Generating RP token`);
|
||
|
const token = `${TokenTypes.RP}_${uuidv4()}`;
|
||
|
const rdKey = `${TOKEN_NAMESPACE}:${token}`;
|
||
|
await Redis.set(rdKey, JSON.stringify(payload));
|
||
|
await Redis.expire(rdKey, ttl);
|
||
|
return token;
|
||
|
} catch (e) {
|
||
|
Logger.error(`Failed to generate RP token. Error: ${e.message}`);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @param {string} token
|
||
|
*/
|
||
|
static async getTokenPayload(token) {
|
||
|
try {
|
||
|
const response = await Redis.get(`${TOKEN_NAMESPACE}:${token}`);
|
||
|
if (response) return JSON.parse(response);
|
||
|
return null;
|
||
|
} catch (e) {
|
||
|
Logger.error(`Failed to generate RP token. Error: ${e.message}`);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static async remove(token) {
|
||
|
try {
|
||
|
await Redis.del(`${TOKEN_NAMESPACE}:${token}`);
|
||
|
return true;
|
||
|
} catch (e) {
|
||
|
Logger.error(`Failed to generate RP token. Error: ${e.message}`);
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = ExpiredToken;
|