93 lines
3.4 KiB
JavaScript
93 lines
3.4 KiB
JavaScript
|
|
let settings = { publicBaseUrl: '', bookTitle: '' };
|
|||
|
|
|
|||
|
|
async function checkSession() {
|
|||
|
|
const res = await fetch('/api/session');
|
|||
|
|
const data = await res.json();
|
|||
|
|
if (data.role !== 'admin') {
|
|||
|
|
window.location.href = '/';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
async function loadSettings() {
|
|||
|
|
const res = await fetch('/api/settings');
|
|||
|
|
if (!res.ok) return;
|
|||
|
|
const data = await res.json();
|
|||
|
|
settings = data.settings || { publicBaseUrl: '', bookTitle: '' };
|
|||
|
|
document.getElementById('publicBaseUrl').value = settings.publicBaseUrl || '';
|
|||
|
|
document.getElementById('bookTitle').value = settings.bookTitle || '';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
document.getElementById('saveSettingsBtn').addEventListener('click', async () => {
|
|||
|
|
const publicBaseUrl = document.getElementById('publicBaseUrl').value.trim();
|
|||
|
|
const bookTitle = document.getElementById('bookTitle').value.trim();
|
|||
|
|
const res = await fetch('/api/settings', {
|
|||
|
|
method: 'PUT',
|
|||
|
|
headers: { 'Content-Type': 'application/json' },
|
|||
|
|
body: JSON.stringify({ publicBaseUrl, bookTitle }),
|
|||
|
|
});
|
|||
|
|
const data = await res.json();
|
|||
|
|
if (res.ok) {
|
|||
|
|
settings = data.settings;
|
|||
|
|
const msg = document.getElementById('settingsSaved');
|
|||
|
|
msg.textContent = 'Gespeichert ✓';
|
|||
|
|
msg.classList.add('show');
|
|||
|
|
setTimeout(() => msg.classList.remove('show'), 1800);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
document.getElementById('logoutBtn').addEventListener('click', async () => {
|
|||
|
|
await fetch('/api/logout', { method: 'POST' });
|
|||
|
|
window.location.href = '/';
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// --- Sichern & Wiederherstellen ---
|
|||
|
|
function showTransferMsg(text, isError) {
|
|||
|
|
const box = document.getElementById('transferMsg');
|
|||
|
|
box.innerHTML = isError ? `<p class="error-msg">${text}</p>` : `<p class="saved-msg2 show">${text}</p>`;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
document.getElementById('bookExportBtn').addEventListener('click', () => {
|
|||
|
|
window.location.href = '/api/book/export';
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
document.getElementById('bookImportBtn').addEventListener('click', async () => {
|
|||
|
|
const fileInput = document.getElementById('bookImportFile');
|
|||
|
|
const file = fileInput.files[0];
|
|||
|
|
if (!file) { showTransferMsg('Bitte zuerst eine ZIP-Datei auswählen.', true); return; }
|
|||
|
|
const replaceAll = document.getElementById('bookImportReplace').checked;
|
|||
|
|
if (replaceAll && !confirm('Wirklich ALLE bestehenden Freunde vor dem Import löschen?')) return;
|
|||
|
|
|
|||
|
|
const fd = new FormData();
|
|||
|
|
fd.append('file', file);
|
|||
|
|
fd.append('replaceAll', replaceAll ? 'true' : 'false');
|
|||
|
|
showTransferMsg('Importiere...', false);
|
|||
|
|
const res = await fetch('/api/book/import', { method: 'POST', body: fd });
|
|||
|
|
const data = await res.json();
|
|||
|
|
if (res.ok) {
|
|||
|
|
showTransferMsg(`${data.imported.length} Freund(e) importiert: ${data.imported.join(', ') || '–'}`, false);
|
|||
|
|
fileInput.value = '';
|
|||
|
|
} else {
|
|||
|
|
showTransferMsg(data.error || 'Import fehlgeschlagen.', true);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
document.getElementById('friendImportBtn').addEventListener('click', async () => {
|
|||
|
|
const fileInput = document.getElementById('friendImportFile');
|
|||
|
|
const file = fileInput.files[0];
|
|||
|
|
if (!file) { showTransferMsg('Bitte zuerst eine ZIP-Datei auswählen.', true); return; }
|
|||
|
|
const fd = new FormData();
|
|||
|
|
fd.append('file', file);
|
|||
|
|
showTransferMsg('Importiere...', false);
|
|||
|
|
const res = await fetch('/api/friends/import', { method: 'POST', body: fd });
|
|||
|
|
const data = await res.json();
|
|||
|
|
if (res.ok) {
|
|||
|
|
showTransferMsg(`"${data.friend.name}" wurde importiert.`, false);
|
|||
|
|
fileInput.value = '';
|
|||
|
|
} else {
|
|||
|
|
showTransferMsg(data.error || 'Import fehlgeschlagen.', true);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
checkSession();
|
|||
|
|
loadSettings();
|