Ktor-сервис для PoC решений в области аутентификации/авторизации
- Введение
- Используемые инструменты
- Развертка
- Использование
- Использование развёрнутой системы
- Публикация
Проект содержит исходный код и docker-compose файл для развертки сервиса и окружения.
Основные функции сервиса:
- управление ЖЦ системных (не персональных) данных учётной записи клиента;
- аутентификация клиента;
- предоставление данных для авторизации клиента в смежных системах.
Процесс импорта проекта в IntellijIDEA не требует дополнительных настроек локальной среды.
Проект может быть импортирован в IDE с помощью меню File->New->Project from existing sources->Gradle
.
Сервис построен с использованиием следующих инструментов:
Полный список используемых библиотек можно найти в файле libs.versions.toml
Наиболее удобно развернуть сервис и все стоонние системы используя Docker.
docker-compose up -d
Compose включает в себя следующие инструменты, каждый из которых доступен для подключения по localhost:
- Postgres - localhost:5432
- Redis - localhost:6379
- Otel Collector - localhost:4317/4318/4319
- Сам сервис - localhost:8080
Сервис может разворачиваться и локально, с использованием собранного исходного кода вместо docker-образа. Для этого необходимо изначально провести развертку с использованием Docker compose файла, после этого удалить контейнер с сервисом (service), собрать проект и запустить его либо через IDE, либо внеся изменения в docker compose файл - раскомментировать строки build/context контейнера service и убрать настройку образа.
Healthcheck
API доступны по /health
пути
Также для ручного вызова доступны API сервиса по адресу localhost:8080
.
API использует форматы данных Cbor и Json, выбирается в зависимости от переданных заголовков.
Когда проект собирается с использованием build
задачи gradle detekt и ktlint проверки проходят автоматически.
Detekt отчет формируется по путям ./build/app/reports/detekt
, ./build/api/reports/detekt
.
Также есть возможность запускать проверки вручную командой
.\gradlew detekt
Тестирование и измерение покрытия также проходят автоматически при вызове команды build
.
Покрытие измеряется инструментом kover, который в свою очередь использует движок JaCoCo.
Отчеты по покрытию (xml для sonar-инструментов и html для локальной разработки)
формируются по путям ./build/app/reports/kover/report.xml
, ./build/app/reports/kover/html/index.html
.
Также есть возможность вызвать тестирование и измерение покрытия вручную, вызвав команду
.\gradlew test koverPrintCoverage
Процент покрытия также можно смотреть и в самой IDE.
Для этого достаточно правой кнопкой мыши кликнуть на папку test и запустить задачу Run with Coverage.
Важно! Тесты не пройдут, если одновременно в докере развернут compose!
Прохождение Quality Gate реализовано с использованием gradle плагина sonarqube. Вызвать прохождение можно командами:
.\gradlew build
.\gradlew sonar -D"sonar.host.url"="<SONAR_HOST>" -D"sonar.token"="YOUR_TOKEN" -D"sonar.projectKey"="KEY" -D"sonar.organization"="ORG"
При вызове sonar с помощью gradle задачи сгенерированный detekt отчет и kover отчет будут добавлен к анализу.
Для тестирования будет полезна возможность локальной публикации пакетов в mavenLocal.
Для этого используется команда publishToMavenLocal.
.\gradlew publishToMavenLocal
В результате выполнения команды в .m2 папке пользователя появится артефакт auth-service-api, который будет содержать все
необходимые dto-классы, proto-файлы и другие нужные для взаимодействия с сервисом интерфейсы.