Интерфейс клиента без технических подробностей; дубли убраны

Техника — только в режиме разработчика (devOn):
- версии: клиенту — bj, шлюз НРД, СКЗИ, QUIK, DEPO, без «Подробностей»
  (Java, bj-crypto, пути, установщик, ОС, PostgreSQL — разработчикам)
- Криптография: строки crypto-service/java, параметры провайдера и сокет,
  серийные номера, журнал сверки (клиенту — только при ошибке), дамп справочника
  и путь nsd-certs; убрана карточка «Ключ организации» — дубль сводки
- НРД: строка версии ИШ (дубль сводки), «Расширенные» (адреса, контейнеры,
  config.xml), имя профиля ключа, адрес канала; контур по-русски
- Обновления: имена файлов и служб, адрес артефактории и ключ издателя
- Диагностика: имена служб и сырые состояния; справочник участников — без кодов
- ключи ролей и модулей лицензии, путь users.json, DSN/Ping/in-memory, FTV_M2M,
  путь Валидаты и служба bj-crypto в мастере, «проверена ZETIT», Samba

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-21 23:44:52 +03:00
parent 29e19c78a9
commit f1065e369a
9 changed files with 126 additions and 77 deletions
@@ -50,7 +50,7 @@
<div class="card" style="margin:10px 0">
<h3 style="margin:0 0 4px">Шлюз на этом сервере</h3>
<div id="ig-head" class="muted">Проверяю…</div>
<p class="muted" style="font-size:12px;margin:4px 0 0">Версию ИШ проверяет ZETIT; новые приходят с обновлением bj.</p>
<p class="muted" style="font-size:12px;margin:4px 0 0">Новые версии шлюза приходят с обновлением bj и ставятся сами.</p>
<div id="ig-reinst" style="display:none;margin-top:10px"><button type="button" class="btn" id="ig-bnd">Установить ИШ</button> <span class="muted" id="ig-bnd-v" style="font-size:12.5px"></span></div>
<div id="ig-ov" style="display:none;position:fixed;inset:0;z-index:9999;background:rgba(20,24,35,.55);align-items:center;justify-content:center">
<div class="card" style="max-width:600px;width:92%;margin:0;box-shadow:0 10px 40px rgba(0,0,0,.25)">
@@ -105,7 +105,7 @@
<label class="f">Логин<input name="user" value="igate-share" autocomplete="off" spellcheck="false"></label>
<label class="f">Пароль (от 8 символов)<span style="display:flex;gap:6px"><input name="password" type="text" autocomplete="new-password" spellcheck="false" placeholder="пусто — прежний" style="flex:1;min-width:0"><button type="button" class="btn sm" id="ig-sh-gen" title="Создать надёжный пароль">Сгенерировать</button></span></label>
</div>
<small id="ig-sh-pwnote" class="muted" style="display:block;font-size:12.5px;margin-top:6px">Пароль вводят в Windows при первом открытии папок. Запишите его: bj передаёт пароль в Samba и показать позже не сможет. Пустое поле при повторном сохранении оставляет прежний пароль.</small>
<small id="ig-sh-pwnote" class="muted" style="display:block;font-size:12.5px;margin-top:6px">Пароль вводят в Windows при первом открытии папок. Запишите его: bj сохраняет пароль для сетевых папок и показать позже не сможет. Пустое поле при повторном сохранении оставляет прежний пароль.</small>
<div id="ig-sh-domain" hidden>
<div id="ig-sh-access" class="muted" style="font-size:13px;margin-top:10px"></div>
<div id="ig-sh-join" hidden style="margin-top:10px">
@@ -139,6 +139,7 @@
<div id="ig-cout" style="margin-top:8px;font-size:13px"></div>
</div>
</div>
<script>var IGDEV={{if devOn}}true{{else}}false{{end}};</script>
<script>
(function(){
var head=document.getElementById('ig-head'), tb=document.getElementById('ig-ct'), cout=document.getElementById('ig-cout'), out=document.getElementById('ig-out'), lg=document.getElementById('ig-log');
@@ -241,7 +242,7 @@
} else {
p.set('mode',mode()); if(f.enabled.checked) p.set('enabled','1');
if(!d){ p.set('user',f.user.value.trim()); p.set('password',f.password.value); }
o.textContent='Сохраняю… (первый раз — установка Samba, до пары минут)';
o.textContent='Сохраняю… (первый раз — до пары минут)';
}
var pwSet=(!d)?f.password.value:'';
post(url,p).then(function(r){
@@ -261,7 +262,7 @@
var running=d.installed&&d.engine==='Running';
var rb=document.getElementById('ig-rb'); if(rb){ var can=d.rollback&&d.rollback!==d.version; rb.style.display=can?'block':'none'; if(can) document.getElementById('ig-rb-v').textContent=d.rollback; }
if(!d.installed) head.innerHTML=bad('ИШ на этом сервере не установлен');
else head.innerHTML=(running?ok('ИШ '+d.version+' установлен и работает'):bad('ИШ '+d.version+' установлен, но не работает: движок '+(d.engine||'не отвечает')+', служба '+d.service));
else head.innerHTML=(running?ok('ИШ '+d.version+' установлен и работает'):bad('Шлюз НРД установлен, но не работает'+(IGDEV?': движок '+(d.engine||'не отвечает')+', служба '+d.service:'')));
if(d.busy) head.innerHTML='<span style="color:var(--accent)">⟳ Шлюз перезапускается — '+esc(d.busy)+'; состояние — последнее известное</span>';
if(!running && d.keymedia==='missing'){ head.innerHTML='<span style="color:var(--warn)">⚠ ИШ '+esc(d.version)+' ждёт флешку с ключом подписи — её нет в сервере. Вставьте флешку: bj перезапустит шлюз сам. Переустанавливать ИШ не нужно.</span>'; }
// не стоит или не работает — одна кнопка: поставить заново проверенную версию с сервера (систему переставлять не нужно)
@@ -269,11 +270,11 @@
if(d.installing){ // bj сам ставит/обновляет ИШ: остановка шлюза — штатная, переустанавливать не нужно
head.innerHTML='<span style="color:var(--accent)">⟳ Идёт установка ИШ'+(d.upgrade_to?' '+esc(d.upgrade_to):'')+' — '+esc(d.installing)+'. Шлюз недоступен 1–3 минуты; настройки и каналы сохраняются.</span>'; ri.style.display='none';
} else if(d.upgrade_to){
head.innerHTML+='<div class="muted" style="font-size:13px;margin-top:4px">⟳ Получена версия ИШ '+esc(d.upgrade_to)+' (проверена ZETIT) — bj обновит шлюз сам в ближайшие минуты; настройки и каналы сохранятся.</div>';
head.innerHTML+='<div class="muted" style="font-size:13px;margin-top:4px">⟳ Получена версия ИШ '+esc(d.upgrade_to)+' — bj обновит шлюз сам в ближайшие минуты; настройки и каналы сохранятся.</div>';
}
if(d.installing||d.upgrade_to) ovStart(); // обновление идёт или вот-вот начнётся — страница перекрыта ходом
if(!running){
if(d.bundled){ bb.style.display=''; bb.textContent=d.installed?'Установить ИШ заново':'Установить ИШ'; bv.textContent='версия '+d.bundled+' — проверена ZETIT, дистрибутив на сервере'; }
if(d.bundled){ bb.style.display=''; bb.textContent=d.installed?'Установить ИШ заново':'Установить ИШ'; bv.textContent='версия '+d.bundled; }
else { bb.style.display='none'; bv.textContent='Дистрибутива ИШ на сервере нет — он приходит с обновлением bj («Настройка → Обновления»).'; }
}
var dep=d.deponent||'', cr=document.getElementById('ig-crypto').value;
@@ -287,8 +288,8 @@
if(d.installed) a.push('<button type="button" class="btn sm" data-act="contour" data-c="'+x[0]+'">Создать канал</button>');
pill='Канала нет'; cls='no';
} else {
it(true,'канал <b>'+esc(ch.code)+'</b> <span class="muted">'+esc(ch.crypto+' · '+ch.endpoint)+'</span>');
it(!!ch.profile, ch.profile?'ключ: профиль '+esc(ch.profile):'ключ этого контура не установлен');
it(true,'канал <b>'+esc(ch.code)+'</b>'+(IGDEV?' <span class="muted">'+esc(ch.crypto+' · '+ch.endpoint)+'</span>':''));
it(!!ch.profile, ch.profile?(IGDEV?'ключ: профиль '+esc(ch.profile):'ключ установлен'):'ключ этого контура не установлен');
it(!!ch.enabled, ch.enabled?'канал включён':'канал выключен — включится после установки ключа');
var ready=ch.enabled&&ch.profile;
if(act){ pill='● Активный'; cls='cur'; }