103 lines
2.9 KiB
JavaScript
Executable File
103 lines
2.9 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Create Admin User Script
|
|
* Usage: node scripts/create-admin.js
|
|
*/
|
|
|
|
const readline = require('readline');
|
|
const bcrypt = require('bcrypt');
|
|
const path = require('path');
|
|
|
|
// Load environment
|
|
require('dotenv').config({ path: path.join(__dirname, '../.env') });
|
|
|
|
// Load database and models
|
|
const { sequelize } = require('../src/config/database');
|
|
const { AdminUser } = require('../src/models');
|
|
|
|
const rl = readline.createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout
|
|
});
|
|
|
|
function question(query) {
|
|
return new Promise(resolve => rl.question(query, resolve));
|
|
}
|
|
|
|
async function createAdmin() {
|
|
try {
|
|
console.log('\n╔═══════════════════════════════════════════════════════════╗');
|
|
console.log('║ 🔐 Create Admin User - Oltalama Panel ║');
|
|
console.log('╚═══════════════════════════════════════════════════════════╝\n');
|
|
|
|
// Test database connection
|
|
await sequelize.authenticate();
|
|
console.log('✅ Database connection successful\n');
|
|
|
|
// Get username
|
|
let username;
|
|
while (true) {
|
|
username = await question('👤 Enter admin username: ');
|
|
if (!username || username.length < 3) {
|
|
console.log('❌ Username must be at least 3 characters\n');
|
|
continue;
|
|
}
|
|
|
|
// Check if username exists
|
|
const existingUser = await AdminUser.findOne({ where: { username } });
|
|
if (existingUser) {
|
|
console.log('❌ Username already exists\n');
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
// Get password
|
|
let password;
|
|
while (true) {
|
|
password = await question('🔑 Enter admin password (min 8 characters): ');
|
|
if (!password || password.length < 8) {
|
|
console.log('❌ Password must be at least 8 characters\n');
|
|
continue;
|
|
}
|
|
|
|
const confirmPassword = await question('🔑 Confirm password: ');
|
|
if (password !== confirmPassword) {
|
|
console.log('❌ Passwords do not match\n');
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
// Hash password
|
|
console.log('\n⏳ Creating admin user...');
|
|
const hashedPassword = await bcrypt.hash(password, 10);
|
|
|
|
// Create admin user
|
|
await AdminUser.create({
|
|
username,
|
|
password: hashedPassword,
|
|
is_admin: true,
|
|
});
|
|
|
|
console.log('\n✅ Admin user created successfully!');
|
|
console.log(`👤 Username: ${username}`);
|
|
console.log('\n🎉 You can now login to the admin panel!\n');
|
|
|
|
} catch (error) {
|
|
console.error('\n❌ Error creating admin user:', error.message);
|
|
process.exit(1);
|
|
} finally {
|
|
rl.close();
|
|
await sequelize.close();
|
|
process.exit(0);
|
|
}
|
|
}
|
|
|
|
// Run
|
|
createAdmin();
|
|
|