Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/twofactorauth/views/usersController.js

/*
# templates/twofactorauth/views/configController.js
#                                                  Copyright(c) 2020 cPanel, L.L.C.
#                                                            All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/

/* global define: false */
/* jshint -W100 */

define(
    [
        "angular",
        "jquery",
        "cjt/util/locale",
        "lodash",
        "uiBootstrap",
        "cjt/validator/datatype-validators",
        "cjt/validator/compare-validators",
        "cjt/directives/validationContainerDirective",
        "cjt/directives/validationItemDirective",
        "cjt/directives/toggleSortDirective",
        "cjt/directives/pageSizeDirective",
        "cjt/decorators/paginationDecorator",
        "cjt/directives/actionButtonDirective",
        "cjt/decorators/growlDecorator",
        "app/services/tfaData"
    ],
    function(angular, $, LOCALE, _) {

        // Retrieve the current application
        var app = angular.module("App");

        var controller = app.controller(
            "usersController",
            ["$scope", "$uibModal", "TwoFactorData", "growl", "$timeout",
                function($scope, $uibModal, TwoFactorData, growl, $timeout) {

                    var UC = this;
                    UC.users = [];

                    UC.usersToDisable = [];
                    UC.disableInProgress = false;
                    UC.isSingleDisable = false;

                    UC.modalInstance = null;

                    UC.loadingUsers = true;

                    UC.meta = {
                        sortDirection: "asc",
                        sortBy: "user_name",
                        sortType: "",
                        maxPages: 0,
                        totalRows: UC.users.length || 0,
                        pageNumber: 1,
                        pageNumberStart: 0,
                        pageNumberEnd: 0,
                        pageSize: 20,
                        pageSizes: [20, 50, 100],
                        filteredList: []
                    };

                    UC.resetPagination = function() {
                        UC.meta.pageNumber = 1;
                        UC.fetchPage();
                    };

                    UC.fetchPage = function() {
                        UC.clearSelection();

                        var pageSize = UC.meta.pageSize;
                        var beginIndex = ((UC.meta.pageNumber - 1) * pageSize) + 1;
                        var endIndex = beginIndex + pageSize - 1;
                        if (endIndex > UC.users.length) {
                            endIndex = UC.users.length;
                        }

                        UC.meta.totalRows = UC.users.length;
                        UC.meta.filteredList = UC.users.slice(beginIndex - 1, endIndex);
                        UC.meta.pageNumberStart = ( UC.meta.filteredList.length > 0 ) ? beginIndex : 0;
                        UC.meta.pageNumberEnd = endIndex;
                    };

                    UC.paginationMessage = function() {
                        return LOCALE.maketext("Displaying [numf,_1] to [numf,_2] out of [quant,_3,item,items]", UC.meta.pageNumberStart, UC.meta.pageNumberEnd, UC.meta.totalRows);
                    };

                    UC.sortList = function(meta) {
                        UC.clearSelection();
                        var sortedArray = UC.users;
                        sortedArray = _.sortBy(sortedArray, meta.sortBy);
                        if (meta.sortDirection !== "asc") {
                            sortedArray.reverse();
                        }
                        UC.users = sortedArray;
                        UC.resetPagination();
                    };

                    UC.selectAllUsers = function() {
                        if (UC.users.length === 0) {
                            return;
                        }

                        $(".userSelect").prop("checked", true);
                        $("#selectAllCheckbox").prop("checked", true);
                    };

                    UC.toggleSelectAll = function() {
                        if ($("#selectAllCheckbox").is(":checked")) {
                            $(".userSelect").prop("checked", true);
                        } else {
                            $(".userSelect").prop("checked", false);
                        }
                    };

                    UC.clearSelection = function() {
                        if (UC.users.length === 0) {
                            return;
                        }

                        $(".userSelect").prop("checked", false);
                        $("#selectAllCheckbox").prop("checked", false);
                    };

                    UC.atLeastOneUserIsSelected = function() {
                        return $(".userSelect:checked").length > 0;
                    };

                    UC.allUsersSelected = function() {
                        return $(".userSelect:checked").length === UC.users.length;
                    };

                    UC.confirmDisableTFAFor = function(user) {
                        if (UC.users.length === 0) {
                            return false;
                        }

                        UC.disableInProgress = true;
                        if (typeof (user) !== "undefined") {
                            UC.usersToDisable = [user];
                            UC.isSingleDisable = true;
                        } else {
                            var selected_items = [],
                                $selected_dom_nodes = $(".userSelect:checked");

                            if ($selected_dom_nodes.length === 0) {
                                return false;
                            }

                            $selected_dom_nodes.each( function() {
                                selected_items.push($(this).data("user"));
                            });
                            UC.usersToDisable = selected_items;
                        }

                        UC.modalInstance = $uibModal.open({
                            templateUrl: "confirm_disable.html",
                            controller: "disablePromptController",
                            controllerAs: "dc",
                            resolve: {
                                users: function() {
                                    return UC.usersToDisable;
                                },
                                mode: function() {
                                    return "disableSelected";
                                }
                            }
                        });

                        return UC.modalInstance.result.then(function(usersToRemove, mode) {
                            return UC.removeUsers(usersToRemove, mode);
                        });
                    };

                    UC.confirmDisableAll = function() {
                        if (UC.users.length === 0) {
                            return;
                        }

                        UC.modalInstance = $uibModal.open({
                            templateUrl: "confirm_disable.html",
                            controller: "disablePromptController",
                            controllerAs: "dc",
                            resolve: {
                                users: function() {
                                    return UC.users;
                                },
                                mode: function() {
                                    return "disableAll";
                                }
                            }
                        });

                        return UC.modalInstance.result.then(function(usersToRemove, mode) {
                            return UC.removeUsers(usersToRemove, mode);
                        });
                    };

                    UC.removeUsers = function(users, mode) {
                        if (users === void 0) {
                            return;
                        }

                        return TwoFactorData.disableFor(users)
                            .then(function(result) {

                            // Handle failures
                                var failures = Object.keys(result.failed);
                                if (failures.length === 1) {
                                    growl.error(LOCALE.maketext("The system failed to remove two-factor authentication for “[_1]”.", failures[0]));
                                } else if (failures.length > 1) {
                                    growl.error(LOCALE.maketext("The system failed to remove two-factor authentication for [quant,_1,user,users].", failures.length));
                                }

                                if (mode === "disableSelected") {
                                    if (result.users_modified.length === 1) {
                                        growl.success(LOCALE.maketext("The system successfully removed two-factor authentication for “[_1]”.", result.users_modified[0]));
                                    } else if (result.users_modified.length > 1) {
                                        growl.success(LOCALE.maketext("The system successfully removed two-factor authentication for [quant,_1,user,users].", result.users_modified.length));
                                    }
                                } else if (mode === "disableAll") {
                                    if (result.users_modified.length > 0) {
                                        growl.success(LOCALE.maketext("The system successfully removed two-factor authentication for all users."));
                                    }
                                }

                                if (result.users_modified.length > 0) {
                                    UC.users = result.list;
                                    UC.sortList(UC.meta);
                                }
                            }, function(error) {
                                growl.error(error);
                            });
                    };

                    UC.getUsers = function() {
                        UC.loadingUsers = true;
                        return TwoFactorData.getUsers()
                            .then(
                                function(result) {
                                    UC.users = result;
                                    UC.sortList(UC.meta);
                                }, function(error) {
                                    growl.error(error);
                                }
                            )
                            .finally( function() {
                                UC.loadingUsers = false;
                            });
                    };

                    UC.forceReload = function() {
                        UC.users = [];
                        return UC.getUsers();
                    };

                    UC.getUsers();
                }]);

        return controller;
    }
);
Back to Directory File Manager