UNPKG

ragvault

Version:

Securely manage and query your private data using a local vector database. Your private RAG.

61 lines (60 loc) 2.28 kB
import chalk from "chalk"; import inquirer from "inquirer"; import { createSpinner } from "nanospinner"; import { sleep } from "../../utils/sleep.js"; import { hashPassword } from "../../utils/bcrypt.js"; import bcrypt from "bcryptjs"; import { saveUsers } from "../../utils/user-transactions.js"; export async function resetPassword(users) { const { username } = await inquirer.prompt([ { type: "input", name: "username", message: "Enter your username:", validate: (input) => input.trim() !== "" || "Username cannot be empty", }, ]); if (!users[username]) { console.log(chalk.red("Username not found.")); return; } console.log(chalk.blue(`Security Question: ${users[username].securityQuestion}`)); const { securityAnswer } = await inquirer.prompt([ { type: "password", name: "securityAnswer", message: "Enter your answer:", validate: (input) => input.trim() !== "" || "Answer cannot be empty", }, ]); const spinner = createSpinner("Verifying answer...").start(); await sleep(1000); if (await bcrypt.compare(securityAnswer, users[username].securityAnswer)) { spinner.success({ text: chalk.green("Answer correct. You can now reset your password."), }); const { newPassword } = await inquirer.prompt([ { type: "password", name: "newPassword", message: "Enter your new password:", validate: (input) => input.trim().length >= 8 || "Password must be at least 8 characters long", }, { type: "password", name: "confirmNewPassword", message: "Confirm your new password:", validate: (input, answers) => input === answers.newPassword || "Passwords do not match", }, ]); users[username].password = await hashPassword(newPassword); await saveUsers(users); console.log(chalk.green("Password reset successful!")); } else { spinner.error({ text: chalk.red("Incorrect answer. Password reset failed."), }); } }