аутентификация к веб админке
This commit is contained in:
parent
595c9419f4
commit
e6967db17d
6 changed files with 282 additions and 2 deletions
|
|
@ -1,14 +1,29 @@
|
|||
from flask import Flask, jsonify, render_template
|
||||
from flask import Flask, jsonify, render_template, request, session, redirect, url_for
|
||||
from flask_cors import CORS
|
||||
import sqlite3
|
||||
from datetime import datetime, date
|
||||
from functools import wraps
|
||||
import os
|
||||
import auth_config
|
||||
|
||||
app = Flask(__name__)
|
||||
# Secret key для сессий (в продакшене лучше использовать переменную окружения)
|
||||
app.secret_key = os.environ.get('FLASK_SECRET_KEY', 'your-secret-key-change-in-production-please')
|
||||
CORS(app)
|
||||
|
||||
# Путь к базе данных бота
|
||||
DB_PATH = "/app/data/lichess_bot.db"
|
||||
|
||||
|
||||
def login_required(f):
|
||||
"""Декоратор для защиты роутов, требующих аутентификации"""
|
||||
@wraps(f)
|
||||
def decorated_function(*args, **kwargs):
|
||||
if 'authenticated' not in session or not session['authenticated']:
|
||||
return redirect(url_for('login'))
|
||||
return f(*args, **kwargs)
|
||||
return decorated_function
|
||||
|
||||
def get_message_counters_stats(db_path):
|
||||
"""Get message counters statistics directly from database"""
|
||||
try:
|
||||
|
|
@ -97,12 +112,45 @@ def get_message_counters_stats(db_path):
|
|||
'by_command': {}
|
||||
}
|
||||
|
||||
@app.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
"""Страница входа"""
|
||||
if request.method == 'POST':
|
||||
username = request.form.get('username', '').strip()
|
||||
password = request.form.get('password', '')
|
||||
|
||||
if auth_config.validate_credentials(username, password):
|
||||
session['authenticated'] = True
|
||||
session['username'] = username
|
||||
return redirect(url_for('index'))
|
||||
else:
|
||||
error_msg = 'Неверный логин или пароль'
|
||||
return redirect(url_for('login', error=error_msg))
|
||||
|
||||
# GET запрос - показать форму логина
|
||||
error = request.args.get('error', '')
|
||||
# Если уже авторизован, перенаправляем на главную
|
||||
if 'authenticated' in session and session.get('authenticated'):
|
||||
return redirect(url_for('index'))
|
||||
return render_template('login.html', error=error)
|
||||
|
||||
|
||||
@app.route('/logout')
|
||||
def logout():
|
||||
"""Выход из системы"""
|
||||
session.pop('authenticated', None)
|
||||
session.pop('username', None)
|
||||
return redirect(url_for('login'))
|
||||
|
||||
|
||||
@app.route('/')
|
||||
@login_required
|
||||
def index():
|
||||
"""Главная страница"""
|
||||
return render_template('index.html')
|
||||
|
||||
@app.route('/api/users')
|
||||
@login_required
|
||||
def get_users():
|
||||
"""Получить всех пользователей"""
|
||||
try:
|
||||
|
|
@ -217,6 +265,7 @@ def get_users():
|
|||
}), 500
|
||||
|
||||
@app.route('/api/users/<int:user_id>/gamers')
|
||||
@login_required
|
||||
def get_user_gamers(user_id):
|
||||
"""Получить игроков конкретного пользователя"""
|
||||
try:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue