- Go 97.3%
- Makefile 2.4%
- Shell 0.2%
| .vscode | ||
| config | ||
| cron | ||
| db | ||
| lib | ||
| log | ||
| middleware | ||
| rest | ||
| route | ||
| static | ||
| structs | ||
| .env | ||
| .gitignore | ||
| collect-licenses.sh | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| Makefile | ||
| README.md | ||
Шаблонный для серверной части приложения
Заготовка для написания целевой серверной части приложения. Просто скачать репозиторий и можно пользоваться.
Реализованные функции
Конфигурация при запуске
Конфигурация выполняется в следуюшщей последовательности:
- Загрузка файла config/config.json
- Получение параметров из командной строки и/или переменных окружения
Для образца в директории config присутсвтует файл config.json.origin. Он является образцом для написания конфигурационного файла. Так же информацию о конфигурации можно изучить в файле lib/config.go
СУБД
Поддерживаются следующие СУБД:
- SQLite
- MySQL/MariaDB
- PostgreSQL
Модели
Реализованы следующие модели структуры БД:
- User - список пользователей
- Role - список ролей системы
- UserRole - соединение пользователей и ролей
- 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 пользователя по части фамилии, начинающейся с части значения
Получить пользователя
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