Skip to content

PROTUS helps any online-service to automate billing user's account and increase it's audience by providing OAuth Login for Protus users. Boilerplate is based on FastAPI & Vue.js & Django integration module

Notifications You must be signed in to change notification settings

KD3821/protus_demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

protus_demo

PROTUS - система биллинга аккаунтов пользователей интернет-сервисов


Функционал:

Для Пользователя PROTUS:

  • Регистрация в сервисе PROTUS.
  • Попополнение баланса кошелька (в процессе... пока устанавливаем в БД).
  • Вход в партнерские интернет-сервисы (интегрированные с PROTUS), с помощью аккаунта PROTUS (по OAuth - выпускается только AccessToken и с возможностью ограничить scope для токена. Полный scope "check hold charge" - подразумевает доступ интернет-сервиса к проверке баланса кошелька, блокированию средств, списанию средств за услуги).
  • Просмотр состояния своих аккаунтов в различных интернет-сервисах (в этом цикле реализован только просмотр суммы расходов для каждого аккаунта).

Для Компании-партнера:

  • Регистрация компании и выдача ключа доступа к API, ключа для обработки входящих HTTP запросов на webhook компании-клиента.
  • Назначение WEBHOOK URL для запросов от PROTUS API (в процессе... пока устанавливаем в БД).
  • Регистрация услуги, для которой будет реализован биллинг аккаунтов пользователей (в процессе... пока устанавливаем в БД).
  • Биллинг аккаунтов непосредственных пользователей сервиса.
  • Просмотр состояния аккаунтов пользователей (в этом цикле реализован только просмотр суммы расходов для каждого аккаунта).

Для интеграции с сервисами-партнерами, реализованных на Django + DRF, разработан модуль PROTUS-DJANGO (пока модуль реализован как отдельный app 'protus' в демо-сервисе)

  • предоставляет свою систему JWT токенов (логика заимствована из модуля "djangorestframework-simplejwt")
  • предоставляет возможность пользователям PROTUS авторизоваться по OAuth в сервисе и оплачивать услуги с помощью кошелька PROTUS.
  • для непосредственных пользователей сервиса при первом входе регистрирует aккаунт + кошелек в PROTUS (требует кастомизации модели User - добавление полей uuid и oauth_verified)
  • предоставляет набор permissions, при добавлении которых к permission_classes для View-класса будет производится интроспекция токена для оаuth_verified пользователей (т.е. для пользователей, авторизованных с помощью PROTUS будет проверяться присутствие в scope токена нужных полей из списка "check hold charge", и что токен не был "отозван" на стороне PROTUS). Для непосредственных пользователей сервиса-клиента планируется, что набор scope будет максимальный для осуществления биллинга. Из permissions пока будет реализован ProtusChargePermission - проверяет наличие "charge" в scope токена, что позволяет списывать деньги с баланса кошелька пользователя PROTUS (oauth_verified). В данном цикле пополнение баланса PROTUS кошелька для непосредственных пользовтелей сервиса не будет реализовано.

Сервис PROTUS - это 3 микросервиса на FastAPI + модуль для Django(DRF):

  • GATEWAY (fast_gate)
  • AUTH (fast_auth)
  • PAYMENTS (fast_pay)
  • PROTUS-DJANGO (messages_app/protus) - оформление в модуль в процессе... в демо-приложении реализован как отдельный app 'protus'

Фронтенд PROTUS на Vue.js + Vuetify

MIRO: https://miro.com/app/board/uXjVKOFkZtk=/?share_link_id=649411215399

Команды для запуска:

  • Создайте .env файл в папках backend-приложений ('fast_auth', 'fast_gate', 'fast_pay', 'messages_app') - используйте данные из файлов env.example для каждого приложения.
  • Перед запуском docker-compose из консоли установите пароль для POSTGRES в переменную среды командой: export POSTGRES_PASSWORD=Billing123 (ваш пароль должен совпадать с паролями в .env файле - используем общий пароль).
  • Также измените дефолтное значение таймаута для HTTP-соединения у контейнеров в момент сборки - из консоли запустите команду: export COMPOSE_HTTP_TIMEOUT=600 (вместо 60 сек. - 600 сек. либо больше).
  • Запустите команду в консоли: docker-compose -f docker-compose.yml up --build (дождитесь завершения сборки сети контейнеров).
  • Если по какой-то причине процесс остановился с ошибкой - вызовите команду из консоли: docker-compose down и дождитесь остановки. Затем повторите предыдущий шаг.

Для Django приложения: войдите в контейнер backend-messages
( sudo docker exec -it backend-messages /bin/bash -c "su - root" )
и выполнить:

cd /code/

python manage.py createsuperuser

авторизуйтесь в Django Admin ( http://127.0.0.1:8000/admin ) и установите 'IntervalSchedule' для Celery Beat: 5, 10, 30 секунд (три интервала) - подробности работы django-приложения см. тут


Для Payments приложения: войти в контейнер backend_protus_pay
( sudo docker exec -it backend_protus_pay /bin/bash -c "su - root" )
и выполнить:

cd /app/src/

alembic revision --autogenerate -m "initial on build" (создаем миграции и таблицы БД)

alembic upgrade head

python -m proto.grpc_server & (запускаем gRPC сервер)


Для Auth приложения: войти в контейнер backend_protus_auth ( sudo docker exec -it backend_protus_auth /bin/bash -c "su - root" )
и выполнить:

cd /app/src/

alembic revision --autogenerate -m "initial on build" (создаем миграции и таблицы БД)

alembic upgrade head

python -m proto.grpc_server & (запускаем gRPC сервер)


Демонстрация работы:

  • Переходим на сайт сервиса PROTUS (http://127.0.0.1:8080) и регистрируем компанию в сервисе "PROTUS" (любые данные).
  • Подключаемся к БД 'fast_auth_db' (БД для AUTH-приложения) и меняем сгенерированные 'CLIENT_ID', 'CLIENT_SECRET', 'WH_SECRET' на свои из.env в messages_app (чтобы не перезапускать docker-compose).
  • Заполняем данные для 'WH_URL': "/api/webhook/" (для POST-запросов от PROTUS-сервиса).
  • Повторяем все для 'fast_pay_db' (БД для PAYMENTS-приложения).
  • Добавляем две услуги в таблице services в 'fast_pay_db' (Можно назвать их "Клиент", "Рассылка" - цены любые) - для service_id используем данные из.env в messages_app (чтобы не перезапускать docker-compose).
  • Далее регистрируем пользователя - при желании можно в БД 'fast_pay_db' прописать баланс его кошелька в таблице 'wallets' (при регистрации баланс равен 0 - игнорируем поля 'debit', 'credit' - они пока не задействованы в логике).
  • Переходим на сайт компании-партнера (http://127.0.0.1:8088) и входим в сервис через "вход с PROTUS" разрешив все действия для Access Token.
  • Далее пользуемся сервисом - соглашаемся оплатить услуги по добавлению нового клиента и по запуску рассылок (подробнее о работе сервиса компании партнера см. тут.
  • Проверяем на сайте PROTUS в ЛК Компании и Пользователя списания средств.
  • Далее проверяем логику работы биллинга для обычного пользователя сервиса компании-партнера: регистрируем на сайте партнера нового пользователя - получаем услуги - проверяем в ЛК компании на сайте PROTUS создание аккаунта и биллинг.
  • Для запуска сервиса можно обратиться за консультацией.

About

PROTUS helps any online-service to automate billing user's account and increase it's audience by providing OAuth Login for Protus users. Boilerplate is based on FastAPI & Vue.js & Django integration module

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published