Auth-movies
🚪 API сервис авторизации для Онлайн кинотеатра
Auth-movies - это API сервис авторизации, который обеспечивает мощную и безопасную идентификацию и аутентификацию пользователей. Используя современные стандарты JWT и OAuth2, он предлагает гибкий интерфейс для интеграции с любыми приложениями или сервисами. С функционалом управления разрешениями, он позволяет настраивать сложные ролевые модели, обеспечивая точный контроль доступа.
💻 Исходный код: https://github.com/xczdenis/movies_auth
📖 Документация: https://xczdenis.github.io/movies_auth
📝 Open API: http://127.0.0.1:5001/api/v1/swagger
✨ Особенности 🔝
- Python 3.11+;
- Асинхронный Flask:
- С помощью библиотеки
gevent
приложение наFlask
становится асинхронным; Blueprints
модули для разделения кода;- flask-sqlalchemy для работы с базой данных;
- flask-migrate для миграций;
- flask-jwt-extended для управления JWT;
- flasgger для OpenAPI;
- flask-pydantic для валидации параметров запросов;
- flask-marshmallow для сериализации данных;
- С помощью библиотеки
OAuth2
авторизация;- Хеширование паролей;
PostgreSQL
- основная БД;Redis
- кэш БД, в том числе для хранения отозванных JWT токенов;Jaeger
- распределенная трассировка запросов;Nginx
- proxy-сервер;- Кастомные Faker провайдеры для генерации данных, для полноценного тестирования;
- Полная Docker интеграция:
- тонкие образы - multi-stage сборка;
- docker-compose для локальной разработки;
- тесты в Docker;
- Pre-commit хуки, чтобы код всегда был в отличном состоянии;
- Conventional commits - строгое соблюдение правил написания коммитов;
- Makefile для удобного запуска команд;
- CI/CD:
- Telegram оповещение об успешных пулл реквестах;
- Линтинг;
- Тесты в докере;
- Автоматические билдинг документации;
- Удобные sh скрипты:
🎨 Функционал сервиса 🔝
- Хранение пользователей;
- Регистрация/вход/выход пользователей;
- Авторизация по протоколу OAuth2;
- Аутентификация по JWT;
- Управление разрешениями;
- История входов.
📚 Requirements 🔝
Для запуска проекта понадобится:
- Docker (version ^23.0.5). Инструкциям по установке;
- Docker compose (version ^2.17.3). Инструкциям по установке;
🚀 Быстрый старт 🔝
Все команды, приведенные в данном руководстве, выполняются из корневой директории проекта, если иное не указано в описании конкретной команды.
Note
В этом разделе описан процесс быстрого запуска проекта в докере. Более подробную информацию о работе с сервисом смотри в разделах данного руководства.
🛠 Настройка переменных окружения 🔝
Если у тебя доступно выполнение команд с помощью make
, то смотри вкладку Make
. Иначе смотри
команду на вкладке Native
.
Для запуска проекта потребуются переменные окружения, они хранятся в файле .env
. Создай файл .env
,
выполнив следующую команду:
$ make env
File <span style="color: lightgreen;">.env</span> created from <span style="color: lightgreen;">.env.template</span>!
$ cp .env.template .env
File <span style="color: lightgreen;">.env</span> created from <span style="color: lightgreen;">.env.template</span>!
Можно просто создать файл .env
копированием шаблона .env.template
.
🏁 Запуск проекта 🔝
Запустить проект в докере:
$ make run
---> 100%
✔ Network movies_auth_default <span style="color: lightgreen;">Created</span>
✔ Container movies_auth-redis-1 <span style="color: lightgreen;">Started</span>
✔ Container movies_auth-jaeger-1 <span style="color: lightgreen;">Started</span>
✔ Container movies_auth-postgres-1 <span style="color: lightgreen;">Healthy</span>
✔ Container movies_auth-app-1 <span style="color: lightgreen;">Healthy</span>
✔ Container movies_auth-proxy-1 <span style="color: lightgreen;">Started</span>
$ docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build
---> 100%
✔ Network movies_auth_default <span style="color: lightgreen;">Created</span>
✔ Container movies_auth-redis-1 <span style="color: lightgreen;">Started</span>
✔ Container movies_auth-jaeger-1 <span style="color: lightgreen;">Started</span>
✔ Container movies_auth-postgres-1 <span style="color: lightgreen;">Healthy</span>
✔ Container movies_auth-app-1 <span style="color: lightgreen;">Healthy</span>
✔ Container movies_auth-proxy-1 <span style="color: lightgreen;">Started</span>
Что делает команда make run
Команда make run
запускает проект в докере, используя docker-compose.
🧪 Тесты 🔝
Выполни make run
перед запуском тестов локально
Для локального запуска тестов требуются запущенные контейнеры с базой данных и Redis. Поэтому перед
локальным запуском тестов, выполни команду make run
.
Запустить тесты локально:
$ make tests
---> 100%
::TestSignin... <span style="color: green;">PASSED [ 5%]</span>
::TestSignup... <span style="color: green;">PASSED [ 10%]</span>
::TestRefresh... <span style="color: green;">PASSED [ 15%]</span>
::TestLogout... <span style="color: green;">PASSED [ 20%]</span>
...
tests... <span style="color: green;">PASSED [100%]</span>
$ python -m pytest
---> 100%
::TestSignin... <span style="color: green;">PASSED [ 5%]</span>
::TestSignup... <span style="color: green;">PASSED [ 10%]</span>
::TestRefresh... <span style="color: green;">PASSED [ 15%]</span>
::TestLogout... <span style="color: green;">PASSED [ 20%]</span>
...
tests... <span style="color: green;">PASSED [100%]</span>
Запустить тесты в докере:
$ make tests-docker
---> 100%
::TestSignin... <span style="color: green;">PASSED [ 5%]</span>
::TestSignup... <span style="color: green;">PASSED [ 10%]</span>
::TestRefresh... <span style="color: green;">PASSED [ 15%]</span>
::TestLogout... <span style="color: green;">PASSED [ 20%]</span>
...
tests... <span style="color: green;">PASSED [100%]</span>
$ docker-compose -f docker-compose.yml -f docker-compose.test.yml --profile default --profile tests build
$ docker-compose -f docker-compose.yml -f docker-compose.test.yml --profile default --profile tests run tests
---> 100%
::TestSignin... <span style="color: green;">PASSED [ 5%]</span>
::TestSignup... <span style="color: green;">PASSED [ 10%]</span>
::TestRefresh... <span style="color: green;">PASSED [ 15%]</span>
::TestLogout... <span style="color: green;">PASSED [ 20%]</span>
...
tests... <span style="color: green;">PASSED [100%]</span>