mirror of
https://github.com/ellite/Wallos.git
synced 2025-12-17 02:34:24 -06:00
467 lines
14 KiB
JavaScript
467 lines
14 KiB
JavaScript
function makeFetchCall(url, data, button) {
|
|
return fetch(url, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
},
|
|
body: JSON.stringify(data),
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showSuccessMessage(data.message);
|
|
} else {
|
|
showErrorMessage(data.message);
|
|
}
|
|
button.disabled = false;
|
|
})
|
|
.catch((error) => {
|
|
showErrorMessage(error);
|
|
button.disabled = false;
|
|
});
|
|
|
|
}
|
|
|
|
function testSmtpSettingsButton() {
|
|
const button = document.getElementById("testSmtpSettingsButton");
|
|
button.disabled = true;
|
|
|
|
const smtpAddress = document.getElementById("smtpaddress").value;
|
|
const smtpPort = document.getElementById("smtpport").value;
|
|
const encryption = document.querySelector('input[name="encryption"]:checked').value;
|
|
const smtpUsername = document.getElementById("smtpusername").value;
|
|
const smtpPassword = document.getElementById("smtppassword").value;
|
|
const fromEmail = document.getElementById("fromemail").value;
|
|
|
|
const data = {
|
|
smtpaddress: smtpAddress,
|
|
smtpport: smtpPort,
|
|
encryption: encryption,
|
|
smtpusername: smtpUsername,
|
|
smtppassword: smtpPassword,
|
|
fromemail: fromEmail
|
|
};
|
|
|
|
makeFetchCall('endpoints/notifications/testemailnotifications.php', data, button);
|
|
}
|
|
|
|
function saveSmtpSettingsButton() {
|
|
const button = document.getElementById("saveSmtpSettingsButton");
|
|
button.disabled = true;
|
|
|
|
const smtpAddress = document.getElementById("smtpaddress").value;
|
|
const smtpPort = document.getElementById("smtpport").value;
|
|
const encryption = document.querySelector('input[name="encryption"]:checked').value;
|
|
const smtpUsername = document.getElementById("smtpusername").value;
|
|
const smtpPassword = document.getElementById("smtppassword").value;
|
|
const fromEmail = document.getElementById("fromemail").value;
|
|
|
|
const data = {
|
|
smtpaddress: smtpAddress,
|
|
smtpport: smtpPort,
|
|
encryption: encryption,
|
|
smtpusername: smtpUsername,
|
|
smtppassword: smtpPassword,
|
|
fromemail: fromEmail
|
|
};
|
|
|
|
fetch('endpoints/admin/savesmtpsettings.php', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
},
|
|
body: JSON.stringify(data),
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
const emailVerificationCheckbox = document.getElementById('requireEmail');
|
|
emailVerificationCheckbox.disabled = false;
|
|
showSuccessMessage(data.message);
|
|
} else {
|
|
showErrorMessage(data.message);
|
|
}
|
|
button.disabled = false;
|
|
})
|
|
.catch((error) => {
|
|
showErrorMessage(error);
|
|
button.disabled = false;
|
|
});
|
|
|
|
}
|
|
|
|
function backupDB() {
|
|
const button = document.getElementById("backupDB");
|
|
button.disabled = true;
|
|
|
|
fetch("endpoints/db/backup.php", {
|
|
method: "POST",
|
|
headers: {
|
|
"X-CSRF-Token": window.csrfToken,
|
|
},
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
const link = document.createElement("a");
|
|
const filename = data.file;
|
|
link.href = ".tmp/" + filename;
|
|
|
|
const date = new Date();
|
|
const year = date.getFullYear();
|
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
const day = String(date.getDate()).padStart(2, "0");
|
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
const timestamp = `${year}${month}${day}-${hours}${minutes}`;
|
|
link.download = `Wallos-Backup-${timestamp}.zip`;
|
|
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
} else {
|
|
showErrorMessage(data.message || translate("backup_failed"));
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.error(error);
|
|
showErrorMessage(translate("unknown_error"));
|
|
})
|
|
.finally(() => {
|
|
button.disabled = false;
|
|
});
|
|
}
|
|
|
|
|
|
function openRestoreDBFileSelect() {
|
|
document.getElementById('restoreDBFile').click();
|
|
};
|
|
|
|
function restoreDB() {
|
|
const input = document.getElementById('restoreDBFile');
|
|
const file = input.files[0];
|
|
|
|
if (!file) {
|
|
showErrorMessage(translate('no_file_selected'));
|
|
return;
|
|
}
|
|
|
|
const formData = new FormData();
|
|
formData.append('file', file);
|
|
|
|
const button = document.getElementById('restoreDB');
|
|
button.disabled = true;
|
|
|
|
fetch('endpoints/db/restore.php', {
|
|
method: 'POST',
|
|
headers: {
|
|
'X-CSRF-Token': window.csrfToken, // ✅ CSRF protection
|
|
},
|
|
body: formData,
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showSuccessMessage(data.message);
|
|
|
|
// After restoring, run migrations then log out (force re-login)
|
|
fetch('endpoints/db/migrate.php')
|
|
.then(() => {
|
|
window.location.href = 'logout.php';
|
|
})
|
|
.catch(() => {
|
|
window.location.href = 'logout.php';
|
|
});
|
|
} else {
|
|
showErrorMessage(data.message || translate('restore_failed'));
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.error(error);
|
|
showErrorMessage(translate('unknown_error'));
|
|
})
|
|
.finally(() => {
|
|
button.disabled = false;
|
|
});
|
|
}
|
|
|
|
function saveAccountRegistrationsButton() {
|
|
const button = document.getElementById('saveAccountRegistrations');
|
|
button.disabled = true;
|
|
|
|
const open_registrations = document.getElementById('registrations').checked ? 1 : 0;
|
|
const max_users = document.getElementById('maxUsers').value;
|
|
const require_email_validation = document.getElementById('requireEmail').checked ? 1 : 0;
|
|
const server_url = document.getElementById('serverUrl').value;
|
|
const disable_login = document.getElementById('disableLogin').checked ? 1 : 0;
|
|
|
|
const data = {
|
|
open_registrations: open_registrations,
|
|
max_users: max_users,
|
|
require_email_validation: require_email_validation,
|
|
server_url: server_url,
|
|
disable_login: disable_login
|
|
};
|
|
|
|
fetch('endpoints/admin/saveopenregistrations.php', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
},
|
|
body: JSON.stringify(data)
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showSuccessMessage(data.message);
|
|
button.disabled = false;
|
|
} else {
|
|
showErrorMessage(data.message);
|
|
button.disabled = false;
|
|
}
|
|
})
|
|
.catch(error => {
|
|
showErrorMessage(error);
|
|
button.disabled = false;
|
|
});
|
|
}
|
|
|
|
function removeUser(userId) {
|
|
const data = {
|
|
userId: userId
|
|
};
|
|
|
|
fetch('endpoints/admin/deleteuser.php', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
},
|
|
body: JSON.stringify(data)
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showSuccessMessage(data.message);
|
|
const userContainer = document.querySelector(`.form-group-inline[data-userid="${userId}"]`);
|
|
if (userContainer) {
|
|
userContainer.remove();
|
|
}
|
|
} else {
|
|
showErrorMessage(data.message);
|
|
}
|
|
})
|
|
.catch(error => showErrorMessage('Error:', error));
|
|
|
|
}
|
|
|
|
function addUserButton() {
|
|
const button = document.getElementById('addUserButton');
|
|
button.disabled = true;
|
|
|
|
const username = document.getElementById('newUsername').value;
|
|
const email = document.getElementById('newEmail').value;
|
|
const password = document.getElementById('newPassword').value;
|
|
|
|
const data = {
|
|
username: username,
|
|
email: email,
|
|
password: password
|
|
};
|
|
|
|
fetch('endpoints/admin/adduser.php', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
},
|
|
body: JSON.stringify(data)
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showSuccessMessage(data.message);
|
|
button.disabled = false;
|
|
window.location.reload();
|
|
} else {
|
|
showErrorMessage(data.message);
|
|
button.disabled = false;
|
|
}
|
|
})
|
|
.catch(error => {
|
|
showErrorMessage(error);
|
|
button.disabled = false;
|
|
});
|
|
}
|
|
|
|
function deleteUnusedLogos() {
|
|
const button = document.getElementById('deleteUnusedLogos');
|
|
button.disabled = true;
|
|
|
|
fetch('endpoints/admin/deleteunusedlogos.php', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
}
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showSuccessMessage(data.message);
|
|
const numberOfLogos = document.querySelector('.number-of-logos');
|
|
numberOfLogos.innerText = '0';
|
|
} else {
|
|
showErrorMessage(data.message);
|
|
button.disabled = false;
|
|
}
|
|
})
|
|
.catch(error => {
|
|
showErrorMessage(error);
|
|
button.disabled = false;
|
|
});
|
|
}
|
|
|
|
function toggleUpdateNotification() {
|
|
const notificationEnabledCheckbox = document.getElementById('updateNotification');
|
|
const notificationEnabled = notificationEnabledCheckbox.checked ? 1 : 0;
|
|
|
|
const data = {
|
|
notificationEnabled: notificationEnabled
|
|
};
|
|
|
|
fetch('endpoints/admin/updatenotification.php', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
},
|
|
body: JSON.stringify(data)
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showSuccessMessage(data.message);
|
|
if (notificationEnabled === 1) {
|
|
fetch('endpoints/cronjobs/checkforupdates.php');
|
|
}
|
|
} else {
|
|
showErrorMessage(data.message);
|
|
}
|
|
})
|
|
.catch(error => showErrorMessage('Error:', error));
|
|
|
|
}
|
|
|
|
function executeCronJob(job) {
|
|
const url = `endpoints/cronjobs/${job}.php`;
|
|
const resultTextArea = document.getElementById('cronjobResult');
|
|
|
|
fetch(url)
|
|
.then(response => {
|
|
return response.text();
|
|
})
|
|
.then(data => {
|
|
const formattedData = data.replace(/<br\s*\/?>/gi, '\n');
|
|
resultTextArea.value = formattedData;
|
|
})
|
|
.catch(error => {
|
|
console.error('Fetch error:', error);
|
|
showErrorMessage('Error:', error);
|
|
});
|
|
}
|
|
|
|
function toggleOidcEnabled() {
|
|
const toggle = document.getElementById("oidcEnabled");
|
|
toggle.disabled = true;
|
|
|
|
const oidcEnabled = toggle.checked ? 1 : 0;
|
|
|
|
const data = {
|
|
oidcEnabled: oidcEnabled
|
|
};
|
|
|
|
fetch('endpoints/admin/enableoidc.php', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
},
|
|
body: JSON.stringify(data)
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showSuccessMessage(data.message);
|
|
} else {
|
|
showErrorMessage(data.message);
|
|
}
|
|
toggle.disabled = false;
|
|
})
|
|
.catch(error => {
|
|
showErrorMessage('Error:', error);
|
|
toggle.disabled = false;
|
|
});
|
|
|
|
}
|
|
|
|
function saveOidcSettingsButton() {
|
|
const button = document.getElementById("saveOidcSettingsButton");
|
|
button.disabled = true;
|
|
|
|
const oidcName = document.getElementById("oidcName").value;
|
|
const oidcClientId = document.getElementById("oidcClientId").value;
|
|
const oidcClientSecret = document.getElementById("oidcClientSecret").value;
|
|
const oidcAuthUrl = document.getElementById("oidcAuthUrl").value;
|
|
const oidcTokenUrl = document.getElementById("oidcTokenUrl").value;
|
|
const oidcUserInfoUrl = document.getElementById("oidcUserInfoUrl").value;
|
|
const oidcRedirectUrl = document.getElementById("oidcRedirectUrl").value;
|
|
const oidcLogoutUrl = document.getElementById("oidcLogoutUrl").value;
|
|
const oidcUserIdentifierField = document.getElementById("oidcUserIdentifierField").value;
|
|
const oidcScopes = document.getElementById("oidcScopes").value;
|
|
const oidcAuthStyle = document.getElementById("oidcAuthStyle").value;
|
|
const oidcAutoCreateUser = document.getElementById("oidcAutoCreateUser").checked ? 1 : 0;
|
|
const oidcPasswordLoginDisabled = document.getElementById("oidcPasswordLoginDisabled").checked ? 1 : 0;
|
|
|
|
const data = {
|
|
oidcName: oidcName,
|
|
oidcClientId: oidcClientId,
|
|
oidcClientSecret: oidcClientSecret,
|
|
oidcAuthUrl: oidcAuthUrl,
|
|
oidcTokenUrl: oidcTokenUrl,
|
|
oidcUserInfoUrl: oidcUserInfoUrl,
|
|
oidcRedirectUrl: oidcRedirectUrl,
|
|
oidcLogoutUrl: oidcLogoutUrl,
|
|
oidcUserIdentifierField: oidcUserIdentifierField,
|
|
oidcScopes: oidcScopes,
|
|
oidcAuthStyle: oidcAuthStyle,
|
|
oidcAutoCreateUser: oidcAutoCreateUser,
|
|
oidcPasswordLoginDisabled: oidcPasswordLoginDisabled
|
|
};
|
|
|
|
|
|
fetch('endpoints/admin/saveoidcsettings.php', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
},
|
|
body: JSON.stringify(data)
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showSuccessMessage(data.message);
|
|
} else {
|
|
showErrorMessage(data.message);
|
|
}
|
|
button.disabled = false;
|
|
})
|
|
.catch(error => {
|
|
showErrorMessage('Error:', error);
|
|
button.disabled = false;
|
|
});
|
|
} |