\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 csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv7/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv7/app.py


import os
import logging
import datetime
from dotenv import load_dotenv
from flask import Flask, request, session, g
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail
from flask_login import LoginManager
from sqlalchemy.orm import DeclarativeBase
from apscheduler.schedulers.background import BackgroundScheduler
from flask_babel import Babel
from flask_wtf.csrf import CSRFProtect
from utils import format_size, get_db_type_icon, get_storage_type_icon
from werkzeug.middleware.proxy_fix import ProxyFix

# Load environment variables from .env file
load_dotenv()

# Configure logging
logging.basicConfig(level=logging.DEBUG, 
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

class Base(DeclarativeBase):
    pass

# Initialize extensions
db = SQLAlchemy(model_class=Base)
mail = Mail()
babel = Babel()
login_manager = LoginManager()
csrf = CSRFProtect()

def get_locale():
    """Return best-matched language based on user preferences."""
    if session.get('lang'):
        return session.get('lang')
    return request.accept_languages.best_match(['en', 'tr'], 'en')

# Create Flask app
app = Flask(__name__)
# Fix for proxy server CSRF issues
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1)
app.secret_key = os.environ.get("SESSION_SECRET")
# CSRF token configuration with better persistence
app.config['WTF_CSRF_TIME_LIMIT'] = 3600  # 1 hour
app.config['WTF_CSRF_SSL_STRICT'] = False  # Relax SSL requirements

# Configure the database
app.config["SQLALCHEMY_DATABASE_URI"] = os.environ.get("DATABASE_URL", "sqlite:///backups.db")
app.config["SQLALCHEMY_ENGINE_OPTIONS"] = {
    "pool_recycle": 300,
    "pool_pre_ping": True,
}
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# Configure Babel for translations
app.config["BABEL_DEFAULT_LOCALE"] = "en"
app.config["BABEL_TRANSLATION_DIRECTORIES"] = "translations"

# Configure mail
app.config["MAIL_SERVER"] = os.environ.get("MAIL_SERVER", "smtp.gmail.com")
app.config["MAIL_PORT"] = int(os.environ.get("MAIL_PORT", 587))
app.config["MAIL_USE_TLS"] = os.environ.get("MAIL_USE_TLS", "True").lower() in ("true", "1", "t")
app.config["MAIL_USERNAME"] = os.environ.get("MAIL_USERNAME", "")
app.config["MAIL_PASSWORD"] = os.environ.get("MAIL_PASSWORD", "")
app.config["MAIL_DEFAULT_SENDER"] = os.environ.get("MAIL_DEFAULT_SENDER", "")

# Initialize extensions with app
db.init_app(app)
mail.init_app(app)
babel.init_app(app, locale_selector=get_locale)
csrf.init_app(app)

# Configure login manager
login_manager.init_app(app)
login_manager.login_view = 'login'
login_manager.login_message = 'Bu sayfayı görüntülemek için lütfen giriş yapın.'
login_manager.login_message_category = 'warning'

@login_manager.user_loader
def load_user(user_id):
    from models import User
    return User.query.get(int(user_id))

# Create scheduler
scheduler = BackgroundScheduler()
scheduler.start()

# Attach scheduler to app
app.scheduler = scheduler

# Initialize app context
with app.app_context():
    # Import models so SQLAlchemy can create tables
    from models import DatabaseConnection, StorageTarget, BackupJob, BackupLog, User, SmtpSettings
    
    # Create database tables
    db.create_all()
    
    # Import routes after models to avoid circular imports
    from routes import *
    
    # Import and initialize scheduler jobs
    from scheduler import init_scheduler
    init_scheduler(scheduler)
    
    # Add utility functions to Jinja2 templates
    @app.context_processor
    def utility_processor():
        # Varsayılan olarak light modda başlat
        if 'theme' not in session:
            session['theme'] = 'light'
            
        return {
            'get_db_type_icon': get_db_type_icon,
            'get_storage_type_icon': get_storage_type_icon,
            'format_size': format_size,
            'now': datetime.datetime.now()
        }
    
    logger.info("Application started successfully")

© KUJUNTI.ID