SHA256
Автоопределение SHiNE-сервера по логину через PDA
This commit is contained in:
@@ -1,10 +1,18 @@
|
||||
import { createRequesterPairingMaterial, decryptPairingPayloadFromEnvelope, deriveEspPairingPasswordHash } from './js/lib/device-pairing.js';
|
||||
import { loadPluginSettings, loadSessionMaterial, savePluginSettings, saveSessionMaterial, clearSessionMaterial } from './js/lib/session-store.js';
|
||||
import { ShineApiClient } from './js/lib/shine-api.js';
|
||||
import {
|
||||
DEFAULT_SHINE_SERVER_LOGIN,
|
||||
buildHttpBase,
|
||||
normalizeServerLogin,
|
||||
resolveShineServerByServerLogin,
|
||||
} from './js/lib/shine-server-resolver.js';
|
||||
|
||||
const state = {
|
||||
api: null,
|
||||
settings: {
|
||||
serverLogin: DEFAULT_SHINE_SERVER_LOGIN,
|
||||
serverHttp: buildHttpBase('shineup.me'),
|
||||
serverUrl: 'wss://shineup.me/ws',
|
||||
login: '',
|
||||
},
|
||||
@@ -50,19 +58,36 @@ function ensureApi(serverUrl = state.settings.serverUrl) {
|
||||
return state.api;
|
||||
}
|
||||
|
||||
async function resolveSettingsServer(nextSettings = {}) {
|
||||
const serverLogin = normalizeServerLogin(nextSettings?.serverLogin || state.settings.serverLogin || DEFAULT_SHINE_SERVER_LOGIN)
|
||||
|| DEFAULT_SHINE_SERVER_LOGIN;
|
||||
const resolved = await resolveShineServerByServerLogin(serverLogin);
|
||||
return {
|
||||
serverLogin: resolved.serverLogin,
|
||||
serverHttp: resolved.serverHttp,
|
||||
serverUrl: resolved.serverUrl,
|
||||
};
|
||||
}
|
||||
|
||||
async function loadStateFromStorage() {
|
||||
const settings = await loadPluginSettings();
|
||||
const storedServerLogin = normalizeServerLogin(settings?.serverLogin || state.settings.serverLogin || DEFAULT_SHINE_SERVER_LOGIN)
|
||||
|| DEFAULT_SHINE_SERVER_LOGIN;
|
||||
state.settings = {
|
||||
serverUrl: String(settings?.serverUrl || 'wss://shineup.me/ws').trim() || 'wss://shineup.me/ws',
|
||||
serverLogin: storedServerLogin,
|
||||
serverHttp: String(settings?.serverHttp || state.settings.serverHttp || buildHttpBase('shineup.me')).trim() || buildHttpBase('shineup.me'),
|
||||
serverUrl: String(settings?.serverUrl || state.settings.serverUrl || 'wss://shineup.me/ws').trim() || 'wss://shineup.me/ws',
|
||||
login: String(settings?.login || '').trim(),
|
||||
};
|
||||
state.activeSession = await loadSessionMaterial();
|
||||
}
|
||||
|
||||
async function persistSettings(nextSettings = {}) {
|
||||
const resolved = await resolveSettingsServer(nextSettings);
|
||||
state.settings = {
|
||||
...state.settings,
|
||||
...nextSettings,
|
||||
...resolved,
|
||||
};
|
||||
await savePluginSettings(state.settings);
|
||||
return state.settings;
|
||||
@@ -79,6 +104,8 @@ async function resumeActiveSession() {
|
||||
|
||||
try {
|
||||
await persistSettings({
|
||||
serverLogin: String(sessionRecord?.serverLogin || state.settings.serverLogin || DEFAULT_SHINE_SERVER_LOGIN).trim(),
|
||||
serverHttp: String(sessionRecord?.serverHttp || state.settings.serverHttp || buildHttpBase('shineup.me')).trim(),
|
||||
serverUrl: String(sessionRecord?.serverUrl || state.settings.serverUrl || 'wss://shineup.me/ws').trim(),
|
||||
login: String(sessionRecord?.login || state.settings.login || '').trim(),
|
||||
});
|
||||
@@ -106,6 +133,8 @@ async function attachApprovedSession(payload) {
|
||||
sessionKey: state.requesterMaterial?.sessionKey || '',
|
||||
sessionPrivPkcs8: state.requesterMaterial?.sessionPrivPkcs8 || '',
|
||||
sessionType: Number(approvedSession?.sessionType || 50) || 50,
|
||||
serverLogin: state.settings.serverLogin,
|
||||
serverHttp: state.settings.serverHttp,
|
||||
serverUrl: state.settings.serverUrl,
|
||||
};
|
||||
if (!sessionRecord.login || !sessionRecord.sessionId || !sessionRecord.sessionKey || !sessionRecord.sessionPrivPkcs8) {
|
||||
@@ -159,14 +188,14 @@ async function pollPairingStatus() {
|
||||
}
|
||||
}
|
||||
|
||||
async function startPairing({ login, usePassword, password, serverUrl }) {
|
||||
async function startPairing({ login, usePassword, password, serverLogin }) {
|
||||
const cleanLogin = String(login || '').trim();
|
||||
if (!cleanLogin) {
|
||||
throw new Error('Введите логин.');
|
||||
}
|
||||
|
||||
await persistSettings({
|
||||
serverUrl: String(serverUrl || state.settings.serverUrl || 'wss://shineup.me/ws').trim() || 'wss://shineup.me/ws',
|
||||
serverLogin: String(serverLogin || state.settings.serverLogin || DEFAULT_SHINE_SERVER_LOGIN).trim(),
|
||||
login: cleanLogin,
|
||||
});
|
||||
clearPairingState();
|
||||
|
||||
Reference in New Issue
Block a user