\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82
| Path : /var/www/html/yedekledb24/DatabaseBackupMaster/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMaster/reset_database_sunucu.py |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
yedekleDB24 için veritabanı şemasını sıfırlama ve yeniden oluşturma scripti.
Bu script, mevcut veritabanı şemasını tamamen kaldırıp yeniden oluşturur.
DİKKAT: Tüm veriler silinecektir!
"""
import os
import sys
import logging
from dotenv import load_dotenv
# Logging ayarları
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# Uygulama ortamını yükle
load_dotenv()
def confirm_reset():
"""Kullanıcıdan onay ister."""
print("⚠️ UYARI: Bu işlem veritabanındaki TÜM VERİLERİ SİLECEKTİR! ⚠️")
print("Mevcut veritabanı şeması silinip yeniden oluşturulacak.")
print("Bu işlem geri alınamaz.")
confirmation = input("Devam etmek istiyor musunuz? (evet/hayır): ")
return confirmation.lower() in ['evet', 'e', 'yes', 'y']
def reset_database():
"""Veritabanını sıfırlar ve yeniden oluşturur."""
try:
# Uygulama modüllerini içe aktar (burada çağrılması gerekiyor çünkü app.py'nin çalışması gerekiyor)
logger.info("Uygulama modülleri içe aktarılıyor...")
# Ana proje dizinine geçiş yapmak için
from pathlib import Path
project_dir = str(Path(__file__).parent.absolute())
sys.path.append(project_dir)
# Flask uygulamasını ve modelleri içe aktar
from app import app, db
import models # Tüm modellerin tanımlanması için gerekli
with app.app_context():
# Mevcut veritabanını sıfırla
logger.info("Veritabanı tabloları siliniyor...")
db.drop_all()
logger.info("Veritabanı tabloları silindi.")
# Yeni şemayı oluştur
logger.info("Yeni veritabanı şeması oluşturuluyor...")
db.create_all()
logger.info("Yeni veritabanı şeması oluşturuldu.")
# Admin kullanıcısı oluştur
logger.info("Admin kullanıcısı oluşturuluyor...")
from models import User
from werkzeug.security import generate_password_hash
admin_user = User(
username="admin",
email="admin@example.com",
password_hash=generate_password_hash("Ainahv5aVaw2EeP"), # Varsayılan şifre
is_admin=True
)
db.session.add(admin_user)
db.session.commit()
logger.info("Admin kullanıcısı oluşturuldu.")
# Default SMTP ayarları ekle - model yapısını görüntüleyelim
logger.info("SmtpSettings model yapısını kontrolü...")
from models import SmtpSettings
# Model sınıfının mevcut alanlarını kontrol et
smtp_keys = [c.name for c in SmtpSettings.__table__.columns]
logger.info(f"SmtpSettings modeli alanları: {smtp_keys}")
# Güvenli şekilde varsayılan SMTP ayarlarını oluştur
smtp_data = {
"mail_server": "smtp.example.com",
"mail_port": 587,
"mail_use_tls": True,
"mail_use_ssl": False,
"mail_username": "user@example.com",
"mail_password": "password",
"mail_default_sender": "noreply@example.com",
"notification_emails": "admin@example.com"
}
# Sadece modelde var olan alanları kullan
smtp_filtered_data = {k: v for k, v in smtp_data.items() if k in smtp_keys}
smtp_settings = SmtpSettings(**smtp_filtered_data)
db.session.add(smtp_settings)
db.session.commit()
logger.info("Varsayılan SMTP ayarları oluşturuldu.")
logger.info("Veritabanı başarıyla sıfırlandı ve yeniden oluşturuldu.")
except Exception as e:
logger.error(f"Veritabanı sıfırlama işlemi sırasında hata oluştu: {str(e)}")
import traceback
logger.error(traceback.format_exc())
return False
return True
def main():
"""Ana fonksiyon"""
logger.info("Veritabanı sıfırlama scripti başlatılıyor...")
if not confirm_reset():
logger.info("İşlem kullanıcı tarafından iptal edildi.")
return
if reset_database():
logger.info("Veritabanı başarıyla sıfırlandı ve yeniden yapılandırıldı.")
logger.info("Admin kullanıcısı: admin / Ainahv5aVaw2EeP")
else:
logger.error("Veritabanı sıfırlanamadı!")
sys.exit(1)
if __name__ == "__main__":
main()