cursor / scripts /create-admin.js
0412Xu's picture
Upload 20 files
dc70e52 verified
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');
const readline = require('readline');
const ADMIN_FILE = path.join(__dirname, '../data/admin.json');
// 创建readline接口
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 生成盐值
function generateSalt() {
return crypto.randomBytes(16).toString('hex');
}
// 使用盐值哈希密码
function hashPassword(password, salt) {
return crypto.pbkdf2Sync(password, salt, 1000, 64, 'sha512').toString('hex');
}
// 提示用户输入
function question(query) {
return new Promise((resolve) => {
rl.question(query, resolve);
});
}
async function main() {
try {
console.log('创建管理员账户\n');
// 获取用户输入
const username = await question('请输入管理员用户名: ');
const password = await question('请输入管理员密码: ');
// 生成盐值和密码哈希
const salt = generateSalt();
const hash = hashPassword(password, salt);
// 创建管理员数据
const adminData = {
admin: {
username,
salt,
hash
}
};
// 确保data目录存在
const dataDir = path.dirname(ADMIN_FILE);
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
}
// 写入文件
fs.writeFileSync(ADMIN_FILE, JSON.stringify(adminData, null, 2));
console.log('\n管理员账户创建成功!');
console.log('请妥善保管账户信息,不要将admin.json文件提交到版本控制系统。');
} catch (error) {
console.error('创建管理员账户失败:', error);
} finally {
rl.close();
}
}
main();