auth-wip
This commit is contained in:
184
CHANGELOG.md
184
CHANGELOG.md
@@ -1,150 +1,66 @@
|
||||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Изменено
|
||||
- Радикально упрощена структура клиентской части приложения:
|
||||
- Удалены все избыточные файлы и директории
|
||||
- Перемещены модули auth.ts и api.ts из директории client/lib в корень директории client
|
||||
- Обновлены импорты во всех компонентах для использования модулей из корня директории
|
||||
- Создана минималистичная архитектура с 5 файлами (App, login, admin, auth, api)
|
||||
- Следование принципу DRY - устранено дублирование кода
|
||||
- Выделены общие модули для авторизации и работы с API
|
||||
- Единый стиль кода и документации для всех компонентов
|
||||
- Устранены все жесткие редиректы в пользу SolidJS Router
|
||||
- Упрощена структура проекта для лучшей поддерживаемости
|
||||
- Упрощена структура клиентской части приложения:
|
||||
- Оставлены только два основных ресурса: логин и панель управления пользователями
|
||||
- Удалены избыточные компоненты и файлы
|
||||
- Упрощена логика авторизации и навигации
|
||||
- Устранены жесткие редиректы в пользу SolidJS Router
|
||||
- Созданы компактные и автономные компоненты login.tsx и admin.tsx
|
||||
- Оптимизированы стили для минимального набора компонентов
|
||||
#### [0.4.22] - 2025-05-21
|
||||
|
||||
### Добавлено
|
||||
- Создана панель управления пользователями в админке:
|
||||
- Добавлен компонент UsersList для управления пользователями
|
||||
- Реализованы функции блокировки/разблокировки пользователей
|
||||
- Добавлена возможность отключения звука (mute) для пользователей
|
||||
- Реализовано управление ролями пользователей через модальное окно
|
||||
- Добавлены GraphQL мутации для управления пользователями в schema/admin.graphql
|
||||
- Улучшен интерфейс админ-панели с табами для навигации
|
||||
- Расширена схема GraphQL для админки:
|
||||
- Добавлены типы AdminUserInfo и AdminUserUpdateInput
|
||||
- Добавлены мутации adminUpdateUser, adminToggleUserBlock, adminToggleUserMute
|
||||
- Добавлены запросы adminGetUsers и adminGetRoles
|
||||
- Пагинация списка пользователей в админ-панели
|
||||
- Серверная поддержка пагинации в API для админ-панели
|
||||
- Поиск пользователей по email, имени и ID
|
||||
- Поддержка локального запуска сервера с HTTPS через `python run.py --https` с использованием Granian
|
||||
- Интеграция с инструментом mkcert для генерации доверенных локальных SSL-сертификатов
|
||||
- Поддержка запуска нескольких рабочих процессов через параметр `--workers`
|
||||
- Возможность указать произвольный домен для сертификата через `--domain`
|
||||
- Панель управления:
|
||||
- Управление переменными окружения с группировкой по категориям
|
||||
- Управление пользователями (блокировка, изменение ролей, отключение звука)
|
||||
- Пагинация и поиск пользователей по email, имени и ID
|
||||
- Расширение GraphQL схемы для админки:
|
||||
- Типы AdminUserInfo, AdminUserUpdateInput, AuthResult, Permission, SessionInfo
|
||||
- Мутации для управления пользователями и авторизации
|
||||
- Улучшения серверной части:
|
||||
- Поддержка HTTPS через Granian с помощью mkcert
|
||||
- Параметры запуска `--https`, `--workers`, `--domain`
|
||||
- Система авторизации и аутентификации:
|
||||
- Локальная система аутентификации с сессиями в Redis
|
||||
- Система ролей и разрешений (RBAC)
|
||||
- Защита от брутфорс атак
|
||||
- Поддержка httpOnly cookies для токенов
|
||||
- Мультиязычные email уведомления
|
||||
|
||||
### Улучшено
|
||||
- Улучшен интерфейс админ-панели:
|
||||
- Добавлены вкладки для переключения между разделами
|
||||
- Оптимизирован компонент UsersList для работы с большим количеством пользователей
|
||||
- Добавлены индикаторы статуса для заблокированных и отключенных пользователей
|
||||
- Улучшена обработка ошибок при выполнении операций с пользователями
|
||||
- Добавлены подтверждения для критичных операций (блокировка, изменение ролей)
|
||||
|
||||
### Полностью переработан клиентский код:
|
||||
- Создан компактный API клиент с изолированным кодом для доступа к API
|
||||
- Реализована модульная архитектура с четким разделением ответственности
|
||||
- Добавлены типизированные интерфейсы для всех компонентов и модулей
|
||||
- Реализована система маршрутизации с защищенными маршрутами
|
||||
- Добавлен компонент AuthProvider для управления авторизацией
|
||||
- Оптимизирована загрузка компонентов с использованием ленивой загрузки
|
||||
- Унифицирован стиль кода и именования
|
||||
### Изменено
|
||||
- Упрощена структура клиентской части приложения:
|
||||
- Минималистичная архитектура с основными компонентами (авторизация и админка)
|
||||
- Оптимизированы и унифицированы компоненты, следуя принципу DRY
|
||||
- Реализована система маршрутизации с защищенными маршрутами
|
||||
- Разделение ответственности между компонентами
|
||||
- Типизированные интерфейсы для всех модулей
|
||||
- Отказ от жестких редиректов в пользу SolidJS Router
|
||||
- Переработан модуль авторизации:
|
||||
- Унификация типов для работы с пользователями
|
||||
- Использование единого типа Author во всех запросах
|
||||
- Расширенное логирование для отладки
|
||||
- Оптимизированное хранение и проверка токенов
|
||||
- Унифицированная обработка сессий
|
||||
|
||||
### Исправлено
|
||||
- Исправлена критическая проблема с JWT-токенами авторизации:
|
||||
- Устранена ошибка декодирования токенов `int() argument must be a string, a bytes-like object or a real number, not 'NoneType'`
|
||||
- Обновлен механизм создания токенов для гарантированного задания срока истечения (exp)
|
||||
- Улучшена обработка ошибок в модуле аутентификации для предотвращения создания невалидных токенов
|
||||
- Стандартизован формат параметра exp в JWT: теперь всегда используется timestamp вместо datetime
|
||||
- Добавлена проверка наличия обязательных полей при декодировании токенов
|
||||
- Оптимизирована совместимость между разными способами хранения сессий
|
||||
- Исправлена проблема с перенаправлением в SolidJS, которое сбрасывало состояние приложения:
|
||||
- Обновлена функция logout для использования колбэка навигации вместо жесткого редиректа
|
||||
- Добавлен компонент LoginPage для авторизации без перезагрузки страницы
|
||||
- Реализована ленивая загрузка компонентов с использованием Suspense
|
||||
- Улучшена структура роутинга в админ-панели
|
||||
- Оптимизирован код согласно принципам DRY и KISS
|
||||
- Критические проблемы с JWT-токенами:
|
||||
- Корректная генерация срока истечения токенов (exp)
|
||||
- Стандартизованный формат параметров в JWT
|
||||
- Проверка обязательных полей при декодировании
|
||||
- Ошибки авторизации:
|
||||
- "Cannot return null for non-nullable field Mutation.login"
|
||||
- "Author password is empty" при авторизации
|
||||
- "Author object has no attribute username"
|
||||
- Обработка ошибок:
|
||||
- Улучшена валидация email и username
|
||||
- Исправлена обработка истекших токенов
|
||||
- Добавлены проверки на NULL объекты в декораторах
|
||||
- Вспомогательные компоненты:
|
||||
- Исправлен метод dict() класса Author
|
||||
- Добавлен AuthenticationMiddleware
|
||||
- Реализован класс AuthenticatedUser
|
||||
|
||||
### Улучшения для авторизации в админ-панели
|
||||
|
||||
- Исправлена проблема с авторизацией в админ-панели
|
||||
- Добавлена поддержка httpOnly cookies для безопасного хранения токена авторизации
|
||||
- Реализован механизм выхода из системы через отзыв токенов
|
||||
- Добавлен компонент для отображения списка пользователей в админке
|
||||
- Добавлена постраничная навигация между управлением переменными окружения и списком пользователей
|
||||
- Улучшена обработка сессий в API GraphQL
|
||||
|
||||
### Исправлено
|
||||
- Переработан резолвер login_mutation для соответствия общему стилю других мутаций в кодбазе
|
||||
- Реализована корректная обработка логина через `AuthResult`, устранена ошибка GraphQL "Cannot return null for non-nullable field Mutation.login"
|
||||
- Улучшена обработка ошибок в модуле авторизации:
|
||||
- Добавлена проверка корректности объекта автора перед созданием токена
|
||||
- Исправлен порядок импорта резолверов для корректной регистрации обработчиков
|
||||
- Добавлено расширенное логирование для отладки авторизации
|
||||
- Гарантирован непустой возврат из резолвера login для предотвращения GraphQL ошибки
|
||||
- Исправлена ошибка "Author password is empty" при авторизации:
|
||||
- Добавлено поле password в метод dict() класса Author для корректной передачи при создании экземпляра из словаря
|
||||
- Устранена ошибка `Author object has no attribute username` при создании токена авторизации:
|
||||
- Добавлено свойство username в класс Author для совместимости с `TokenStorage`
|
||||
- Исправлена HTML-форма на странице входа в админ-панель:
|
||||
- Добавлен тег `<form>` для устранения предупреждения браузера о полях пароля вне формы
|
||||
- Улучшена доступность и UX формы логина
|
||||
- Добавлены атрибуты `autocomplete` для улучшения работы с менеджерами паролей
|
||||
- Внедрена более строгая валидация полей и фокусировка на ошибках
|
||||
|
||||
### Added
|
||||
- Подробная документация модуля аутентификации в `docs/auth.md`
|
||||
- Система ролей и разрешений (RBAC)
|
||||
- Защита от брутфорс атак
|
||||
- Мультиязычная поддержка в email уведомлениях
|
||||
### Документировано
|
||||
- Подробная документация по системе авторизации в `docs/auth.md`
|
||||
- Описание OAuth интеграции
|
||||
- Руководство по RBAC
|
||||
- Примеры использования на фронтенде
|
||||
- Инструкции по безопасности
|
||||
- Документация по тестированию
|
||||
- Страница входа для неавторизованных пользователей в админке
|
||||
- Публичное GraphQL API для модуля аутентификации:
|
||||
- Типы: `AuthResult`, `Permission`, `SessionInfo`, `OAuthProvider`
|
||||
- Мутации: `login`, `registerUser`, `sendLink`, `confirmEmail`, `getSession`, `changePassword`, `refreshToken`
|
||||
- Запросы: `logout`, `me`, `isEmailUsed`, `getOAuthProviders`
|
||||
|
||||
### Changed
|
||||
- Переработана структура модуля auth для лучшей модульности
|
||||
- Улучшена обработка ошибок в auth endpoints
|
||||
- Оптимизировано хранение сессий в Redis
|
||||
- Усилена безопасность хеширования паролей
|
||||
- Удалена поддержка удаленной аутентификации в пользу единой локальной системы аутентификации
|
||||
- Удалены настройки `AUTH_MODE` и `AUTH_URL`
|
||||
- Удалены зависимости от внешнего сервиса авторизации
|
||||
- Упрощен код аутентификации
|
||||
- Консолидация типов для авторизации:
|
||||
- Удален дублирующий тип `UserInfo`
|
||||
- Расширен тип `Author` полями для работы с авторизацией (`roles`, `email_verified`)
|
||||
- Использование единого типа `Author` во всех запросах авторизации
|
||||
|
||||
### Fixed
|
||||
- Исправлена проблема с кэшированием разрешений
|
||||
- Улучшена валидация email и username
|
||||
- Исправлена обработка истекших токенов
|
||||
- Исправлена ошибка в функции `get_with_stat` в модуле resolvers/stat.py: добавлен вызов метода `.unique()` для результатов запросов с joined eager loads
|
||||
- Исправлены ошибки в декораторах auth:
|
||||
- Добавлены проверки на None для объекта `info` в декораторах `admin_auth_required` и `require_permission`
|
||||
- Улучшена обработка ошибок в GraphQL контексте
|
||||
- Добавлен AuthenticationMiddleware с использованием InternalAuthentication для работы с request.auth
|
||||
- Исправлена ошибка с классом InternalAuthentication:
|
||||
- Добавлен класс AuthenticatedUser
|
||||
- Реализован корректный возврат кортежа (AuthCredentials, BaseUser) из метода authenticate
|
||||
|
||||
#### [0.4.21] - 2023-09-10
|
||||
#### [0.4.21] - 2025-05-10
|
||||
|
||||
### Изменено
|
||||
- Переработана пагинация в админ-панели: переход с модели page/perPage на limit/offset
|
||||
@@ -155,7 +71,7 @@
|
||||
- Исправлена ошибка GraphQL "Unknown argument 'page' on field 'Query.adminGetUsers'"
|
||||
- Согласованы параметры пагинации между клиентом и сервером
|
||||
|
||||
#### [0.4.20] - 2023-09-01
|
||||
#### [0.4.20] - 2025-05-01
|
||||
|
||||
### Добавлено
|
||||
- Пагинация списка пользователей в админ-панели
|
||||
|
Reference in New Issue
Block a user