Восстановление репозитория
This commit is contained in:
196
auth.py
Normal file
196
auth.py
Normal file
@@ -0,0 +1,196 @@
|
||||
# auth.py
|
||||
"""
|
||||
Основной модуль системы авторизации
|
||||
"""
|
||||
from flask import Flask, request, jsonify
|
||||
from flask_cors import CORS
|
||||
from typing import Dict, Any
|
||||
import database
|
||||
import validators
|
||||
from config import DEBUG_MODE
|
||||
|
||||
|
||||
def debug_log(message: str) -> None:
|
||||
"""Вывод отладочных сообщений"""
|
||||
if DEBUG_MODE:
|
||||
print(f"[DEBUG] {message}")
|
||||
|
||||
|
||||
# Инициализация Flask приложения
|
||||
app = Flask(__name__)
|
||||
CORS(app) # Разрешаем CORS для Vue/React
|
||||
|
||||
# Инициализация базы данных при запуске
|
||||
database.init_database()
|
||||
|
||||
|
||||
@app.route('/api/register', methods=['POST'])
|
||||
def register() -> Dict[str, Any]:
|
||||
"""
|
||||
Эндпоинт регистрации нового пользователя
|
||||
|
||||
Ожидаемые данные (JSON):
|
||||
{
|
||||
"username": "user_login",
|
||||
"password": "user_password",
|
||||
"password_confirm": "user_password"
|
||||
}
|
||||
|
||||
Возвращает (JSON):
|
||||
{
|
||||
"success": true/false,
|
||||
"message": "сообщение",
|
||||
"errors": {...} # при наличии ошибок валидации
|
||||
}
|
||||
"""
|
||||
debug_log("=== Запрос на регистрацию ===")
|
||||
|
||||
try:
|
||||
data = request.get_json()
|
||||
debug_log(f"Получены данные: username={data.get('username')}")
|
||||
|
||||
username = data.get('username', '').strip()
|
||||
password = data.get('password', '')
|
||||
password_confirm = data.get('password_confirm', '')
|
||||
|
||||
errors = {}
|
||||
|
||||
# Валидация логина
|
||||
is_valid_username, username_error = validators.validate_username(username)
|
||||
if not is_valid_username:
|
||||
errors['username'] = username_error
|
||||
|
||||
# Валидация пароля
|
||||
is_valid_password, password_error = validators.validate_password(password)
|
||||
if not is_valid_password:
|
||||
errors['password'] = password_error
|
||||
|
||||
# Проверка совпадения паролей
|
||||
is_passwords_match, match_error = validators.validate_password_confirmation(
|
||||
password, password_confirm
|
||||
)
|
||||
if not is_passwords_match:
|
||||
errors['password_confirm'] = match_error
|
||||
|
||||
# Если есть ошибки валидации
|
||||
if errors:
|
||||
debug_log(f"Ошибки валидации: {errors}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': 'Ошибки валидации данных',
|
||||
'errors': errors
|
||||
}), 400
|
||||
|
||||
# Создание пользователя
|
||||
success, message = database.create_user(username, password)
|
||||
|
||||
if success:
|
||||
debug_log("Регистрация завершена успешно")
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': message
|
||||
}), 201
|
||||
else:
|
||||
debug_log(f"Ошибка регистрации: {message}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': message
|
||||
}), 400
|
||||
|
||||
except Exception as e:
|
||||
debug_log(f"Необработанная ошибка: {e}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': 'Внутренняя ошибка сервера'
|
||||
}), 500
|
||||
|
||||
|
||||
@app.route('/api/login', methods=['POST'])
|
||||
def login() -> Dict[str, Any]:
|
||||
"""
|
||||
Эндпоинт входа пользователя
|
||||
|
||||
Ожидаемые данные (JSON):
|
||||
{
|
||||
"username": "user_login",
|
||||
"password": "user_password"
|
||||
}
|
||||
|
||||
Возвращает (JSON):
|
||||
{
|
||||
"success": true/false,
|
||||
"message": "сообщение",
|
||||
"user": {...} # данные пользователя при успехе
|
||||
}
|
||||
"""
|
||||
debug_log("=== Запрос на вход ===")
|
||||
|
||||
try:
|
||||
data = request.get_json()
|
||||
debug_log(f"Получены данные: username={data.get('username')}")
|
||||
|
||||
username = data.get('username', '').strip()
|
||||
password = data.get('password', '')
|
||||
|
||||
errors = {}
|
||||
|
||||
# Валидация логина
|
||||
is_valid_username, username_error = validators.validate_username(username)
|
||||
if not is_valid_username:
|
||||
errors['username'] = username_error
|
||||
|
||||
# Валидация пароля
|
||||
is_valid_password, password_error = validators.validate_password(password)
|
||||
if not is_valid_password:
|
||||
errors['password'] = password_error
|
||||
|
||||
# Если есть ошибки валидации
|
||||
if errors:
|
||||
debug_log(f"Ошибки валидации: {errors}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': 'Ошибки валидации данных',
|
||||
'errors': errors
|
||||
}), 400
|
||||
|
||||
# Проверка учетных данных
|
||||
success, message = database.verify_user(username, password)
|
||||
|
||||
if success:
|
||||
debug_log("Вход выполнен успешно")
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': message,
|
||||
'user': {
|
||||
'username': username
|
||||
}
|
||||
}), 200
|
||||
else:
|
||||
debug_log(f"Ошибка входа: {message}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': message
|
||||
}), 401
|
||||
|
||||
except Exception as e:
|
||||
debug_log(f"Необработанная ошибка: {e}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': 'Внутренняя ошибка сервера'
|
||||
}), 500
|
||||
|
||||
|
||||
@app.route('/api/health', methods=['GET'])
|
||||
def health_check():
|
||||
"""Проверка работоспособности API"""
|
||||
return jsonify({
|
||||
'status': 'ok',
|
||||
'message': 'API работает'
|
||||
}), 200
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
debug_log("=== Запуск сервера авторизации ===")
|
||||
debug_log(f"DEBUG_MODE: {DEBUG_MODE}")
|
||||
app.run(debug=DEBUG_MODE, host='0.0.0.0', port=5000)
|
||||
|
||||
Reference in New Issue
Block a user