2025-11-23 02:36:15 +03:00
|
|
|
"""Модуль для загрузки конфигурации аутентификации"""
|
|
|
|
|
import json
|
|
|
|
|
import os
|
|
|
|
|
from typing import Dict, List, Optional
|
|
|
|
|
|
|
|
|
|
AUTH_CONFIG_PATH = "/app/auth_config.json"
|
|
|
|
|
AUTH_CONFIG_EXAMPLE_PATH = "/app/auth_config.example.json"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def load_auth_config() -> Optional[Dict]:
|
|
|
|
|
"""
|
|
|
|
|
Загружает конфигурацию аутентификации из файла.
|
|
|
|
|
Возвращает None, если файл не найден.
|
|
|
|
|
"""
|
|
|
|
|
config_path = AUTH_CONFIG_PATH
|
|
|
|
|
|
|
|
|
|
# Если файл не существует, пробуем example
|
|
|
|
|
if not os.path.exists(config_path):
|
|
|
|
|
if os.path.exists(AUTH_CONFIG_EXAMPLE_PATH):
|
|
|
|
|
print(f"Warning: {config_path} not found, using example config")
|
|
|
|
|
config_path = AUTH_CONFIG_EXAMPLE_PATH
|
|
|
|
|
else:
|
|
|
|
|
print(f"Error: Neither {AUTH_CONFIG_PATH} nor {AUTH_CONFIG_EXAMPLE_PATH} found")
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
with open(config_path, 'r', encoding='utf-8') as f:
|
|
|
|
|
config = json.load(f)
|
|
|
|
|
return config
|
|
|
|
|
except json.JSONDecodeError as e:
|
|
|
|
|
print(f"Error parsing auth config: {e}")
|
|
|
|
|
return None
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"Error loading auth config: {e}")
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_users() -> List[Dict[str, str]]:
|
|
|
|
|
"""
|
|
|
|
|
Возвращает список пользователей из конфига.
|
|
|
|
|
"""
|
|
|
|
|
config = load_auth_config()
|
|
|
|
|
if not config:
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
return config.get('users', [])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def validate_credentials(username: str, password: str) -> bool:
|
|
|
|
|
"""
|
|
|
|
|
Проверяет правильность логина и пароля.
|
|
|
|
|
"""
|
|
|
|
|
users = get_users()
|
|
|
|
|
|
|
|
|
|
for user in users:
|
|
|
|
|
if user.get('username') == username and user.get('password') == password:
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
return False
|
|
|
|
|
|
2025-11-23 12:51:14 +03:00
|
|
|
|