mirror of
https://github.com/qwertyforce/scenery.git
synced 2025-05-31 11:42:35 +00:00
52 lines
1.8 KiB
TypeScript
52 lines
1.8 KiB
TypeScript
import bcrypt from "bcrypt"
|
|
import crypto from "crypto"
|
|
import db_ops from "./db_ops"
|
|
const SALTROUNDS = 10
|
|
|
|
async function generate_activation_token(): Promise<string> {
|
|
return new Promise((resolve, reject) => {
|
|
crypto.randomBytes(16, async function (ex, buffer) {
|
|
if (ex) {
|
|
reject("error");
|
|
}
|
|
const token = buffer.toString("base64").replace(/\/|=|[+]/g, '')
|
|
const users = await db_ops.not_activated_user.find_not_activated_user_by_token(token) //check if token exists
|
|
if (users.length === 0) {
|
|
resolve(token);
|
|
} else {
|
|
const token_1 = await generate_activation_token()
|
|
resolve(token_1)
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
async function generate_password_recovery_token(): Promise<string> {
|
|
return new Promise((resolve, reject) => {
|
|
crypto.randomBytes(16, async function (ex, buffer) {
|
|
if (ex) {
|
|
reject("error");
|
|
}
|
|
const token = buffer.toString("base64").replace(/\/|=|[+]/g, '')
|
|
const user_id = await db_ops.password_recovery.find_user_id_by_password_recovery_token(token) //check if token exists
|
|
if (user_id.length === 0) {
|
|
resolve(token);
|
|
} else {
|
|
const token_1 = await generate_password_recovery_token()
|
|
resolve(token_1)
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
async function hash_password(password: string): Promise<string> {
|
|
const hashed_pass = bcrypt.hash(password, SALTROUNDS);
|
|
return hashed_pass
|
|
}
|
|
|
|
async function check_password(password: string, hash: string): Promise<boolean> {
|
|
const result = bcrypt.compare(password, hash);
|
|
return result
|
|
}
|
|
|
|
export default {generate_activation_token,generate_password_recovery_token,hash_password,check_password} |