forked from tsai/budibase
8 changed files with 154 additions and 23 deletions
@ -0,0 +1,51 @@ |
|||
const { Client, utils } = require("@budibase/auth").redis |
|||
const { newid } = require("@budibase/auth").utils |
|||
|
|||
const EXPIRE_TOKEN_SECONDS = 3600 |
|||
|
|||
async function getClient(db) { |
|||
return await (new Client(db)).init() |
|||
} |
|||
|
|||
async function writeACode(db, value) { |
|||
const client = await getClient(db) |
|||
const code = newid() |
|||
await client.store(code, value, EXPIRE_TOKEN_SECONDS) |
|||
client.finish() |
|||
return code |
|||
} |
|||
|
|||
/** |
|||
* Given a user ID this will store a code (that is returned) for an hour in redis. |
|||
* The user can then return this code for resetting their password (through their reset link). |
|||
* @param {string} userId the ID of the user which is to be reset. |
|||
* @return {Promise<string>} returns the code that was stored to redis. |
|||
*/ |
|||
exports.getResetPasswordCode = async userId => { |
|||
return writeACode(utils.Databases.PW_RESETS, userId) |
|||
} |
|||
|
|||
/** |
|||
* Given a reset code this will lookup to redis, check if the code is valid and delete if required. |
|||
* @param {string} resetCode The code provided via the email link. |
|||
* @param {boolean} deleteCode If the code is used/finished with this will delete it. |
|||
* @return {Promise<string>} returns the user ID if it is found |
|||
*/ |
|||
exports.checkResetPasswordCode = async (resetCode, deleteCode = false) => { |
|||
const client = await getClient(utils.Databases.PW_RESETS) |
|||
const userId = await client.get(resetCode) |
|||
if (deleteCode) { |
|||
await client.delete(resetCode) |
|||
} |
|||
client.finish() |
|||
return userId |
|||
} |
|||
|
|||
/** |
|||
* Generates an invitation code and writes it to redis - which can later be checked for user creation. |
|||
* @param {string} email the email address which the code is being sent to (for use later). |
|||
* @return {Promise<string>} returns the code that was stored to redis. |
|||
*/ |
|||
exports.getInviteCode = async email => { |
|||
return writeACode(utils.Databases.INVITATIONS, email) |
|||
} |
|||
Loading…
Reference in new issue