From 2f73cdb0f9f8ed8850f758e4f9c385f30734d43619566845e8ac07b0082b0937 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Wed, 29 Jul 2026 12:08:02 +0400 Subject: [PATCH] =?UTF-8?q?UI:=20=D1=80=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=BC=D0=B5=D0=BD=D0=B0=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D0=BE=D0=B2=20=D0=B4=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=83=D0=BF=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION.properties | 2 +- shine-UI/js/pages/access-servers-view.js | 321 +++++++++++++++++++++-- 2 files changed, 302 insertions(+), 21 deletions(-) diff --git a/VERSION.properties b/VERSION.properties index 2cd52084..4f1b0b27 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.357 +client.version=1.2.358 server.version=1.2.341 diff --git a/shine-UI/js/pages/access-servers-view.js b/shine-UI/js/pages/access-servers-view.js index a620fa15..a07fc69c 100644 --- a/shine-UI/js/pages/access-servers-view.js +++ b/shine-UI/js/pages/access-servers-view.js @@ -1,7 +1,9 @@ import { renderHeader } from '../components/header.js'; import { authService, state } from '../state.js'; -import { readShineUserPda } from '../services/shine-user-pda-service.js'; +import { base64ToBytes } from '../services/crypto-utils.js'; +import { loadEncryptedUserSecrets } from '../services/key-vault.js'; import { resolveShineServerByServerLogin } from '../services/shine-server-resolver.js'; +import { readShineUserPda, updateShineUserPdaOnSolana } from '../services/shine-user-pda-service.js'; export const pageMeta = { id: 'access-servers-view', title: 'Серверы доступа' }; @@ -18,6 +20,34 @@ function normalizeLogin(value) { return String(value || '').trim().toLowerCase(); } +function equalBytes(a, b) { + const left = a instanceof Uint8Array ? a : new Uint8Array(a || []); + const right = b instanceof Uint8Array ? b : new Uint8Array(b || []); + if (left.length !== right.length) return false; + for (let i = 0; i < left.length; i += 1) { + if (left[i] !== right[i]) return false; + } + return true; +} + +function uniqueLogins(values) { + const seen = new Set(); + const result = []; + (Array.isArray(values) ? values : []).forEach((value) => { + const login = normalizeLogin(value); + if (!login || seen.has(login)) return; + seen.add(login); + result.push(login); + }); + return result; +} + +function shortenSignature(value) { + const text = String(value || '').trim(); + if (text.length <= 16) return text; + return `${text.slice(0, 8)}...${text.slice(-8)}`; +} + function createConfirmModal() { const root = document.getElementById('modal-root'); if (!(root instanceof HTMLElement)) return null; @@ -45,8 +75,8 @@ function createConfirmModal() {