ESP32: отправлять homeserver sessionType в SHiNE auth

This commit is contained in:
AidarKC 2026-06-13 15:08:53 +04:00
parent 61c21b245e
commit 81d1b84a7d
4 changed files with 34 additions and 2 deletions

View File

@ -0,0 +1,16 @@
# ESP32 sessionType homeserver
- краткое описание:
- `ESP32` homeserver теперь должен отправлять в `CreateAuthSession` и `SessionLogin` поля `sessionType = 100` и `clientPlatform = "ESP32"`.
- что проверять:
- после перепрошивки устройство должно заново подключиться к `SHiNE`;
- в списке устройств у этой сессии должен отображаться тип `Homeserver` и платформа `ESP32`;
- детальная страница сеанса должна показывать те же значения.
- ожидаемый результат:
- сервер принимает homeserver-сеанс без ошибки `SESSION_TYPE_MISMATCH`;
- UI сервера/клиента показывает `Homeserver · ESP32`.
- статус:
- in_progress

View File

@ -81,6 +81,7 @@ static const uint8_t kBlockTypeAccessServers = 40;
static const uint8_t kBlockTypeSessions = 50; static const uint8_t kBlockTypeSessions = 50;
static const uint8_t kBlockTypeTrustedState = 70; static const uint8_t kBlockTypeTrustedState = 70;
static const uint8_t kSessionTypeHomeserver = 100; static const uint8_t kSessionTypeHomeserver = 100;
static const char *kSessionClientPlatformEsp32 = "ESP32";
enum Screen { enum Screen {
SCREEN_HOME, SCREEN_HOME,
@ -3192,6 +3193,8 @@ static bool ensureShineSessionAuthenticated(String &errorOut) {
+ "\",\"sessionKey\":\"" + jsonEscape(sessionKey) + "\",\"sessionKey\":\"" + jsonEscape(sessionKey)
+ "\",\"timeMs\":" + String((unsigned long long)timeMs) + "\",\"timeMs\":" + String((unsigned long long)timeMs)
+ ",\"signatureB64\":\"" + jsonEscape(bytesToBase64String(signature, 64)) + ",\"signatureB64\":\"" + jsonEscape(bytesToBase64String(signature, 64))
+ ",\"sessionType\":" + String((unsigned int)kSessionTypeHomeserver)
+ ",\"clientPlatform\":\"" + jsonEscape(kSessionClientPlatformEsp32)
+ "\",\"clientInfo\":\"ESP32 homeserver\"}"; + "\",\"clientInfo\":\"ESP32 homeserver\"}";
String loginResp; String loginResp;
if (shineWsRequest(gShineWs, "SessionLogin", loginReq, loginResp)) { if (shineWsRequest(gShineWs, "SessionLogin", loginReq, loginResp)) {
@ -3257,6 +3260,8 @@ static bool ensureShineSessionAuthenticated(String &errorOut) {
+ ",\"authNonce\":\"" + jsonEscape(authNonce) + ",\"authNonce\":\"" + jsonEscape(authNonce)
+ "\",\"deviceKey\":\"" + jsonEscape(bytesToBase64String(devicePub, 32)) + "\",\"deviceKey\":\"" + jsonEscape(bytesToBase64String(devicePub, 32))
+ "\",\"signatureB64\":\"" + jsonEscape(bytesToBase64String(signature, 64)) + "\",\"signatureB64\":\"" + jsonEscape(bytesToBase64String(signature, 64))
+ ",\"sessionType\":" + String((unsigned int)kSessionTypeHomeserver)
+ ",\"clientPlatform\":\"" + jsonEscape(kSessionClientPlatformEsp32)
+ "\",\"clientInfo\":\"ESP32 homeserver\"}"; + "\",\"clientInfo\":\"ESP32 homeserver\"}";
String createResp; String createResp;
if (!shineWsRequest(gShineWs, "CreateAuthSession", createReq, createResp)) { if (!shineWsRequest(gShineWs, "CreateAuthSession", createReq, createResp)) {

View File

@ -30,6 +30,7 @@
- PIN-блокировка (в текущей временной сборке вход по PIN отключён, устройство открывает `HOME` сразу после старта); - PIN-блокировка (в текущей временной сборке вход по PIN отключён, устройство открывает `HOME` сразу после старта);
- базовые настройки, статус и главный экран; - базовые настройки, статус и главный экран;
- сохранение `PDA` и `tx signature` после успешной регистрации. - сохранение `PDA` и `tx signature` после успешной регистрации.
- создание и возобновление серверной сессии `SHiNE` через WebSocket с `sessionType = 100` и `clientPlatform = "ESP32"`.
Что пока считается именно прототипом, а не финальной интеграцией: Что пока считается именно прототипом, а не финальной интеграцией:
@ -70,6 +71,16 @@
- флаги: - флаги:
`wifiReady`, `serversReady`, `secretReady`, `registered`, `online`. `wifiReady`, `serversReady`, `secretReady`, `registered`, `online`.
## Правило серверной сессии SHiNE
При подключении к серверу `SHiNE` устройство должно авторизовываться как homeserver-сеанс:
- `sessionType = 100`
- `clientPlatform = "ESP32"`
- `clientInfo = "ESP32 homeserver"`
Это относится и к `CreateAuthSession`, и к `SessionLogin`.
## Правила готовности к регистрации ## Правила готовности к регистрации
Кнопка регистрации доступна только если одновременно выполнены условия: Кнопка регистрации доступна только если одновременно выполнены условия:

View File

@ -1,2 +1,2 @@
client.version=1.2.181 client.version=1.2.182
server.version=1.2.170 server.version=1.2.171