Combuddy (Company buddy) - это приложение для поиска единомышленников. Каждый может сделать пост в ленте, описав предметную область с помощью тегов. Данный проект - реализация Rest API приложения. Вызовы к API доступны через Postman. Во всех методах, требующих авторизацию, она установлена для пользователя moderator на практически неограниченный срок
- Spring Data Jpa
- PostgreSQL
- Criteria API
- Spring MVC
- Spring Security
- Spring Boot Test
git clone https://github.com/GreatMimperator/Combuddy.git
cd Combuddy
./gradlew bootJar
docker-compose up -dПри рабочем сценарии следует поменять монтаж точки данных базы на локальное хранилище (но сперва этот путь следует создать):
volumes:
db-data:
driver: local
driver_opts:
device: ${HOME}/db-data
o: bind
type: localАноним имеет доступ только к путям /api/v1/user/auth/**
Остальные пути защищены с помощью Spring Security - требуется Bearer JWT токен в заголовке Authentication http запроса.
Аноним может зарегистрироваться через запрос /api/v1/user/register/{username} с хэдером запроса password.
Пароль будет закодирован через BCrypt, а значит даже при компрометации базы данных пароли нельзя будет подобрать через радужные таблицы, потому что для каждого пароля предусмотрена своя "соль"
Запрос регистрации вернет токены доступа и обновления. Первый потребуется для доступа ко всем остальным API методам, а второй - для получения продленной версии первого.
В целях безопасности при повторном использовании токена обновления потребуется повторная аутентификация с помощью пароля. Также предусмотрен выход из приложения, делающий недействительными токен обновления
Токены подписываются ключами, размещенными в src/main/resources/rsa. Следует сгенерировать новые для работы в рабочей среде
В ru.combuddy.backend присутствуют следующие пакеты:
- entities, содержит тематические (по главной сущности) пакеты с классами, представляющими в виде объекта таблицу (Hibernate ORM)
- repositories, содержит соответствующие табличным сущностям репозитории
- controllers, содержит контроллеры для каждой сущности, а также сервисные классы с интерфейсами, которые, в свою очередь, используют репозитории сущностей. Также здесь размещаются модельные объекты, которыми идет обмен с пользователем
- exceptions, содержит исключения для сервисных методов, помеченные с помощью @ResponseStatus для исключения необходимости их ловить для формирования исключения
- security, содержит настройки безопасности, а также несколько пар сущность-репозиторий, напрямую относящихся к безопасности. Пакет verifiers играет важную роль, предоставляя сервисы для проверки прав пользователей на некоторые действия
Интеграционные тесты представлены в виде пары сервиса из queries, осуществляющий сами запросы, и тестировщика из controllers
Не все сущности еще задейстованы, а именно пока что не реализованы сервисы обмена сообщениями и жалоб на пользователей
