mirror of
https://github.com/9technologygroup/patchmon.net.git
synced 2025-10-24 08:33:38 +00:00
113 lines
3.3 KiB
JavaScript
113 lines
3.3 KiB
JavaScript
const { PrismaClient } = require('@prisma/client');
|
|
const bcrypt = require('bcryptjs');
|
|
const readline = require('readline');
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
const rl = readline.createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout
|
|
});
|
|
|
|
const question = (query) => new Promise((resolve) => rl.question(query, resolve));
|
|
|
|
async function setupAdminUser() {
|
|
try {
|
|
console.log('🔐 Setting up PatchMon Admin User');
|
|
console.log('=====================================\n');
|
|
|
|
// Check if any users exist
|
|
const existingUsers = await prisma.users.count();
|
|
if (existingUsers > 0) {
|
|
console.log('⚠️ Users already exist in the database.');
|
|
const overwrite = await question('Do you want to create another admin user? (y/N): ');
|
|
if (overwrite.toLowerCase() !== 'y' && overwrite.toLowerCase() !== 'yes') {
|
|
console.log('❌ Setup cancelled.');
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Get user input
|
|
const username = await question('Enter admin username: ');
|
|
if (!username.trim()) {
|
|
console.log('❌ Username is required.');
|
|
return;
|
|
}
|
|
|
|
const email = await question('Enter admin email: ');
|
|
if (!email.trim()) {
|
|
console.log('❌ Email is required.');
|
|
return;
|
|
}
|
|
|
|
const password = await question('Enter admin password (min 6 characters): ');
|
|
if (password.length < 6) {
|
|
console.log('❌ Password must be at least 6 characters.');
|
|
return;
|
|
}
|
|
|
|
// Check if username or email already exists
|
|
const existingUser = await prisma.users.findFirst({
|
|
where: {
|
|
OR: [
|
|
{ username: username.trim() },
|
|
{ email: email.trim() }
|
|
]
|
|
}
|
|
});
|
|
|
|
if (existingUser) {
|
|
console.log('❌ Username or email already exists.');
|
|
return;
|
|
}
|
|
|
|
// Hash password
|
|
console.log('\n🔄 Creating admin user...');
|
|
const passwordHash = await bcrypt.hash(password, 12);
|
|
|
|
// Create admin user
|
|
const user = await prisma.users.create({
|
|
data: {
|
|
id: require('crypto').randomUUID(),
|
|
username: username.trim(),
|
|
email: email.trim(),
|
|
password_hash: passwordHash,
|
|
role: 'admin',
|
|
is_active: true,
|
|
created_at: new Date(),
|
|
updated_at: new Date()
|
|
},
|
|
select: {
|
|
id: true,
|
|
username: true,
|
|
email: true,
|
|
role: true,
|
|
created_at: true
|
|
}
|
|
});
|
|
|
|
console.log('✅ Admin user created successfully!');
|
|
console.log('\n📋 User Details:');
|
|
console.log(` Username: ${user.username}`);
|
|
console.log(` Email: ${user.email}`);
|
|
console.log(` Role: ${user.role}`);
|
|
console.log(` Created: ${user.created_at.toISOString()}`);
|
|
|
|
console.log('\n🎉 Setup complete!');
|
|
console.log('\nNext steps:');
|
|
console.log('1. The backend server is already running as a systemd service');
|
|
console.log('2. The frontend is already built and served by Nginx');
|
|
console.log('3. Visit https://' + process.env.FQDN + ' and login with your credentials');
|
|
console.log('4. Use the management script: ./manage.sh {status|restart|logs|update|backup|credentials|reset-admin}');
|
|
|
|
} catch (error) {
|
|
console.error('❌ Error setting up admin user:', error);
|
|
} finally {
|
|
rl.close();
|
|
await prisma.$disconnect();
|
|
}
|
|
}
|
|
|
|
// Run the setup
|
|
setupAdminUser();
|