All checks were successful
Build and Push Docker Images / build (push) Successful in 1m28s
- Рефакторинг Telegram бота на модульную структуру для удобства поддержки и расширения - Создан общий RabbitMQ клиент для Flask и Telegram компонентов - Подготовлена базовая архитектура для будущего масштабирования и новых функций Signed-off-by: UdoChudo <stream@udochudo.ru>
82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
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
|
||
|
||
from config import Config
|
||
from app.routes.dashboard import dashboard_bp
|
||
# from backend.api import bp_api
|
||
|
||
|
||
|
||
|
||
# noinspection SpellCheckingInspection
|
||
def create_app() -> Flask:
|
||
app = Flask(__name__, static_url_path='/telezab/static', template_folder='templates')
|
||
app.config.from_object(Config)
|
||
|
||
# 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
|
||
|