import logging from flask import Flask, request, jsonify, redirect, url_for, session from app.extensions.db import db from app.extensions.audit_logger import AuditLogger from app.models import * from app.models.user import User from app.routes import register_blueprints from app.extensions.auth_ext import init_auth, login_manager import config from app.routes.dashboard import dashboard_bp # from backend.api import bp_api from config import TZ # noinspection SpellCheckingInspection def create_app(): app = Flask(__name__, static_url_path='/telezab/static', template_folder='templates') app.config['SQLALCHEMY_DATABASE_URI'] = config.SQLALCHEMY_DATABASE_URI app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SECRET_KEY'] = config.SECRET_KEY # Замените на надежный секретный ключ app.config['SESSION_COOKIE_SECURE'] = config.SESSION_COOKIE_SECURE # Убедитесь, что установлено значение True app.config['SESSION_COOKIE_HTTPONLY'] = config.SESSION_COOKIE_HTTPONLY # Убедитесь, что установлено значение True app.config['SESSION_COOKIE_SAMESITE'] = config.SESSION_COOKIE_SAMESITE app.config['SESSION_REFRESH_EACH_REQUEST'] = False app.config['PERMANENT_SESSION_LIFETIME'] = config.PERMANENT_SESSION_LIFETIME app.config['SESSION_COOKIE_MAX_AGE'] = 3600 app.config['TIMEZONE'] = TZ # Инициализация расширений db.init_app(app) login_manager.init_app(app) init_auth(app) # Инициализация AuditLogger с передачей db.session app.audit_logger = AuditLogger(db.session) # Регистрируем блюпринты register_blueprints(app) # Создаем таблицы (если нужно) with app.app_context(): db.create_all() @login_manager.unauthorized_handler def unauthorized(): logging.debug("Unauthorized access detected") if request.path.startswith('/telezab/rest/api'): return jsonify({'error': 'Не авторизован'}), 401 else: return redirect(url_for('auth.login')) @login_manager.user_loader def load_user(user_id): user_data = session.get('user_data', {}) display_name = user_data.get('display_name') if not display_name: display_name = " ".join(filter(None, [ user_data.get('user_surname'), user_data.get('user_name'), user_data.get('user_middle_name') ])) return User( user_id, user_name=user_data.get('user_name'), user_surname=user_data.get('user_surname'), user_middle_name=user_data.get('user_middle_name'), display_name=display_name, email=user_data.get('email') ) return app app = create_app()