File: //proc/thread-self/root/usr/local/CyberCP/userManagment/static/userManagment/userManagment.js
/**
 * 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.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(' ');
                }
                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,
            passwordByPass: password,
            securityLevel: $scope.securityLevel,
            twofa: $scope.twofa
        };
        var config = {
            headers: {
                'X-CSRFToken': getCookie('csrftoken')
            }
        };
        $http.post(url, data, config).then(ListInitialDatas, 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 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 */