UnicoreCMS

Лаунчер

Интеграция с GravitLauncher и отдача скинов

Сайт умеет работать сервисом авторизации для GravitLauncher. Игрок вводит логин и пароль от сайта, лаунчер спрашивает у нас, кто это, и получает сессию для входа на сервер.

Со стороны лаунчера этим занимается модуль UnicoreProvider, со стороны сайта работают ручки под /auth/gravit.

Подключение

Выпустить ключ

Утилиты → API-ключи → Создать, право kernel.unicore.provider, в разрешённые адреса — IP машины, где стоит LaunchServer.

Настроить UnicoreProvider

В конфиге LaunchServer пропишите базовый адрес API и выпущенный ключ. Ключ уходит в заголовке Authorization: Api-Key …, как у всех остальных машинных клиентов.

Проверить

curl https://api.example.com/auth/gravit/ping \
  -H 'Authorization: Api-Key ваш-ключ'

Если в ответе пришли данные служебного пользователя, ключ и адрес приняты.

Ручки

Все требуют право kernel.unicore.provider.

МетодПутьЧто делает
GET/auth/gravit/pingПроверка связи
GET/auth/gravit/getAuthDetailsКакие способы входа поддерживаются
GET/auth/gravit/getUserByUsername/:usernameНайти по нику или почте
GET/auth/gravit/getUserByUUID/:uuidНайти по UUID
GET/auth/gravit/getUserByTokenКто владелец access-токена
POST/auth/gravit/authorizeВход по паролю (и TOTP)
POST/auth/gravit/refreshTokenОбновить токен
POST/auth/gravit/deleteSessionЗакрыть сессию
POST/auth/gravit/exitUserВыйти со всех устройств
POST/auth/gravit/checkServerПроверка входа на сервер
POST/auth/gravit/joinServerРегистрация входа на сервер

getAuthDetails отвечает, что поддерживаются password и totp. По этому ответу лаунчер решает, спрашивать ли второй фактор.

Ошибки

Вместо обычных сообщений здесь возвращаются свои коды. Лаунчер их ждёт и показывает игроку понятный текст:

КодКогда
auth.usernotfoundТакого игрока нет
auth.wrongpasswordНеверный пароль
auth.require2faНужен код двухфакторки
auth.userblockedАккаунт заблокирован
auth.expiretokenТокен просрочен
auth.invalidtokenТокен битый

Неактивированные аккаунты

Если в настройках включено обязательное подтверждение почты, игрок без подтверждения не должен попадать на сервер. Проверяйте это на стороне сервера. Сессия сама по себе ещё не значит, что аккаунт активирован.

Скины и плащи

Отдаются публично, без авторизации, потому что лаунчеру и скин-рендерам они нужны без токена:

ПутьЧто отдаёт
/cabinet/skin/public/skin/username/:usernameСкин по нику
/cabinet/skin/public/skin/uuid/:uuidСкин по UUID
/cabinet/skin/public/cloak/username/:usernameПлащ по нику
/cabinet/skin/public/cloak/uuid/:uuidПлащ по UUID

Файлы лежат в папке storage, сервер раздаёт их статикой. Загружает их игрок сам из кабинета, если у него есть право user.cabinet.skin. HD-версии открывает отдельное право, его обычно продают.

Публичные профили

ПутьЧто отдаёт
/users/public/username/:usernameПрофиль по нику
/users/public/uuid/:uuidПрофиль по UUID
/users/public/user/:usernameРасширенный публичный профиль

Наружу уходит только безопасное подмножество полей. Ни почты, ни балансов, ни служебных флагов там нет.

Содержание