from flask import redirect, url_for, flash from flask_login import current_user from functools import wraps from werkzeug.security import generate_password_hash, check_password_hash import os from app.models import User def admin_required(f): @wraps(f) def decorated(*args, **kwargs): if not current_user.is_authenticated: return redirect(url_for('login')) if not getattr(current_user, 'is_admin', False): flash('Недостаточно прав', 'danger') return redirect(url_for('dashboard')) return f(*args, **kwargs) return decorated def ensure_default_admin(): username = os.environ.get('ADMIN_USERNAME', 'ruslan') password = os.environ.get('ADMIN_PASSWORD', '1234') email = os.environ.get('ADMIN_EMAIL', 'ruslan@example.com') user = User.get_or_none(User.username == username) if user: changed = False if not user.is_admin: user.is_admin = True changed = True try: if not check_password_hash(user.password_hash, password): user.password_hash = generate_password_hash(password) changed = True except Exception: user.password_hash = generate_password_hash(password) changed = True if changed: user.save() else: User.create( username=username, email=email, full_name='Администратор', password_hash=generate_password_hash(password), is_admin=True ) def ensure_test_users(): tests = [ ('test1', 'test1@example.com', 'Пользователь 1'), ('test2', 'test2@example.com', 'Пользователь 2'), ] for username, email, full_name in tests: u = User.get_or_none(User.username == username) if not u: User.create( username=username, email=email, full_name=full_name, password_hash=generate_password_hash(os.environ.get('TEST_USER_PASSWORD', '1234')), is_admin=False, )