68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
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,
|
|
)
|
|
|