143 lines
4.2 KiB
JavaScript
143 lines
4.2 KiB
JavaScript
|
|
#!/usr/bin/env node
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Admin User Creation Script
|
|||
|
|
* Usage: node scripts/create-admin.js
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
const bcrypt = require('bcrypt');
|
|||
|
|
const readline = require('readline');
|
|||
|
|
const path = require('path');
|
|||
|
|
|
|||
|
|
// Set correct path for database config
|
|||
|
|
process.chdir(path.join(__dirname, '../backend'));
|
|||
|
|
|
|||
|
|
const { sequelize } = require('../backend/src/config/database');
|
|||
|
|
const AdminUser = require('../backend/src/models/AdminUser');
|
|||
|
|
|
|||
|
|
const rl = readline.createInterface({
|
|||
|
|
input: process.stdin,
|
|||
|
|
output: process.stdout,
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const question = (query) => new Promise((resolve) => rl.question(query, resolve));
|
|||
|
|
const questionHidden = (query) => {
|
|||
|
|
return new Promise((resolve) => {
|
|||
|
|
rl.question(query, (answer) => {
|
|||
|
|
resolve(answer);
|
|||
|
|
});
|
|||
|
|
rl._writeToOutput = () => {}; // Hide input
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const validatePassword = (password) => {
|
|||
|
|
if (password.length < 8) {
|
|||
|
|
return 'Şifre en az 8 karakter olmalıdır!';
|
|||
|
|
}
|
|||
|
|
if (!/[a-zA-Z]/.test(password)) {
|
|||
|
|
return 'Şifre en az bir harf içermelidir!';
|
|||
|
|
}
|
|||
|
|
if (!/[0-9]/.test(password)) {
|
|||
|
|
return 'Şifre en az bir rakam içermelidir!';
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
(async () => {
|
|||
|
|
try {
|
|||
|
|
console.log('\n╔═══════════════════════════════════════════════════════════════╗');
|
|||
|
|
console.log('║ Oltalama Panel - Admin Kullanıcı Oluştur ║');
|
|||
|
|
console.log('╚═══════════════════════════════════════════════════════════════╝\n');
|
|||
|
|
|
|||
|
|
// Connect to database
|
|||
|
|
await sequelize.authenticate();
|
|||
|
|
console.log('✓ Database bağlantısı başarılı\n');
|
|||
|
|
|
|||
|
|
// Get username
|
|||
|
|
let username;
|
|||
|
|
while (true) {
|
|||
|
|
username = await question('Admin kullanıcı adı (en az 3 karakter): ');
|
|||
|
|
if (username.length >= 3) {
|
|||
|
|
// Check if username exists
|
|||
|
|
const existing = await AdminUser.findOne({ where: { username } });
|
|||
|
|
if (existing) {
|
|||
|
|
console.log('✗ Bu kullanıcı adı zaten kullanılıyor!\n');
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
} else {
|
|||
|
|
console.log('✗ Kullanıcı adı en az 3 karakter olmalıdır!\n');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Get password
|
|||
|
|
let password;
|
|||
|
|
while (true) {
|
|||
|
|
// Disable echo for password input
|
|||
|
|
const originalWrite = rl._writeToOutput;
|
|||
|
|
rl._writeToOutput = function (stringToWrite) {
|
|||
|
|
if (stringToWrite.charCodeAt(0) === 13) {
|
|||
|
|
rl.output.write('\n');
|
|||
|
|
} else {
|
|||
|
|
rl.output.write('*');
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
password = await question('Admin şifresi (en az 8 karakter, harf ve rakam): ');
|
|||
|
|
console.log(); // New line after hidden input
|
|||
|
|
|
|||
|
|
const validationError = validatePassword(password);
|
|||
|
|
if (validationError) {
|
|||
|
|
console.log(`✗ ${validationError}\n`);
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const passwordConfirm = await question('Şifreyi tekrar girin: ');
|
|||
|
|
console.log(); // New line after hidden input
|
|||
|
|
|
|||
|
|
// Restore echo
|
|||
|
|
rl._writeToOutput = originalWrite;
|
|||
|
|
|
|||
|
|
if (password !== passwordConfirm) {
|
|||
|
|
console.log('✗ Şifreler eşleşmiyor!\n');
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Get optional details
|
|||
|
|
const fullName = await question('Tam ad (opsiyonel, ENTER ile geç): ');
|
|||
|
|
const email = await question('E-posta (opsiyonel, ENTER ile geç): ');
|
|||
|
|
|
|||
|
|
// Create admin user
|
|||
|
|
console.log('\n⏳ Admin kullanıcısı oluşturuluyor...');
|
|||
|
|
|
|||
|
|
const hashedPassword = await bcrypt.hash(password, 10);
|
|||
|
|
|
|||
|
|
await AdminUser.create({
|
|||
|
|
username,
|
|||
|
|
password_hash: hashedPassword,
|
|||
|
|
email: email || null,
|
|||
|
|
full_name: fullName || 'Administrator',
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
console.log('\n✓ Admin kullanıcısı başarıyla oluşturuldu!');
|
|||
|
|
console.log(`\nKullanıcı adı: ${username}`);
|
|||
|
|
console.log('Şifre: ********** (güvenli bir şekilde saklandı)');
|
|||
|
|
|
|||
|
|
if (fullName) console.log(`Tam ad: ${fullName}`);
|
|||
|
|
if (email) console.log(`E-posta: ${email}`);
|
|||
|
|
|
|||
|
|
console.log('\n✓ Artık panele giriş yapabilirsiniz.\n');
|
|||
|
|
|
|||
|
|
rl.close();
|
|||
|
|
process.exit(0);
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('\n✗ Hata:', error.message);
|
|||
|
|
rl.close();
|
|||
|
|
process.exit(1);
|
|||
|
|
}
|
|||
|
|
})();
|
|||
|
|
|