$(document).ready(function() { // Auth check $.get('/api/auth/me') .done(function(user) { if(user.role !== 'admin') { alert('Kein Zugriff!'); window.location.href = '/'; } else { loadUsers(); loadFolders(); $('body').removeClass('is-preload'); } }) .fail(function() { window.location.href = '/'; }); // Logout $('#logout-btn').click(function(e) { e.preventDefault(); $.post('/api/auth/logout').done(function() { window.location.href = '/'; }); }); // ==================== NUTZER ==================== function loadUsers() { $.get('/api/admin/users').done(function(users) { $('#users-tbody').empty(); $('#user-select').html(''); users.forEach(function(u) { var badge = '' + u.role + ''; var created = u.created_at ? new Date(u.created_at).toLocaleDateString('de-DE') : '-'; var info = created; if (u.role === 'client' && u.expires_at) { var expDate = new Date(u.expires_at).toLocaleDateString('de-DE'); if (u.expired) { badge = 'abgelaufen'; info = 'Abgelaufen: ' + expDate; } else { info = 'Bis: ' + expDate; } } var actions = ''; actions += ''; $('#users-tbody').append( '' + u.id + '' + u.username + ' ' + badge + '' + u.role + '' + info + '' + actions + '' ); // Dropdown fuer Ordner-Zuweisung (nur non-admin) if (u.role !== 'admin') { $('#user-select').append(''); } }); }); } // Nutzer erstellen $('#create-user-form').submit(function(e) { e.preventDefault(); $.post('/api/admin/users', { username: $('#new-username').val(), password: $('#new-password').val(), role: $('#new-role').val() }).done(function() { $('#new-username').val(''); $('#new-password').val(''); loadUsers(); }).fail(function(err) { alert('Fehler: ' + (err.responseJSON ? err.responseJSON.error : 'Unbekannt')); }); }); // Nutzer loeschen window.deleteUser = function(id, name) { if (confirm('Nutzer "' + name + '" wirklich loeschen?')) { $.ajax({ url: '/api/admin/users/' + id, type: 'DELETE' }) .done(loadUsers) .fail(function(err) { alert(err.responseJSON ? err.responseJSON.error : 'Fehler'); }); } }; // Passwort aendern (Admin setzt fuer anderen User) window.changePassword = function(id, name) { var newPw = prompt('Neues Passwort fuer "' + name + '":'); if (!newPw) return; $.ajax({ url: '/api/admin/users/' + id + '/password', type: 'PUT', contentType: 'application/json', data: JSON.stringify({ new_password: newPw }) }).done(function() { alert('Passwort geaendert!'); }).fail(function(err) { alert(err.responseJSON ? err.responseJSON.error : 'Fehler'); }); }; // ==================== ORDNER-ZUWEISUNG ==================== function loadFolders() { $.get('/api/admin/folders').done(function(folders) { $('#folder-checkboxes').empty(); if (folders.length === 0) { $('#folder-checkboxes').html('

Keine Unterordner in Websitebilder gefunden. Erstelle Ordner in Nextcloud.

'); return; } folders.forEach(function(f) { $('#folder-checkboxes').append( '
' ); }); }); } // Bei User-Auswahl: zugewiesene Ordner laden $('#user-select').change(function() { var uid = $(this).val(); $('.folder-cb').prop('checked', false); if (!uid) return; $.get('/api/admin/assign?user_id=' + uid).done(function(assignedFolders) { assignedFolders.forEach(function(f) { $('.folder-cb[value="' + f + '"]').prop('checked', true); }); }); }); // Zuweisung speichern $('#save-assignments').click(function() { var uid = $('#user-select').val(); if (!uid) return alert('Bitte Nutzer waehlen'); var selected = []; $('.folder-cb:checked').each(function() { selected.push($(this).val()); }); $.ajax({ url: '/api/admin/assign', type: 'POST', contentType: 'application/json', data: JSON.stringify({ user_id: uid, folders: selected }) }).done(function() { $('#assign-status').text('Gespeichert!').fadeIn().delay(2000).fadeOut(); }).fail(function() { alert('Fehler beim Speichern'); }); }); // ==================== EIGENES PASSWORT ==================== $('#admin-pw-form').submit(function(e) { e.preventDefault(); $.post('/api/auth/change-password', { old_password: $('#admin-pw-old').val(), new_password: $('#admin-pw-new').val() }).done(function() { alert('Passwort geaendert!'); $('#admin-pw-old, #admin-pw-new').val(''); }).fail(function(err) { alert(err.responseJSON ? err.responseJSON.error : 'Fehler'); }); }); });