Восстановление репозитория

This commit is contained in:
2025-11-06 11:51:53 +03:00
parent 49aa21efde
commit aea18b8a9d
5 changed files with 303 additions and 0 deletions

196
auth.py Normal file
View 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)

75
help.md Normal file
View File

@@ -0,0 +1,75 @@
'''Это копипаста из перплексити, чтобы можно было потестить API без фронтенда. В целом всё работает, и даже очень хорошо работает'''
Установите зависимости:
```bash
pip install -r requirements.txt
```
Запустите бэкенд-сервер:
```bash
python auth.py
```
Сервер запустится на http://localhost:5000.
Тестирование API
Вы можете протестировать API с помощью curl, Postman или прямо из браузера:
Проверка работоспособности:
```bash
curl http://localhost:5000/api/health
```
Регистрация:
```bash
curl -X POST http://localhost:5000/api/register \
-H "Content-Type: application/json" \
-d '{"username":"testuser","password":"Test123456","password_confirm":"Test123456"}'
```
Вход:
```bash
curl -X POST http://localhost:5000/api/login \
-H "Content-Type: application/json" \
-d '{"username":"testuser","password":"Test123456"}'
```
Примеры ответов API
Успешная регистрация:
```json
{
"success": true,
"message": "Регистрация успешна"
}
```
Ошибка валидации:
```json
{
"success": false,
"message": "Ошибки валидации данных",
"errors": {
"username": "Логин должен содержать минимум 4 символа",
"password": "Пароль должен содержать минимум 8 символов, латинские буквы и цифры"
}
}
```
Успешный вход:
```json
{
"success": true,
"message": "Вход выполнен успешно",
"user": {
"username": "testuser"
}
}
```

3
link.txt Normal file
View File

@@ -0,0 +1,3 @@
https://www.perplexity.ai/spaces/tbcmap-GaQAgp1FQ5W.SaTuw2POrw#0
'''Это ссылка на пространство перплексити, где я буду писать код и планировать структуру проекта'''

25
main.py Normal file
View File

@@ -0,0 +1,25 @@
# main.py
"""
Основное окно приложения (шаблон)
Будет открываться после успешной авторизации
"""
def main_window():
"""
Главное окно приложения
Здесь будет основная функциональность вашего приложения
"""
print("=" * 50)
print("ДОБРО ПОЖАЛОВАТЬ В ГЛАВНОЕ ОКНО ПРИЛОЖЕНИЯ")
print("=" * 50)
print("\nЗдесь будет основной функционал приложения")
print("Это окно открывается после успешной авторизации\n")
# Здесь можно добавить основную логику приложения
# Например, меню, функции работы с данными и т.д.
if __name__ == '__main__':
main_window()

4
requirements.txt Normal file
View File

@@ -0,0 +1,4 @@
Flask==3.0.0
Flask-CORS==4.0.0
bcrypt==4.1.2