Spaces:
Paused
Paused
| import fs from 'node:fs'; | |
| import process from 'node:process'; | |
| import yaml from 'yaml'; | |
| import storage from 'node-persist'; | |
| import { | |
| initUserStorage, | |
| getPasswordSalt, | |
| getPasswordHash, | |
| toKey, | |
| } from './src/users.js'; | |
| const userAccount = process.argv[2]; | |
| const userPassword = process.argv[3]; | |
| if (!userAccount) { | |
| console.error('A tool for recovering lost SillyTavern accounts. Uses a "dataRoot" setting from config.yaml file.'); | |
| console.error('Usage: node recover.js [account] (password)'); | |
| console.error('Example: node recover.js admin password'); | |
| process.exit(1); | |
| } | |
| async function initStorage() { | |
| const config = yaml.parse(fs.readFileSync('config.yaml', 'utf8')); | |
| const dataRoot = config.dataRoot; | |
| if (!dataRoot) { | |
| console.error('No "dataRoot" setting found in config.yaml file.'); | |
| process.exit(1); | |
| } | |
| await initUserStorage(dataRoot); | |
| } | |
| async function main() { | |
| await initStorage(); | |
| /** | |
| * @type {import('./src/users').User} | |
| */ | |
| const user = await storage.get(toKey(userAccount)); | |
| if (!user) { | |
| console.error(`User "${userAccount}" not found.`); | |
| process.exit(1); | |
| } | |
| if (!user.enabled) { | |
| console.log('User is disabled. Enabling...'); | |
| user.enabled = true; | |
| } | |
| if (userPassword) { | |
| console.log('Setting new password...'); | |
| const salt = getPasswordSalt(); | |
| const passwordHash = getPasswordHash(userPassword, salt); | |
| user.password = passwordHash; | |
| user.salt = salt; | |
| } else { | |
| console.log('Setting an empty password...'); | |
| user.password = ''; | |
| user.salt = ''; | |
| } | |
| await storage.setItem(toKey(userAccount), user); | |
| console.log('User recovered. A program will exit now.'); | |
| } | |
| main(); | |