Сузить диалог изменения pairing-пароля
This commit is contained in:
parent
d6c5757dfa
commit
e1f2b54de3
@ -1,2 +1,2 @@
|
|||||||
client.version=1.2.201
|
client.version=1.2.202
|
||||||
server.version=1.2.190
|
server.version=1.2.191
|
||||||
|
|||||||
@ -55,7 +55,7 @@ import * as serverSettingsView from './pages/server-settings-view.js';
|
|||||||
import * as toolsSettingsView from './pages/tools-settings-view.js';
|
import * as toolsSettingsView from './pages/tools-settings-view.js';
|
||||||
import * as deviceView from './pages/device-view.js?v=202606131435';
|
import * as deviceView from './pages/device-view.js?v=202606131435';
|
||||||
import * as connectDeviceView from './pages/connect-device-view.js?v=202606142055';
|
import * as connectDeviceView from './pages/connect-device-view.js?v=202606142055';
|
||||||
import * as devicePairingView from './pages/device-pairing-view.js?v=202606151000';
|
import * as devicePairingView from './pages/device-pairing-view.js?v=202606151030';
|
||||||
import * as deviceQrView from './pages/device-qr-view.js';
|
import * as deviceQrView from './pages/device-qr-view.js';
|
||||||
import * as deviceCameraView from './pages/device-camera-view.js';
|
import * as deviceCameraView from './pages/device-camera-view.js';
|
||||||
import * as showKeysView from './pages/show-keys-view.js';
|
import * as showKeysView from './pages/show-keys-view.js';
|
||||||
|
|||||||
@ -173,13 +173,10 @@ export function render({ navigate }) {
|
|||||||
passwordDialog.style.zIndex = '30';
|
passwordDialog.style.zIndex = '30';
|
||||||
passwordDialog.innerHTML = `
|
passwordDialog.innerHTML = `
|
||||||
<div style="position:absolute; inset:0; background:rgba(5,9,16,0.72); backdrop-filter:blur(4px);" data-action="close-dialog"></div>
|
<div style="position:absolute; inset:0; background:rgba(5,9,16,0.72); backdrop-filter:blur(4px);" data-action="close-dialog"></div>
|
||||||
<div class="card stack" style="position:absolute; left:16px; right:16px; top:24px; gap:12px; box-shadow:var(--shadow);">
|
<div class="card stack" style="position:absolute; left:50%; top:24px; width:min(calc(100vw - 32px), 360px); transform:translateX(-50%); gap:12px; box-shadow:var(--shadow);">
|
||||||
<div class="row" style="align-items:flex-start;">
|
<div class="stack" style="gap:6px;">
|
||||||
<div class="stack" style="gap:6px; flex:1;">
|
<p class="field-label" id="pairing-dialog-title">Задать дополнительный пароль</p>
|
||||||
<p class="field-label" id="pairing-dialog-title">Задать дополнительный пароль</p>
|
<p class="meta-muted" id="pairing-dialog-text">Дополнительный пароль не даёт права на подключение сам по себе. Он только отсекает лишние заявки, чтобы посторонние не могли засыпать ваш аккаунт запросами. Обычно он не нужен, поэтому при желании можно задать и что-то простое, что легко запомнить.</p>
|
||||||
<p class="meta-muted" id="pairing-dialog-text">Дополнительный пароль не даёт права на подключение сам по себе. Он только отсекает лишние заявки, чтобы посторонние не могли засыпать ваш аккаунт запросами. Обычно он не нужен, поэтому при желании можно задать и что-то простое, что легко запомнить.</p>
|
|
||||||
</div>
|
|
||||||
<button class="ghost-btn" type="button" data-action="close-dialog">Закрыть</button>
|
|
||||||
</div>
|
</div>
|
||||||
<label class="stack">
|
<label class="stack">
|
||||||
<span class="field-label">Пароль</span>
|
<span class="field-label">Пароль</span>
|
||||||
@ -250,6 +247,18 @@ export function render({ navigate }) {
|
|||||||
passwordDialog.hidden = true;
|
passwordDialog.hidden = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const removeAdditionalPassword = async () => {
|
||||||
|
const payload = await authService.upsertEspPairingSettings({
|
||||||
|
enabled: true,
|
||||||
|
passwordHash: '',
|
||||||
|
ttlSeconds: 180,
|
||||||
|
});
|
||||||
|
pairingPasswordConfigured = false;
|
||||||
|
saveLocalPairingPasswordState(state.session.login, state.entrySettings.shineServer, false);
|
||||||
|
setAuthInfo(`Подключение по коду без дополнительного пароля включено. TTL: ${payload?.ttlSeconds || 180} сек.`);
|
||||||
|
setStatus(status, 'Дополнительный пароль убран. Подключение по коду теперь работает без него.', 'info');
|
||||||
|
};
|
||||||
|
|
||||||
const setSettingsBusy = (flag) => {
|
const setSettingsBusy = (flag) => {
|
||||||
settingsBusy = flag;
|
settingsBusy = flag;
|
||||||
renderSettingsCard();
|
renderSettingsCard();
|
||||||
@ -294,15 +303,7 @@ export function render({ navigate }) {
|
|||||||
removeBtn.addEventListener('click', async () => {
|
removeBtn.addEventListener('click', async () => {
|
||||||
setSettingsBusy(true);
|
setSettingsBusy(true);
|
||||||
try {
|
try {
|
||||||
const payload = await authService.upsertEspPairingSettings({
|
await removeAdditionalPassword();
|
||||||
enabled: true,
|
|
||||||
passwordHash: '',
|
|
||||||
ttlSeconds: 180,
|
|
||||||
});
|
|
||||||
pairingPasswordConfigured = false;
|
|
||||||
saveLocalPairingPasswordState(state.session.login, state.entrySettings.shineServer, false);
|
|
||||||
setAuthInfo(`Подключение по коду без дополнительного пароля включено. TTL: ${payload?.ttlSeconds || 180} сек.`);
|
|
||||||
setStatus(status, 'Дополнительный пароль убран. Подключение по коду теперь работает без него.', 'info');
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const message = toUserMessage(error, 'Не удалось убрать дополнительный пароль.');
|
const message = toUserMessage(error, 'Не удалось убрать дополнительный пароль.');
|
||||||
setAuthError(message);
|
setAuthError(message);
|
||||||
@ -407,8 +408,28 @@ export function render({ navigate }) {
|
|||||||
const password = String(dialogPasswordInput.value || '');
|
const password = String(dialogPasswordInput.value || '');
|
||||||
const confirm = String(dialogPasswordConfirmInput.value || '');
|
const confirm = String(dialogPasswordConfirmInput.value || '');
|
||||||
const currentMode = dialogMode;
|
const currentMode = dialogMode;
|
||||||
if (!password) {
|
if (!password && !confirm) {
|
||||||
setStatus(status, 'Введите дополнительный пароль.', 'error');
|
const shouldRemove = window.confirm('Пароль не задан. Хотите убрать дополнительный пароль?');
|
||||||
|
if (!shouldRemove) {
|
||||||
|
setStatus(status, 'Введите пароль или отмените изменение.', 'error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dialogSaveBtn.disabled = true;
|
||||||
|
try {
|
||||||
|
await removeAdditionalPassword();
|
||||||
|
closePasswordDialog();
|
||||||
|
renderSettingsCard();
|
||||||
|
} catch (error) {
|
||||||
|
const message = toUserMessage(error, 'Не удалось убрать дополнительный пароль.');
|
||||||
|
setAuthError(message);
|
||||||
|
setStatus(status, message, 'error');
|
||||||
|
} finally {
|
||||||
|
dialogSaveBtn.disabled = false;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!password || !confirm) {
|
||||||
|
setStatus(status, 'Заполните пароль и подтверждение пароля.', 'error');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (password !== confirm) {
|
if (password !== confirm) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user