Шаблонный репозиторий для серверной части приложения
  • Go 97.4%
  • Makefile 2.3%
  • Shell 0.2%
Find a file Use this template
2024-10-17 14:41:57 +03:00
.vscode Правка логирования 2024-07-24 16:39:11 +03:00
config Обновить config/config.json.origin 2024-10-17 14:40:26 +03:00
db Установка паролей по умолчанию при создании основных пользователей 2024-10-17 14:39:46 +03:00
lib Удаление ненужных параметров конфигурации приложения 2024-10-17 14:41:25 +03:00
log Правка логирования 2024-07-24 16:39:11 +03:00
middleware Правка логирования 2024-07-24 16:39:11 +03:00
rest first commit 2024-07-04 10:13:59 +03:00
route Исправление ошибки при создании пользователя с использование LDAP 2024-10-17 14:35:13 +03:00
static first commit 2024-07-04 10:13:59 +03:00
structs first commit 2024-07-04 10:13:59 +03:00
.env first commit 2024-07-04 10:13:59 +03:00
.gitignore Удаление тэгов из некоторых полей 2024-08-07 14:49:14 +03:00
collect-licenses.sh Удаление тэгов из некоторых полей 2024-08-07 14:49:14 +03:00
go.mod Удален код работы с LDAP и добавлен код для работы с сервисом LDAP 2024-10-14 15:17:27 +03:00
go.sum Удален код работы с LDAP и добавлен код для работы с сервисом LDAP 2024-10-14 15:17:27 +03:00
LICENSE first commit 2024-07-04 10:13:59 +03:00
main.go Удаления чтения параметров LDAP при запуске 2024-10-17 14:41:57 +03:00
Makefile first commit 2024-07-04 10:13:59 +03:00
README.md Удален код работы с LDAP и добавлен код для работы с сервисом LDAP 2024-10-14 15:17:27 +03:00

Шаблонный для серверной части приложения

Заготовка для написания целевой серверной части приложения. Просто скачать репозиторий и можно пользоваться.

Реализованные функции

Конфигурация при запуске

Конфигурация выполняется в следуюшщей последовательности:

  1. Загрузка файла config/config.json
  2. Получение параметров из командной строки и/или переменных окружения

Для образца в директории config присутсвтует файл config.json.origin. Он является образцом для написания конфигурационного файла. Так же информацию о конфигурации можно изучить в файле lib/config.go

СУБД

Поддерживаются следующие СУБД:

  1. SQLite
  2. MySQL/MariaDB
  3. PostgreSQL

Модели

Реализованы следующие модели структуры БД:

  1. User - список пользователей
  2. Role - список ролей системы
  3. UserRole - соединение пользователей и ролей
  4. Log - таблица в БД для хранения логов

Кэширование

Реализована система кэширования объектов пользователей. Если указаны параметры подключения к Redis, то объекты сохраняются в нем, иначе в память приложения до истечения TTL либо до перезапуска приложения. Redis может использоваться для запуска нескольких экземпляров приложения.

Реализованные методы

Все REST-методы расположены по базовому пути /api. Далее функции подразделяются на группы:

  • /auth - аутентификация и перезапрос токена
  • /user - управление пользователями

Аутентификация пользователей /auth

/login

Запрос:

POST /api/auth/login

Структура объекта model.User. Используются поля только Login и Password. Если у пользователя стоит отметка LDAP, то пароль проверяется в LDAP при наличии подключения к соответствующемй серверу.

В случае успеха в токен вкладывается дополнительные поля: ID пользователя, логин, ФИО, Роли. Эти поля может использоваться клиентская сторона для работы.

Перевыпуск jwt

Запрос:

POST /api/auth/renew

В теле запроса данные не передаются. За место этого берется заголовок запроса Authorization и уже на основе него определяется пользователь и генерируется новый токен. JWT при запросе должен быть действующим, по этому об этом необходимо позаботиться заранее.

JWT

Токены на пользователя при генерации сохраняются в БД. Хранятся 2 токена: текущий и предыдущий. Если даже токен действующий, но его нет в БД, то в авторизации отказано.

Работа с пользователями /user

Для работы с пользователями необходимо иметь роль SEC_ADMIN.

Список пользователей

GET /api/user

Возвращает массив пользователей model.User.

Найти пользователя в LDAP

GET /api/user/search-ldap?value=<Начало фамилии>

Ищет в LDAP пользователя по части фамилии, начинающейся с части значения.

Для работы LDAP необходимо использовать сервис LDAP с соответствующими настройками.

Получить пользователя

GET /api/user/<идентификатор пользователя>

Возвращает информацию о конкретном пользователе

Создание пользователя

POST /api/user

Создает нового пользователя. Используется model.User в формате JSON. Роли должны быть указаны обязательно.

Изменение пользователя

PUT /api/user/<идентификатор пользователя>

Изменяет информацию о пользователе. Используется model.User в формате JSON. Роли должны быть указаны обязательно.

Удаление пользователя

DELETE /api/user/<идентификатор пользователя>

Удаляет пользователя.

Блокировка пользователя

PATCH /api/user/<идентификатор пользователя>/lock

Разблокировка пользователя

PATCH /api/user/<идентификатор пользователя>/unlock

Поддержка HTTPS

Данным шаблоном поддерживает HTTP/2 и HTTP/3. Чтобы "поиграть", необходимо подключить сертификат и его закрытый ключ. Наиболее простой способ сгенерировать самоподписной сертификат:

go run $GOROOT/src/crypto/tls/generate_cert.go --host localhost

Настройки

Приложение использует 3 варианта получения настроек: файл JSON, параметры командной строки и переменные окружения. Все поддерживаемые настроки находятся в файле lib/config.go. Файл JSON с настройками загружается по пути config/config.json