Files
CyberPanel/static/userManagment/userManagment.js

2144 lines
58 KiB
JavaScript

/**
* Created by usman on 8/5/17.
*/
/* Java script code to create account */
app.controller('createUserCtr', function ($scope, $http) {
$scope.acctsLimit = true;
$scope.webLimits = true;
$scope.userCreated = true;
$scope.userCreationFailed = true;
$scope.couldNotConnect = true;
$scope.userCreationLoading = true;
$scope.combinedLength = true;
$scope.createUserFunc = function () {
$scope.webLimits = false;
$scope.userCreated = true;
$scope.userCreationFailed = true;
$scope.couldNotConnect = true;
$scope.userCreationLoading = false;
$scope.combinedLength = true;
var firstName = $scope.firstName;
var lastName = $scope.lastName;
var email = $scope.email;
var selectedACL = $scope.selectedACL;
var websitesLimits = $scope.websitesLimits;
var userName = $scope.userName;
var password = $scope.password;
var url = "/users/submitUserCreation";
var data = {
firstName: firstName,
lastName: lastName,
email: email,
selectedACL: selectedACL,
websitesLimit: websitesLimits,
userName: userName,
password: password,
securityLevel: $scope.securityLevel
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.createStatus == 1) {
$scope.userCreated = false;
$scope.userCreationFailed = true;
$scope.couldNotConnect = true;
$scope.userCreationLoading = true;
$scope.userName = userName;
} else {
$scope.acctsLimit = false;
$scope.webLimits = false;
$scope.userCreated = true;
$scope.userCreationFailed = false;
$scope.couldNotConnect = true;
$scope.userCreationLoading = true;
$scope.errorMessage = response.data.error_message;
}
}
function cantLoadInitialDatas(response) {
$scope.acctsLimit = false;
$scope.webLimits = false;
$scope.userCreated = true;
$scope.userCreationFailed = true;
$scope.couldNotConnect = false;
$scope.userCreationLoading = true;
}
};
$scope.hideSomeThings = function () {
$scope.userCreated = true;
};
///
$scope.generatedPasswordView = true;
$scope.generatePassword = function () {
$scope.generatedPasswordView = false;
$scope.password = randomPassword(16);
};
$scope.usePassword = function () {
$scope.generatedPasswordView = true;
};
});
/* Java script code to create account ends here */
/* Java script code to modify user account */
app.controller('modifyUser', function ($scope, $http) {
var qrCode = window.qr = new QRious({
element: document.getElementById('qr'),
size: 200,
value: 'QRious'
});
$scope.userModificationLoading = true;
$scope.acctDetailsFetched = true;
$scope.userAccountsLimit = true;
$scope.userModified = true;
$scope.canotModifyUser = true;
$scope.couldNotConnect = true;
$scope.canotFetchDetails = true;
$scope.detailsFetched = true;
$scope.accountTypeView = true;
$scope.websitesLimit = true;
$scope.qrHidden = true;
$scope.decideQRShow = function(){
if($scope.twofa === true){
$scope.qrHidden = false;
}else{
$scope.qrHidden = true;
}
};
$scope.copySecretKey = function() {
if ($scope.secretKey) {
// Create a temporary textarea element
var tempTextarea = document.createElement('textarea');
tempTextarea.value = $scope.secretKey;
tempTextarea.style.position = 'fixed';
tempTextarea.style.opacity = '0';
document.body.appendChild(tempTextarea);
// Select and copy the text
tempTextarea.select();
tempTextarea.setSelectionRange(0, 99999); // For mobile devices
try {
document.execCommand('copy');
// Show success feedback (you can add a toast notification here if available)
alert('Secret key copied to clipboard!');
} catch (err) {
alert('Failed to copy secret key. Please copy it manually.');
}
// Remove the temporary element
document.body.removeChild(tempTextarea);
}
};
$scope.regenerateSecret = function() {
if (!$scope.accountUsername) {
alert('Please select a user first.');
return;
}
if (!confirm('Are you sure you want to regenerate the 2FA secret? This will generate a new secret key and you will need to update your authenticator app.')) {
return;
}
var url = "/users/regenerateTwoFASecret";
var data = {
accountUsername: $scope.accountUsername
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(function(response) {
if (response.data.status === 1) {
// Update the secret key and formatted version
$scope.secretKey = response.data.secretKey;
$scope.formattedSecretKey = response.data.secretKey.match(/.{1,4}/g).join(' ');
// Update the QR code with new provisioning URI
qrCode.set({
value: response.data.otpauth
});
// Show success message
alert('2FA secret has been successfully regenerated! Please update your authenticator app with the new QR code or secret key.');
} else {
alert('Error regenerating 2FA secret: ' + response.data.error_message);
}
}, function(error) {
console.error('Error regenerating 2FA secret:', error);
alert('Failed to regenerate 2FA secret. Please try again.');
});
};
// WebAuthn Functions
$scope.loadWebAuthnData = function() {
if (!$scope.accountUsername) return;
var url = '/webauthn/credentials/' + $scope.accountUsername + '/';
$http.get(url).then(function(response) {
if (response.data.success) {
$scope.webauthnCredentials = response.data.credentials;
$scope.webauthnEnabled = response.data.settings.enabled;
$scope.webauthnRequirePasskey = response.data.settings.require_passkey;
$scope.webauthnAllowMultiple = response.data.settings.allow_multiple_credentials;
$scope.webauthnMaxCredentials = response.data.settings.max_credentials;
$scope.canAddCredential = response.data.settings.can_add_credential;
}
}, function(error) {
console.error('Error loading WebAuthn data:', error);
});
};
$scope.toggleWebAuthn = function() {
if ($scope.webauthnEnabled) {
$scope.loadWebAuthnData();
} else {
$scope.webauthnCredentials = [];
$scope.canAddCredential = true;
}
};
$scope.registerNewPasskey = function() {
if (!window.cyberPanelWebAuthn) {
alert('WebAuthn is not supported in this browser');
return;
}
var credentialName = prompt('Enter a name for this passkey:', 'Passkey ' + new Date().toLocaleDateString());
if (!credentialName) return;
window.cyberPanelWebAuthn.registerPasskey($scope.accountUsername, credentialName)
.then(function(response) {
if (response.success) {
$scope.loadWebAuthnData();
$scope.$apply();
}
})
.catch(function(error) {
console.error('Error registering passkey:', error);
});
};
$scope.deleteCredential = function(credentialId) {
if (!confirm('Are you sure you want to delete this passkey?')) return;
if (!window.cyberPanelWebAuthn) {
alert('WebAuthn is not supported in this browser');
return;
}
window.cyberPanelWebAuthn.deleteCredential($scope.accountUsername, credentialId)
.then(function(response) {
if (response.success) {
$scope.loadWebAuthnData();
$scope.$apply();
}
})
.catch(function(error) {
console.error('Error deleting credential:', error);
});
};
$scope.updateCredentialName = function(credentialId, newName) {
if (!window.cyberPanelWebAuthn) return;
window.cyberPanelWebAuthn.updateCredentialName($scope.accountUsername, credentialId, newName)
.then(function(response) {
if (response.success) {
$scope.loadWebAuthnData();
$scope.$apply();
}
})
.catch(function(error) {
console.error('Error updating credential name:', error);
});
};
$scope.refreshCredentials = function() {
$scope.loadWebAuthnData();
};
$scope.saveWebAuthnSettings = function() {
if (!window.cyberPanelWebAuthn) {
alert('WebAuthn is not supported in this browser');
return;
}
var settings = {
enabled: $scope.webauthnEnabled,
require_passkey: $scope.webauthnRequirePasskey,
allow_multiple_credentials: $scope.webauthnAllowMultiple,
max_credentials: $scope.webauthnMaxCredentials,
timeout_seconds: $scope.webauthnTimeout
};
window.cyberPanelWebAuthn.updateSettings($scope.accountUsername, settings)
.then(function(response) {
if (response.success) {
$scope.loadWebAuthnData();
$scope.$apply();
}
})
.catch(function(error) {
console.error('Error updating WebAuthn settings:', error);
});
};
$scope.fetchUserDetails = function () {
var accountUsername = $scope.accountUsername;
var url = "/users/fetchUserDetails";
var data = {
accountUsername: accountUsername
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.fetchStatus === 1) {
$scope.acctDetailsFetched = false;
var userDetails = response.data.userDetails;
$scope.firstName = userDetails.firstName;
$scope.lastName = userDetails.lastName;
$scope.email = userDetails.email;
$scope.securityLevel = userDetails.securityLevel;
$scope.currentSecurityLevel = userDetails.securityLevel;
$scope.twofa = Boolean(userDetails.twofa);
// Format secret key with spaces for better readability
if (userDetails.secretKey) {
$scope.secretKey = userDetails.secretKey;
$scope.formattedSecretKey = userDetails.secretKey.match(/.{1,4}/g).join(' ');
}
// Initialize WebAuthn settings
$scope.webauthnEnabled = false;
$scope.webauthnRequirePasskey = false;
$scope.webauthnAllowMultiple = true;
$scope.webauthnMaxCredentials = 10;
$scope.webauthnTimeout = 60;
$scope.webauthnCredentials = [];
$scope.canAddCredential = true;
// Load WebAuthn settings and credentials
$scope.loadWebAuthnData();
qrCode.set({
value: userDetails.otpauth
});
$scope.userModificationLoading = true;
$scope.acctDetailsFetched = false;
$scope.userModified = true;
$scope.canotModifyUser = true;
$scope.couldNotConnect = true;
$scope.canotFetchDetails = true;
$scope.detailsFetched = false;
$scope.userAccountsLimit = true;
$scope.websitesLimit = true;
} else {
$scope.userModificationLoading = true;
$scope.acctDetailsFetched = true;
$scope.userAccountsLimit = true;
$scope.userModified = true;
$scope.canotModifyUser = true;
$scope.couldNotConnect = true;
$scope.canotFetchDetails = false;
$scope.detailsFetched = true;
$scope.errorMessage = response.data.error_message;
}
}
function cantLoadInitialDatas(response) {
$scope.userModificationLoading = true;
$scope.acctDetailsFetched = true;
$scope.userAccountsLimit = true;
$scope.userModified = true;
$scope.canotModifyUser = true;
$scope.couldNotConnect = false;
$scope.canotFetchDetails = true;
$scope.detailsFetched = true;
}
};
$scope.modifyUser = function () {
$scope.userModificationLoading = false;
$scope.acctDetailsFetched = false;
$scope.userModified = true;
$scope.canotModifyUser = true;
$scope.couldNotConnect = true;
$scope.canotFetchDetails = true;
$scope.detailsFetched = true;
var accountUsername = $scope.accountUsername;
var accountType = $scope.accountType;
var firstName = $scope.firstName;
var lastName = $scope.lastName;
var email = $scope.email;
var password = $scope.password;
var url = "/users/saveModifications";
var data = {
accountUsername: accountUsername,
firstName: firstName,
lastName: lastName,
email: email,
securityLevel: $scope.securityLevel,
twofa: $scope.twofa
};
// Only include password if it's provided and not empty
if (password && password.trim()) {
data.passwordByPass = password;
}
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(function(response) {
ListInitialDatas(response);
// Save WebAuthn settings after successful user modification
if (response.data.saveStatus == 1) {
$scope.saveWebAuthnSettings();
}
}, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.saveStatus == 1) {
$scope.userModificationLoading = true;
$scope.acctDetailsFetched = true;
$scope.userModified = false;
$scope.canotModifyUser = true;
$scope.couldNotConnect = true;
$scope.canotFetchDetails = true;
$scope.detailsFetched = true;
$scope.userAccountsLimit = true;
$scope.accountTypeView = true;
$scope.websitesLimit = true;
$scope.userName = accountUsername;
} else {
$scope.userModificationLoading = true;
$scope.acctDetailsFetched = false;
$scope.userModified = true;
$scope.canotModifyUser = false;
$scope.couldNotConnect = true;
$scope.canotFetchDetails = true;
$scope.detailsFetched = true;
$scope.errorMessage = response.data.error_message;
}
}
function cantLoadInitialDatas(response) {
$scope.userModificationLoading = true;
$scope.acctDetailsFetched = true;
$scope.userModified = true;
$scope.canotModifyUser = true;
$scope.couldNotConnect = false;
$scope.canotFetchDetails = true;
$scope.detailsFetched = true;
}
};
$scope.showLimitsBox = function () {
if ($scope.accountType == "Normal User") {
$scope.websitesLimit = false;
$scope.userAccountsLimit = true;
} else if ($scope.accountType == "Admin") {
$scope.websitesLimit = true;
$scope.userAccountsLimit = true;
} else {
$scope.userAccountsLimit = false;
$scope.websitesLimit = false;
}
};
///
$scope.generatedPasswordView = true;
$scope.generatePassword = function () {
$scope.generatedPasswordView = false;
$scope.password = randomPassword(16);
};
$scope.usePassword = function () {
$scope.generatedPasswordView = true;
};
});
/* Java script code to modify user account ends here */
/* Java script code to delete user account */
app.controller('deleteUser', function ($scope, $http) {
$scope.deleteUserButton = true;
$scope.deleteFailure = true;
$scope.deleteSuccess = true;
$scope.couldNotConnect = true;
$scope.deleteUser = function () {
$scope.deleteUserButton = false;
};
$scope.deleteUserFinal = function () {
var accountUsername = $scope.accountUsername;
var url = "/users/submitUserDeletion";
var data = {
accountUsername: accountUsername,
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.deleteStatus === 1) {
$scope.deleteUserButton = true;
$scope.deleteFailure = true;
$scope.deleteSuccess = false;
$scope.couldNotConnect = true;
$scope.deletedUser = accountUsername;
} else {
$scope.deleteUserButton = true;
$scope.deleteFailure = false;
$scope.deleteSuccess = true;
$scope.couldNotConnect = true;
$scope.deleteUserButton = true;
$scope.errorMessage = response.data.error_message;
}
}
function cantLoadInitialDatas(response) {
$scope.deleteUserButton = true;
$scope.deleteFailure = true;
$scope.deleteSuccess = true;
$scope.couldNotConnect = false;
$scope.deleteUserButton = true;
}
};
});
/* Java script code to delete user account ends here */
/* Java script code to create acl */
app.controller('createACLCTRL', function ($scope, $http) {
$scope.aclCreated = true;
$scope.aclCreationFailed = true;
$scope.couldNotConnect = true;
$scope.aclLoading = true;
$scope.makeAdmin = false;
//
$scope.versionManagement = false;
// User Management
$scope.createNewUser = false;
$scope.listUsers = false;
$scope.resellerCenter = false;
$scope.deleteUser = false;
$scope.changeUserACL = false;
// Website Management
$scope.createWebsite = false;
$scope.modifyWebsite = false;
$scope.suspendWebsite = false;
$scope.deleteWebsite = false;
// Package Management
$scope.createPackage = false;
$scope.listPackages = false;
$scope.deletePackage = false;
$scope.modifyPackage = false;
// Database Management
$scope.createDatabase = true;
$scope.deleteDatabase = true;
$scope.listDatabases = true;
// DNS Management
$scope.createNameServer = false;
$scope.createDNSZone = true;
$scope.deleteZone = true;
$scope.addDeleteRecords = true;
// Email Management
$scope.createEmail = true;
$scope.listEmails = true;
$scope.deleteEmail = true;
$scope.emailForwarding = true;
$scope.changeEmailPassword = true;
$scope.dkimManager = true;
// FTP Management
$scope.createFTPAccount = true;
$scope.deleteFTPAccount = true;
$scope.listFTPAccounts = true;
// Backup Management
$scope.createBackup = true;
$scope.googleDriveBackups = true;
$scope.restoreBackup = false;
$scope.addDeleteDestinations = false;
$scope.scheduleBackups = false;
$scope.remoteBackups = false;
// SSL Management
$scope.manageSSL = true;
$scope.hostnameSSL = false;
$scope.mailServerSSL = false;
$scope.createACLFunc = function () {
$scope.aclLoading = false;
var url = "/users/createACLFunc";
var data = {
aclName: $scope.aclName,
makeAdmin: $scope.makeAdmin,
//
versionManagement: $scope.versionManagement,
// User Management
createNewUser: $scope.createNewUser,
listUsers: $scope.listUsers,
resellerCenter: $scope.resellerCenter,
deleteUser: $scope.deleteUser,
changeUserACL: $scope.changeUserACL,
// Website Management
createWebsite: $scope.createWebsite,
modifyWebsite: $scope.modifyWebsite,
suspendWebsite: $scope.suspendWebsite,
deleteWebsite: $scope.deleteWebsite,
// Package Management
createPackage: $scope.createPackage,
listPackages: $scope.listPackages,
deletePackage: $scope.deletePackage,
modifyPackage: $scope.modifyPackage,
// Database Management
createDatabase: $scope.createDatabase,
deleteDatabase: $scope.deleteDatabase,
listDatabases: $scope.listDatabases,
// DNS Management
createNameServer: $scope.createNameServer,
createDNSZone: $scope.createDNSZone,
deleteZone: $scope.deleteZone,
addDeleteRecords: $scope.addDeleteRecords,
// Email Management
createEmail: $scope.createEmail,
listEmails: $scope.listEmails,
deleteEmail: $scope.deleteEmail,
emailForwarding: $scope.emailForwarding,
changeEmailPassword: $scope.changeEmailPassword,
dkimManager: $scope.dkimManager,
// FTP Management
createFTPAccount: $scope.createFTPAccount,
deleteFTPAccount: $scope.deleteFTPAccount,
listFTPAccounts: $scope.listFTPAccounts,
// Backup Management
createBackup: $scope.createBackup,
googleDriveBackups: $scope.googleDriveBackups,
restoreBackup: $scope.restoreBackup,
addDeleteDestinations: $scope.addDeleteDestinations,
scheduleBackups: $scope.scheduleBackups,
remoteBackups: $scope.remoteBackups,
// SSL Management
manageSSL: $scope.manageSSL,
hostnameSSL: $scope.hostnameSSL,
mailServerSSL: $scope.mailServerSSL
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.aclLoading = true;
if (response.data.status === 1) {
new PNotify({
title: 'Success!',
text: 'ACL Successfully created.',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.errorMessage,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.aclLoading = false;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
$scope.adminHook = function () {
if ($scope.makeAdmin === true) {
$scope.makeAdmin = true;
//
$scope.versionManagement = true;
// User Management
$scope.createNewUser = true;
$scope.listUsers = true;
$scope.resellerCenter = true;
$scope.deleteUser = true;
$scope.changeUserACL = true;
// Website Management
$scope.createWebsite = true;
$scope.modifyWebsite = true;
$scope.suspendWebsite = true;
$scope.deleteWebsite = true;
// Package Management
$scope.createPackage = true;
$scope.listPackages = true;
$scope.deletePackage = true;
$scope.modifyPackage = true;
// Database Management
$scope.createDatabase = true;
$scope.deleteDatabase = true;
$scope.listDatabases = true;
// DNS Management
$scope.createNameServer = true;
$scope.createDNSZone = true;
$scope.deleteZone = true;
$scope.addDeleteRecords = true;
// Email Management
$scope.createEmail = true;
$scope.listEmails = true;
$scope.deleteEmail = true;
$scope.emailForwarding = true;
$scope.changeEmailPassword = true;
$scope.dkimManager = true;
// FTP Management
$scope.createFTPAccount = true;
$scope.deleteFTPAccount = true;
$scope.listFTPAccounts = true;
// Backup Management
$scope.createBackup = true;
$scope.restoreBackup = true;
$scope.addDeleteDestinations = true;
$scope.scheduleBackups = true;
$scope.remoteBackups = true;
// SSL Management
$scope.manageSSL = true;
$scope.hostnameSSL = true;
$scope.mailServerSSL = true;
} else {
$scope.makeAdmin = false;
//
$scope.versionManagement = false;
// User Management
$scope.createNewUser = false;
$scope.listUsers = false;
$scope.resellerCenter = false;
$scope.deleteUser = false;
$scope.changeUserACL = false;
// Website Management
$scope.createWebsite = false;
$scope.modifyWebsite = false;
$scope.suspendWebsite = false;
$scope.deleteWebsite = false;
// Package Management
$scope.createPackage = false;
$scope.listPackages = false;
$scope.deletePackage = false;
$scope.modifyPackage = false;
// Database Management
$scope.createDatabase = true;
$scope.deleteDatabase = true;
$scope.listDatabases = true;
// DNS Management
$scope.createNameServer = false;
$scope.createDNSZone = true;
$scope.deleteZone = true;
$scope.addDeleteRecords = true;
// Email Management
$scope.createEmail = true;
$scope.listEmails = true;
$scope.deleteEmail = true;
$scope.emailForwarding = true;
$scope.changeEmailPassword = true;
$scope.dkimManager = true;
// FTP Management
$scope.createFTPAccount = true;
$scope.deleteFTPAccount = true;
$scope.listFTPAccounts = true;
// Backup Management
$scope.createBackup = true;
$scope.restoreBackup = false;
$scope.addDeleteDestinations = false;
$scope.scheduleBackups = false;
$scope.remoteBackups = false;
// SSL Management
$scope.manageSSL = true;
$scope.hostnameSSL = false;
$scope.mailServerSSL = false;
}
};
});
/* Java script code to create acl ends here */
/* Java script code to delete acl */
app.controller('deleteACTCTRL', function ($scope, $http) {
$scope.aclLoading = true;
$scope.deleteACLButton = true;
$scope.deleteACLFunc = function () {
$scope.deleteACLButton = false;
};
$scope.deleteACLFinal = function () {
$scope.aclLoading = false;
url = "/users/deleteACLFunc";
var data = {
aclToBeDeleted: $scope.aclToBeDeleted
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.aclLoading = true;
if (response.data.status === 1) {
new PNotify({
title: 'Success!',
text: 'ACL Successfully deleted.',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.errorMessage,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.aclLoading = true;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
});
/* Java script code to delete acl */
/* Java script code to create acl */
app.controller('modifyACLCtrl', function ($scope, $http) {
$scope.aclLoading = true;
$scope.aclDetails = true;
$scope.fetchDetails = function () {
$scope.aclLoading = false;
var url = "/users/fetchACLDetails";
var data = {
aclToModify: $scope.aclToModify
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.aclLoading = true;
if (response.data.status === 1) {
new PNotify({
title: 'Success!',
text: 'Current settings successfully fetched',
type: 'success'
});
$scope.aclDetails = false;
$scope.makeAdmin = Boolean(response.data.adminStatus);
//
$scope.versionManagement = Boolean(response.data.versionManagement);
// User Management
$scope.createNewUser = Boolean(response.data.createNewUser);
$scope.listUsers = Boolean(response.data.listUsers);
$scope.resellerCenter = Boolean(response.data.resellerCenter);
$scope.deleteUser = Boolean(response.data.deleteUser);
$scope.changeUserACL = Boolean(response.data.changeUserACL);
// Website Management
$scope.createWebsite = Boolean(response.data.createWebsite);
$scope.modifyWebsite = Boolean(response.data.modifyWebsite);
$scope.suspendWebsite = Boolean(response.data.suspendWebsite);
$scope.deleteWebsite = Boolean(response.data.deleteWebsite);
// Package Management
$scope.createPackage = Boolean(response.data.createPackage);
$scope.listPackages = Boolean(response.data.listPackages);
$scope.deletePackage = Boolean(response.data.deletePackage);
$scope.modifyPackage = Boolean(response.data.modifyPackage);
// Database Management
$scope.createDatabase = Boolean(response.data.createDatabase);
$scope.deleteDatabase = Boolean(response.data.deleteDatabase);
$scope.listDatabases = Boolean(response.data.listDatabases);
// DNS Management
$scope.createNameServer = Boolean(response.data.createNameServer);
$scope.createDNSZone = Boolean(response.data.createDNSZone);
$scope.deleteZone = Boolean(response.data.deleteZone);
$scope.addDeleteRecords = Boolean(response.data.addDeleteRecords);
// Email Management
$scope.createEmail = Boolean(response.data.createEmail);
$scope.listEmails = Boolean(response.data.listEmails);
$scope.deleteEmail = Boolean(response.data.deleteEmail);
$scope.emailForwarding = Boolean(response.data.emailForwarding);
$scope.changeEmailPassword = Boolean(response.data.changeEmailPassword);
$scope.dkimManager = Boolean(response.data.dkimManager);
// FTP Management
$scope.createFTPAccount = Boolean(response.data.createFTPAccount);
$scope.deleteFTPAccount = Boolean(response.data.deleteFTPAccount);
$scope.listFTPAccounts = Boolean(response.data.listFTPAccounts);
// Backup Management
$scope.createBackup = Boolean(response.data.createBackup);
$scope.googleDriveBackups = Boolean(response.data.googleDriveBackups);
$scope.restoreBackup = Boolean(response.data.restoreBackup);
$scope.addDeleteDestinations = Boolean(response.data.addDeleteDestinations);
$scope.scheduleBackups = Boolean(response.data.scheduleBackups);
$scope.remoteBackups = Boolean(response.data.remoteBackups);
// SSL Management
$scope.manageSSL = Boolean(response.data.manageSSL);
$scope.hostnameSSL = Boolean(response.data.hostnameSSL);
$scope.mailServerSSL = Boolean(response.data.mailServerSSL);
} else {
new PNotify({
title: 'Error!',
text: response.data.errorMessage,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.aclLoading = false;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
$scope.saveChanges = function () {
$scope.aclLoading = false;
var url = "/users/submitACLModifications";
var data = {
aclToModify: $scope.aclToModify,
adminStatus: $scope.makeAdmin,
//
versionManagement: $scope.versionManagement,
// User Management
createNewUser: $scope.createNewUser,
listUsers: $scope.listUsers,
resellerCenter: $scope.resellerCenter,
deleteUser: $scope.deleteUser,
changeUserACL: $scope.changeUserACL,
// Website Management
createWebsite: $scope.createWebsite,
modifyWebsite: $scope.modifyWebsite,
suspendWebsite: $scope.suspendWebsite,
deleteWebsite: $scope.deleteWebsite,
// Package Management
createPackage: $scope.createPackage,
listPackages: $scope.listPackages,
deletePackage: $scope.deletePackage,
modifyPackage: $scope.modifyPackage,
// Database Management
createDatabase: $scope.createDatabase,
deleteDatabase: $scope.deleteDatabase,
listDatabases: $scope.listDatabases,
// DNS Management
createNameServer: $scope.createNameServer,
createDNSZone: $scope.createDNSZone,
deleteZone: $scope.deleteZone,
addDeleteRecords: $scope.addDeleteRecords,
// Email Management
createEmail: $scope.createEmail,
listEmails: $scope.listEmails,
deleteEmail: $scope.deleteEmail,
emailForwarding: $scope.emailForwarding,
changeEmailPassword: $scope.changeEmailPassword,
dkimManager: $scope.dkimManager,
// FTP Management
createFTPAccount: $scope.createFTPAccount,
deleteFTPAccount: $scope.deleteFTPAccount,
listFTPAccounts: $scope.listFTPAccounts,
// Backup Management
createBackup: $scope.createBackup,
googleDriveBackups: $scope.googleDriveBackups,
restoreBackup: $scope.restoreBackup,
addDeleteDestinations: $scope.addDeleteDestinations,
scheduleBackups: $scope.scheduleBackups,
remoteBackups: $scope.remoteBackups,
// SSL Management
manageSSL: $scope.manageSSL,
hostnameSSL: $scope.hostnameSSL,
mailServerSSL: $scope.mailServerSSL
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.aclLoading = true;
if (response.data.status === 1) {
new PNotify({
title: 'Success!',
text: 'ACL Successfully modified.',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.errorMessage,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.aclLoading = false;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
$scope.adminHook = function () {
if ($scope.makeAdmin === true) {
$scope.makeAdmin = true;
//
$scope.versionManagement = true;
// User Management
$scope.createNewUser = true;
$scope.listUsers = true;
$scope.resellerCenter = true;
$scope.deleteUser = true;
$scope.changeUserACL = true;
// Website Management
$scope.createWebsite = true;
$scope.modifyWebsite = true;
$scope.suspendWebsite = true;
$scope.deleteWebsite = true;
// Package Management
$scope.createPackage = true;
$scope.listPackages = true;
$scope.deletePackage = true;
$scope.modifyPackage = true;
// Database Management
$scope.createDatabase = true;
$scope.deleteDatabase = true;
$scope.listDatabases = true;
// DNS Management
$scope.createNameServer = true;
$scope.createDNSZone = true;
$scope.deleteZone = true;
$scope.addDeleteRecords = true;
// Email Management
$scope.createEmail = true;
$scope.listEmails = true;
$scope.deleteEmail = true;
$scope.emailForwarding = true;
$scope.changeEmailPassword = true;
$scope.dkimManager = true;
// FTP Management
$scope.createFTPAccount = true;
$scope.deleteFTPAccount = true;
$scope.listFTPAccounts = true;
// Backup Management
$scope.createBackup = true;
$scope.restoreBackup = true;
$scope.addDeleteDestinations = true;
$scope.scheduleBackups = true;
$scope.remoteBackups = true;
// SSL Management
$scope.manageSSL = true;
$scope.hostnameSSL = true;
$scope.mailServerSSL = true;
} else {
$scope.makeAdmin = false;
//
$scope.versionManagement = false;
// User Management
$scope.createNewUser = false;
$scope.listUsers = false;
$scope.resellerCenter = false;
$scope.deleteUser = false;
$scope.changeUserACL = false;
// Website Management
$scope.createWebsite = false;
$scope.modifyWebsite = false;
$scope.suspendWebsite = false;
$scope.deleteWebsite = false;
// Package Management
$scope.createPackage = false;
$scope.listPackages = false;
$scope.deletePackage = false;
$scope.modifyPackage = false;
// Database Management
$scope.createDatabase = true;
$scope.deleteDatabase = true;
$scope.listDatabases = true;
// DNS Management
$scope.createNameServer = false;
$scope.createDNSZone = true;
$scope.deleteZone = true;
$scope.addDeleteRecords = true;
// Email Management
$scope.createEmail = true;
$scope.listEmails = true;
$scope.deleteEmail = true;
$scope.emailForwarding = true;
$scope.changeEmailPassword = true;
$scope.dkimManager = true;
// FTP Management
$scope.createFTPAccount = true;
$scope.deleteFTPAccount = true;
$scope.listFTPAccounts = true;
// Backup Management
$scope.createBackup = true;
$scope.restoreBackup = false;
$scope.addDeleteDestinations = false;
$scope.scheduleBackups = false;
$scope.remoteBackups = false;
// SSL Management
$scope.manageSSL = true;
$scope.hostnameSSL = false;
$scope.mailServerSSL = false;
}
};
});
/* Java script code to create acl ends here */
/* Java script code to change user acl */
app.controller('changeUserACLCTRL', function ($scope, $http) {
$scope.aclLoading = true;
$scope.changeACLFunc = function () {
$scope.aclLoading = false;
url = "/users/changeACLFunc";
var data = {
selectedUser: $scope.selectedUser,
selectedACL: $scope.selectedACL
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.aclLoading = true;
if (response.data.status === 1) {
new PNotify({
title: 'Success!',
text: 'ACL Successfully changed.',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.errorMessage,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.aclLoading = true;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
});
/* Java script code to change user acl */
/* Java script code for reseller center */
app.controller('resellerCenterCTRL', function ($scope, $http) {
$scope.aclLoading = true;
$scope.saveResellerChanges = function () {
$scope.aclLoading = false;
url = "/users/saveResellerChanges";
var data = {
userToBeModified: $scope.userToBeModified,
newOwner: $scope.newOwner,
websitesLimit: $scope.websitesLimit
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.aclLoading = true;
if (response.data.status === 1) {
new PNotify({
title: 'Success!',
text: 'Changes successfully applied!',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.errorMessage,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.aclLoading = true;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
});
/* Java script code for reseller center acl */
/* Java script code for api access */
app.controller('apiAccessCTRL', function ($scope, $http) {
$scope.apiAccessDropDown = true;
$scope.cyberpanelLoading = true;
$scope.showApiAccessDropDown = function () {
$scope.apiAccessDropDown = false;
};
$scope.saveChanges = function () {
$scope.cyberpanelLoading = false;
var url = "/users/saveChangesAPIAccess";
var data = {
accountUsername: $scope.accountUsername,
access: $scope.access,
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
$scope.apiAccessDropDown = true;
new PNotify({
title: 'Success!',
text: 'Changes successfully applied!',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
});
/* Java script code for api access */
/* Java script code for api users list */
app.controller('apiUsersCTRL', function ($scope, $http) {
$scope.apiUsers = [];
$scope.filteredUsers = [];
$scope.searchQuery = '';
$scope.apiUsersLoading = true;
$scope.loadAPIUsers = function() {
$scope.apiUsersLoading = false;
var url = "/users/fetchAPIUsers";
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.get(url, config).then(loadAPIUsersSuccess, loadAPIUsersError);
};
function loadAPIUsersSuccess(response) {
$scope.apiUsersLoading = true;
if (response.data.status === 1) {
$scope.apiUsers = response.data.users;
$scope.filteredUsers = response.data.users;
new PNotify({
title: 'Success!',
text: 'API users loaded successfully',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.error_message,
type: 'error'
});
}
}
function loadAPIUsersError(response) {
$scope.apiUsersLoading = true;
new PNotify({
title: 'Error!',
text: 'Could not load API users. Please refresh the page.',
type: 'error'
});
}
$scope.searchUsers = function() {
if (!$scope.searchQuery || $scope.searchQuery.trim() === '') {
$scope.filteredUsers = $scope.apiUsers;
return;
}
var query = $scope.searchQuery.toLowerCase();
$scope.filteredUsers = $scope.apiUsers.filter(function(user) {
return user.userName.toLowerCase().includes(query) ||
user.firstName.toLowerCase().includes(query) ||
user.lastName.toLowerCase().includes(query) ||
user.email.toLowerCase().includes(query) ||
user.aclName.toLowerCase().includes(query);
});
};
$scope.clearSearch = function() {
$scope.searchQuery = '';
$scope.filteredUsers = $scope.apiUsers;
};
$scope.viewUserDetails = function(user) {
new PNotify({
title: 'User Details',
text: 'Username: ' + user.userName + '<br>' +
'Full Name: ' + user.firstName + ' ' + user.lastName + '<br>' +
'Email: ' + user.email + '<br>' +
'ACL: ' + user.aclName + '<br>' +
'Token Status: ' + user.tokenStatus + '<br>' +
'State: ' + user.state,
type: 'info',
styling: 'bootstrap3',
delay: 10000
});
};
$scope.disableAPI = function(user) {
if (confirm('Are you sure you want to disable API access for ' + user.userName + '?')) {
$scope.apiUsersLoading = false;
var url = "/users/saveChangesAPIAccess";
var data = {
accountUsername: user.userName,
access: 'Disable'
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(disableAPISuccess, disableAPIError);
}
};
function disableAPISuccess(response) {
$scope.apiUsersLoading = true;
if (response.data.status === 1) {
// Remove user from the list
$scope.apiUsers = $scope.apiUsers.filter(function(u) {
return u.userName !== response.data.accountUsername;
});
$scope.filteredUsers = $scope.apiUsers;
new PNotify({
title: 'Success!',
text: 'API access disabled for ' + response.data.accountUsername,
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.error_message,
type: 'error'
});
}
}
function disableAPIError(response) {
$scope.apiUsersLoading = true;
new PNotify({
title: 'Error!',
text: 'Could not disable API access. Please try again.',
type: 'error'
});
}
// Load API users when controller initializes
$scope.loadAPIUsers();
});
/* Java script code to list table users */
app.controller('listTableUsers', function ($scope, $http) {
$scope.cyberpanelLoading = true;
var UserToDelete;
$scope.populateCurrentRecords = function () {
$scope.cyberpanelLoading = false;
url = "/users/fetchTableUsers";
var data = {};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
$scope.records = JSON.parse(response.data.data);
new PNotify({
title: 'Success!',
text: 'Users successfully fetched!',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
$scope.populateCurrentRecords();
$scope.deleteUserInitial = function (name){
UserToDelete = name;
$scope.UserToDelete = name;
$('#deleteModal').modal('show');
};
$scope.deleteUserFinal = function () {
$scope.cyberpanelLoading = false;
var url = "/users/submitUserDeletion";
var data = {
accountUsername: UserToDelete,
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
if (response.data.deleteStatus === 1) {
$scope.populateCurrentRecords();
$('#deleteModal').modal('hide');
new PNotify({
title: 'Success!',
text: 'Users successfully deleted!',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = false;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
$scope.editInitial = function (name) {
$scope.name = name;
$('#editModal').modal('show');
};
$scope.saveResellerChanges = function () {
$scope.cyberpanelLoading = false;
url = "/users/saveResellerChanges";
var data = {
userToBeModified: $scope.name,
newOwner: $scope.newOwner
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.status === 1) {
$scope.populateCurrentRecords();
$('#editModal').modal('hide');
new PNotify({
title: 'Success!',
text: 'Changes successfully applied!',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.errorMessage,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
$scope.changeACLFunc = function () {
$scope.cyberpanelLoading = false;
url = "/users/changeACLFunc";
var data = {
selectedUser: $scope.name,
selectedACL: $scope.selectedACL
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
$scope.populateCurrentRecords();
$('#editModal').modal('hide');
new PNotify({
title: 'Success!',
text: 'ACL Successfully changed.',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.errorMessage,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.aclLoading = true;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
$scope.controlUserState = function (userName, state) {
$scope.cyberpanelLoading = false;
var url = "/users/controlUserState";
var data = {
accountUsername: userName,
state: state
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
$scope.populateCurrentRecords();
new PNotify({
title: 'Success!',
text: 'Action successfully started.',
type: 'success'
});
} else {
new PNotify({
title: 'Error!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = false;
new PNotify({
title: 'Error!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
}
});
/* Java script code to list table users */