Что сделано: вычистили неиспользуемый user-settings sync/DM sync хвост, сохранили сборку, обновили bundle.sh так, чтобы gradle-wrapper.jar всегда попадал в архив.
Проверено: compileJava и deploy на t2 (server + UI).
Не проверяли: полные интеграционные сценарии, ручные UI-флоу и продовый деплой.
Серверы доступа хранят зашифрованную личную переписку пользователя и участвуют в звонках.
Единственный сервер доступа хранит зашифрованную личную переписку пользователя и участвует в звонках.
Всё, что публикуется в блокчейне SHiNE, доступно через любой сервер Сияния,
адоступ пользователя и приватная переписка хранятся только на этих серверах.
анастройки и приватная переписка хранятся только на выбранном сервере.
При смене сервера прежняя переписка и настройки автоматически не переносятся.
</p>
`;
@@ -291,7 +292,7 @@ export function render({ navigate }) {
listCard.className='card stack';
constlistTitle=document.createElement('p');
listTitle.className='field-label';
listTitle.textContent='Текущий список серверов доступа';
listTitle.textContent='Текущий сервер доступа';
constlistHint=document.createElement('p');
listHint.className='meta-muted';
listHint.textContent=sessionLogin
@@ -308,10 +309,10 @@ export function render({ navigate }) {
addCard.className='card stack';
constaddTitle=document.createElement('p');
addTitle.className='field-label';
addTitle.textContent='Добавить сервер доступа';
addTitle.textContent='Сменить сервер доступа';
constaddHint=document.createElement('p');
addHint.className='meta-muted';
addHint.textContent='Можно использовать максимум два сервера доступа. Введите логин сервера или несколько первых букв, затем выберите сервер из подсказок.';
addHint.textContent='Введите логин нового сервера или несколько первых букв, затем выберите сервер из подсказок. Новый сервер заменит текущий.';
constaddInput=document.createElement('input');
addInput.className='input';
addInput.type='text';
@@ -326,13 +327,12 @@ export function render({ navigate }) {
@@ -465,16 +409,13 @@ export function render({ navigate }) {
renderServerList();
refreshAddButton();
listStatus.textContent=rows.length
?`Найдено серверов доступа: ${rows.length}`
?'Сервер доступа загружен из PDA.'
:'В PDA пользователя пока нет серверов доступа.';
if(rows.length>=MAX_ACCESS_SERVERS){
addStatus.textContent='У пользователя уже выбраны два сервера доступа. Сначала отключите один из них.';
}
}catch(error){
currentAccessServers=[];
renderServerList();
refreshAddButton();
listStatus.textContent=error?.message||'Не удалось прочитать список серверов доступа.';
listStatus.textContent=error?.message||'Не удалось прочитать сервер доступа.';
}
};
@@ -559,7 +500,7 @@ export function render({ navigate }) {
constpasswordResult=awaitpasswordModal?.open({
title:'Нужен пароль для обновления серверов доступа',
text:'Чтобы изменить список серверов доступа, нужно подписать обновление user PDA через root key. Этот ключ не найден в локальном зашифрованном контейнере устройства.',
text:'Чтобы изменить сервер доступа, нужно подписать обновление user PDA через root key. Этот ключ не найден в локальном зашифрованном контейнере устройства.',
note:savedClient
?'client key уже сохранён на устройстве. Из пароля будет восстановлен только root key.'
:'На устройстве не хватает root key и/или client key. Они будут восстановлены из пароля аккаунта.',
@@ -604,7 +545,7 @@ export function render({ navigate }) {
constnormalizedList=uniqueLogins(nextLogins);
setOperationBusy(true);
target.textContent=String(inFlightText||'Обновляем список серверов доступа...');
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.