Данный проект представляет собой сервис генерации и валидации одноразовых OTP-кодов (One-Time Password) с возможностью их доставки через Email, эмулятор SMS, Telegram и сохранение в файл.
Также реализована система регистрации и аутентификации пользователей с разграничением ролей (администратор и пользователь), авторизация по JWT-токенам, логирование, контроль конфигурации OTP-кодов и управление пользователями.
- Java 17
- Spring Boot (MVC, Security, JDBC)
- PostgreSQL 17
- Maven (в качестве системы сборки)
- JWT (JJWT)
- Telegram Bot API
- JavaMailSender (Email)
- SLF4J + Logback (логирование)
Пользовательское API:
- Регистрация и вход пользователей (роль USER)
- Генерация OTP-кодов, привязанных к операциям
- Получение OTP-кодов через Email, SMS, Telegram или файл
- Валидация полученного OTP-кода
Административное API:
- Изменение конфигурации OTP (TTL и длина)
- Получение списка всех пользователей (исключая администраторов)
- Удаление пользователей и всех их OTP-кодов
Проект построен по трёхслойной архитектуре:
- Контроллеры (слой API) — package:
controller - Сервисы (бизнес-логика) — package:
service - DAO/репозитории (доступ к данным) — package:
repository
Также включены:
- JWT-фильтры (filter)
- Исключения и обработчики (exception, handler)
- AOP логирование (audit, aspect)
users— учетные записи пользователей и их контактные данные.token— токены доступа и обновления для JWT.otp_config— глобальная конфигурация OTP (одна запись).otp_codes— сгенерированные коды, связанные с операциями.
Статусы OTP-кодов:
- ACTIVE — активен
- EXPIRED — срок действия истёк
- USED — успешно использован
-
Клонируйте репозиторий:
-
Настройка подключения к БД: Обновите
src/main/resources/application.ymlс вашими параметрами PostgreSQL. -
Сборка и запуск: mvn clean install mvn spring-boot:run
-
Инициализируйте базу данных вручную или с помощью миграций (если подключены).
Регистрация пользователя:
POST /api/v1/auth/register
Тело запроса:
{
"username": "user1",
"password": "password123",
"email": "user@example.com",
"phone": "+71234567890",
"telegramNickname": "@nickname"
}
Аутентификация:
POST /api/v1/auth/login
Ответ: JWT access + refresh токены
Генерация OTP:
POST /api/v1/otp/generate
{
"operationId": "UUID",
"deliveryChannel": "EMAIL" // или SMS, TELEGRAM, FILE
}
Валидация OTP:
POST /api/v1/otp/validate
{
"operationId": "UUID",
"code": "123456"
}
Изменение конфигурации OTP (админ):
PUT /api/v1/admin/otp-config
{
"codeLength": 6,
"ttlSeconds": 120
}
Для запуска тестов: mvn test
Тесты располагаются в директории: src/test/java/org/example
Все внешние библиотеки автоматически подтягиваются через pom.xml. Включены:
- Spring Boot Starter Web/Security/JDBC
- PostgreSQL JDBC Driver
- JJWT
- JavaMailSender
- Telegram Bot SDK
- SLF4J / Logback
Каждый запрос логируется с указанием:
- Времени вызова
- Параметров запроса
- Пользователя (если авторизован)
- Результата или ошибки