SHA256
Ограничил access servers до двух в UI и сервере
This commit is contained in:
@@ -30,6 +30,7 @@ const BLOCK_TYPE_TRUSTED_STATE = 70;
|
||||
const SESSIONS_MODE_MIXED = 1;
|
||||
const SESSION_TYPE_USER = 1;
|
||||
const SESSION_TYPE_HOMESERVER = 100;
|
||||
const MAX_EFFECTIVE_ACCESS_SERVERS = 2;
|
||||
|
||||
let solanaLibPromise = null;
|
||||
function loadSolanaLib() {
|
||||
@@ -41,6 +42,19 @@ function normalizeLogin(login) {
|
||||
return String(login || '').trim().toLowerCase();
|
||||
}
|
||||
|
||||
function normalizeAccessServers(values) {
|
||||
const seen = new Set();
|
||||
const result = [];
|
||||
for (const value of Array.isArray(values) ? values : []) {
|
||||
const login = normalizeLogin(value);
|
||||
if (!login || seen.has(login)) continue;
|
||||
seen.add(login);
|
||||
result.push(login);
|
||||
if (result.length >= MAX_EFFECTIVE_ACCESS_SERVERS) break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function pushU32LE(buf, value) {
|
||||
const n = Number(value) >>> 0;
|
||||
buf.push(n & 0xff, (n >>> 8) & 0xff, (n >>> 16) & 0xff, (n >>> 24) & 0xff);
|
||||
@@ -202,7 +216,7 @@ function serializeCreateUserPdaArgs(args) {
|
||||
buf.push(syncServers.length & 0xff);
|
||||
for (const value of syncServers) pushStrU8(buf, value);
|
||||
}
|
||||
const accessServers = Array.isArray(args.accessServers) ? args.accessServers : [];
|
||||
const accessServers = normalizeAccessServers(args.accessServers);
|
||||
buf.push(accessServers.length & 0xff);
|
||||
for (const value of accessServers) pushStrU8(buf, value);
|
||||
buf.push(Number(args.sessionsMode || SESSIONS_MODE_MIXED) & 0xff);
|
||||
@@ -252,7 +266,7 @@ function serializeUpdateUserPdaArgs(args) {
|
||||
buf.push(syncServers.length & 0xff);
|
||||
for (const value of syncServers) pushStrU8(buf, value);
|
||||
}
|
||||
const accessServers = Array.isArray(args.accessServers) ? args.accessServers : [];
|
||||
const accessServers = normalizeAccessServers(args.accessServers);
|
||||
buf.push(accessServers.length & 0xff);
|
||||
for (const value of accessServers) pushStrU8(buf, value);
|
||||
buf.push(Number(args.sessionsMode || SESSIONS_MODE_MIXED) & 0xff);
|
||||
@@ -337,7 +351,7 @@ function createPdaState({
|
||||
addressFormatVersion: serverProfile?.addressFormatVersion ?? 0,
|
||||
serverAddress: serverProfile?.serverAddress ?? '',
|
||||
syncServers: serverProfile?.syncServers ? [...serverProfile.syncServers] : [],
|
||||
accessServers: Array.isArray(accessServers) ? [...accessServers] : [],
|
||||
accessServers: normalizeAccessServers(accessServers),
|
||||
sessionsMode: Number(sessionsMode || SESSIONS_MODE_MIXED) & 0xff,
|
||||
sessions: Array.isArray(sessions) ? sessions.map((x) => ({
|
||||
sessionType: Number(x?.sessionType || 0) & 0xff,
|
||||
@@ -493,6 +507,7 @@ export function parseShineUserPda(dataBytes) {
|
||||
const accessCount = reader.readU8();
|
||||
accessServers = [];
|
||||
for (let j = 0; j < accessCount; j += 1) accessServers.push(reader.readStrU8());
|
||||
accessServers = normalizeAccessServers(accessServers);
|
||||
continue;
|
||||
}
|
||||
if (blockType === BLOCK_TYPE_SESSIONS) {
|
||||
|
||||
Reference in New Issue
Block a user