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;