Стек: Flask, Flasgger, Marshmallow, SqlAlchemy, Flask Dance
Анонимный пользователь может:
- Создать аккаунт, если выбранный email ещё не зарегистрирован в системе.
- Зарегистрироваться через социальную сеть.
- Войти в свой аккаунт по логину и паролю.
- Войти в свой аккаунт через социальную сеть с использованием OAuth 2.0.
Авторизированный пользователь может:
- Изменить свои личные данные — логин или пароль.
- Просмотреть историю входов в аккаунт.
- Посмотреть связанные аккаунты в социальных сетях.
- Открепить аккаунт социальной сети.
Запустить проект на продакшене:
make prod_run
Сбилдить образ:
make build
Запустить окружение
make run_environment
Запустить сервис или его тесты
make run_service
make run_tests
Swagger-схема доступна по:
По дефолту создан пользователь superuser c паролем super_password
Для авторизации ендпоинтов в api в поле Authorization перед токеном необходимо добавлят JWT:
JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NzAyNTg0MDgsImlhdCI6MTY3MDI1NzgwOCwibmJmIjoxNjcwMjU3ODA4LCJzdWIiOiJcImI5NjZhOGVjMmZiNTRlYjFiNmRiMTYwZDMwZDQ1YzdkXCIiLCJyb2xlIjoic3VwZXJ1c2VyIn0.zwysTVm9vkkGYIVB76GyDfW47TlioP0tYuTxOyciSs0
Для ограничения запросов к эндойнтам сервисов используется декоратор @rare_limit с параметром, который представляет собой ограничение количества запросов в секунду для каждого авторизованного пользователя Для задержки выполнения запросов предусмотрен параметр delay в
def ratelimit(
self,
*identities: str,
delay: bool = False,
max_delay: Union[int, float] = None,
),
который используется при реализации декоратора в методе
def delay_or_reraise(self, err: BucketFullException) -> float`
Если delay = False, то ответы будут сразу выдаваться с ошибкой 429:
if self.delay and not exceeded_max_delay:
return delay_time
abort(429, description="Too many requests")
Добавлен дополнительный HTTP-заголовок X-Request-Id в NGINX для связки запросов. Проверка присутствия заголовка осуществляется в декораторе @app.before_request.