Инструмент для запроса использования пользователями GPU (планировщик) и сервис для отслеживания использования
  • Go 97.3%
  • Makefile 2.4%
  • Shell 0.2%
Find a file
2024-10-03 15:19:06 +03:00
.vscode Добавление, изменение, удаление резервирования ресурсов 2024-09-26 16:23:38 +03:00
config Исправление проверки забронированного времени 2024-10-03 15:19:06 +03:00
cron Отслеживание бездействия и отслеживания окончания работы с расширенными ресурсами 2024-10-01 10:45:05 +03:00
db Добавление управление администратором 2024-10-03 11:09:14 +03:00
lib Отображение выбора контейнеров в зависимости от зарезервированных ресурсов 2024-10-01 14:02:23 +03:00
log Добавление, изменение, удаление резервирования ресурсов 2024-09-26 16:23:38 +03:00
middleware Добавление, изменение, удаление резервирования ресурсов 2024-09-26 16:23:38 +03:00
rest Отображение выбора контейнеров в зависимости от зарезервированных ресурсов 2024-10-01 14:02:23 +03:00
route Исправление проверки забронированного времени 2024-10-03 15:19:06 +03:00
static Добавление, изменение, удаление резервирования ресурсов 2024-09-26 16:23:38 +03:00
structs Добавление управление администратором 2024-10-03 11:09:14 +03:00
.env Initial commit 2024-09-24 12:52:06 +03:00
.gitignore Update modules 2024-10-02 15:33:10 +03:00
collect-licenses.sh Initial commit 2024-09-24 12:52:06 +03:00
go.mod Исправление проверки забронированного времени 2024-10-03 15:19:06 +03:00
go.sum Исправление проверки забронированного времени 2024-10-03 15:19:06 +03:00
LICENSE Initial commit 2024-09-24 12:52:06 +03:00
main.go Добавление управление администратором 2024-10-03 11:09:14 +03:00
Makefile Initial commit 2024-09-24 12:52:06 +03:00
README.md Initial commit 2024-09-24 12:52:06 +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 пользователя по части фамилии, начинающейся с части значения

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

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