72 lines
2.4 KiB
JavaScript
72 lines
2.4 KiB
JavaScript
const form = document.getElementById('register-form');
|
||
const formError = document.getElementById('form-error');
|
||
const successBlock = document.getElementById('success');
|
||
const closedBanner = document.getElementById('closed-banner');
|
||
const submitBtn = document.getElementById('submit-btn');
|
||
|
||
let config = {};
|
||
|
||
async function loadConfig() {
|
||
const res = await fetch('/api/config');
|
||
config = await res.json();
|
||
|
||
document.getElementById('footer-login').href = config.nextcloudUrl;
|
||
document.getElementById('login-link').href = config.nextcloudUrl;
|
||
|
||
if (config.allowedEmailDomains?.length) {
|
||
document.getElementById('email-hint').textContent =
|
||
`Только: ${config.allowedEmailDomains.join(', ')}`;
|
||
}
|
||
|
||
if (!config.enabled) {
|
||
closedBanner.classList.remove('hidden');
|
||
form.classList.add('hidden');
|
||
submitBtn.disabled = true;
|
||
}
|
||
}
|
||
|
||
form.addEventListener('submit', async (e) => {
|
||
e.preventDefault();
|
||
formError.classList.add('hidden');
|
||
|
||
const username = document.getElementById('username').value.trim();
|
||
const password = document.getElementById('password').value;
|
||
const password2 = document.getElementById('password2').value;
|
||
const email = document.getElementById('email').value.trim();
|
||
const displayName = document.getElementById('displayName').value.trim();
|
||
|
||
if (password !== password2) {
|
||
formError.textContent = 'Пароли не совпадают';
|
||
formError.classList.remove('hidden');
|
||
return;
|
||
}
|
||
|
||
submitBtn.disabled = true;
|
||
submitBtn.textContent = 'Создание…';
|
||
|
||
try {
|
||
const res = await fetch('/api/register', {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({ username, password, email, displayName }),
|
||
});
|
||
const data = await res.json();
|
||
if (!res.ok) throw new Error(data.error || 'Ошибка');
|
||
|
||
form.classList.add('hidden');
|
||
successBlock.classList.remove('hidden');
|
||
document.getElementById('success-user').textContent = username;
|
||
document.getElementById('login-link').href = data.loginUrl || config.nextcloudUrl;
|
||
} catch (err) {
|
||
formError.textContent = err.message;
|
||
formError.classList.remove('hidden');
|
||
submitBtn.disabled = false;
|
||
submitBtn.textContent = 'Зарегистрироваться';
|
||
}
|
||
});
|
||
|
||
loadConfig().catch(() => {
|
||
formError.textContent = 'Не удалось загрузить настройки';
|
||
formError.classList.remove('hidden');
|
||
});
|