214 lines
7.9 KiB
JavaScript
214 lines
7.9 KiB
JavaScript
$(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('<option value="">Nutzer waehlen...</option>');
|
|
|
|
users.forEach(function(u) {
|
|
var badge = $('<span></span>').addClass('badge badge-' + u.role).text(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 = $('<span></span>').addClass('badge badge-expired').text('abgelaufen');
|
|
info = 'Abgelaufen: ' + expDate;
|
|
} else {
|
|
info = 'Bis: ' + expDate;
|
|
}
|
|
}
|
|
|
|
var row = $('<tr></tr>');
|
|
var userCell = $('<td></td>').text(u.username + ' ').append(badge);
|
|
var actions = $('<td></td>');
|
|
$('<button type="button" class="btn-small user-password">PW</button>')
|
|
.data('user-id', u.id)
|
|
.data('username', u.username)
|
|
.appendTo(actions);
|
|
$('<button type="button" class="btn-small user-delete">X</button>')
|
|
.data('user-id', u.id)
|
|
.data('username', u.username)
|
|
.appendTo(actions);
|
|
|
|
row.append($('<td></td>').text(u.id));
|
|
row.append(userCell);
|
|
row.append($('<td></td>').text(u.role));
|
|
row.append($('<td></td>').text(info));
|
|
row.append(actions);
|
|
$('#users-tbody').append(row);
|
|
|
|
// Dropdown fuer Ordner-Zuweisung (nur non-admin)
|
|
if (u.role !== 'admin') {
|
|
$('#user-select').append($('<option></option>').val(u.id).text(u.username + ' (' + u.role + ')'));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
// 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
|
|
function deleteUser(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'); });
|
|
}
|
|
}
|
|
|
|
$('#users-tbody').on('click', '.user-delete', function() {
|
|
deleteUser($(this).data('user-id'), $(this).data('username'));
|
|
});
|
|
|
|
// Passwort aendern (Admin setzt fuer anderen User)
|
|
function changePassword(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');
|
|
});
|
|
}
|
|
|
|
$('#users-tbody').on('click', '.user-password', function() {
|
|
changePassword($(this).data('user-id'), $(this).data('username'));
|
|
});
|
|
|
|
// ==================== ORDNER-ZUWEISUNG ====================
|
|
|
|
function loadFolders() {
|
|
$.get('/api/admin/folders').done(function(folders) {
|
|
$('#folder-checkboxes').empty();
|
|
if (folders.length === 0) {
|
|
$('#folder-checkboxes').html('<p>Keine Unterordner in Websitebilder gefunden. Erstelle Ordner in Nextcloud.</p>');
|
|
return;
|
|
}
|
|
folders.forEach(function(f) {
|
|
var wrapper = $('<div class="folder-check"></div>');
|
|
var label = $('<label></label>');
|
|
$('<input type="checkbox" class="folder-cb"/>').val(f).appendTo(label);
|
|
label.append(' ');
|
|
$('<i class="fa fa-folder"></i>').appendTo(label);
|
|
label.append(' ' + f);
|
|
wrapper.append(label);
|
|
$('#folder-checkboxes').append(wrapper);
|
|
});
|
|
});
|
|
}
|
|
|
|
// 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').filter(function() {
|
|
return $(this).val() === 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');
|
|
});
|
|
});
|
|
|
|
// ==================== WEBSITE SYNC ====================
|
|
|
|
$('#sync-site').click(function() {
|
|
if (!confirm('Neueste Version laden und Website neu starten?')) return;
|
|
|
|
var $button = $(this);
|
|
var $status = $('#sync-status');
|
|
$button.prop('disabled', true);
|
|
$status.text('Sync laeuft...');
|
|
|
|
$.post('/api/admin/sync')
|
|
.done(function(res) {
|
|
$status.text(res.message || 'Sync gestartet. Website startet neu...');
|
|
window.setTimeout(function() {
|
|
window.location.reload();
|
|
}, 12000);
|
|
})
|
|
.fail(function(err) {
|
|
var msg = err.responseJSON ? err.responseJSON.error : 'Sync fehlgeschlagen';
|
|
$status.text(msg);
|
|
$button.prop('disabled', false);
|
|
});
|
|
});
|
|
|
|
// ==================== 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');
|
|
});
|
|
});
|
|
});
|