#!/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); } })();