Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/tomcat/views/config.js

/*
 * templates/tomcat/views/config.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 */

define(
    [
        "angular",
        "lodash",
        "cjt/util/locale",
        "cjt/util/table",
        "uiBootstrap",
        "cjt/filters/qaSafeIDFilter",
        "cjt/decorators/growlDecorator",
        "cjt/decorators/paginationDecorator",
        "cjt/directives/actionButtonDirective",
        "cjt/directives/searchDirective",
        "cjt/directives/pageSizeDirective",
        "cjt/directives/alertList",
        "cjt/services/alertService",
        "cjt/directives/toggleSortDirective",
        "cjt/services/viewNavigationApi",
        "cjt/directives/autoFocus"
    ],
    function(angular, _, LOCALE, Table) {

        "use strict";

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

        var controller = app.controller(
            "config",
            ["$scope", "$q", "TomcatApi", "alertService", "$uibModal",
                function($scope, $q, TomcatApi, alertService, $uibModal) {
                    var tomcatVer = "Tomcat 8.5";
                    var memoryUsageWarning = LOCALE.maketext("Your server may run out of memory if you enable “[_1]” for multiple users.", tomcatVer);
                    $scope.config = this;

                    $scope.config.loading = false;
                    $scope.config.showFormToggleBtn = true;
                    $scope.config.tokenAdded = false;
                    $scope.config.loadingError = false;
                    $scope.config.loadingErrorMessage = "";
                    $scope.config.allChecked = false;
                    $scope.config.checkedCount = 0;
                    $scope.config.paginationMessage = "";

                    function search(item, searchText) {
                        return (item.user.toLowerCase().indexOf(searchText.toLowerCase()) !== -1) || (item.user.toLowerCase().indexOf(searchText.toLowerCase()) !== -1);
                    }

                    var table = new Table();
                    table.setSearchFunction(search);
                    table.setSort("user", "asc");
                    $scope.config.meta = table.getMetadata();
                    $scope.config.filteredList = table.getList();
                    $scope.config.allUsers = [];
                    $scope.config.render = function() {
                        $scope.config.resetCheckAll();
                        $scope.config.filteredList = table.update();
                        $scope.config.paginationMessage = table.paginationMessage();
                    };
                    $scope.config.sortList = function() {
                        $scope.config.render();
                    };
                    $scope.config.selectPage = function() {
                        $scope.config.render();
                    };
                    $scope.config.selectPageSize = function() {
                        $scope.config.render();
                    };
                    $scope.config.searchList = function() {
                        $scope.config.render();
                    };
                    $scope.config.toggleLabel = function(item) {
                        return item.tomcatEnabled ? LOCALE.maketext("Enabled") : LOCALE.maketext("Disabled");
                    };

                    $scope.config.resetCheckAll = function() {
                        $scope.config.allChecked = false;
                        $scope.config.toggleCheckAll();
                        $scope.config.checkedCount = 0;
                    };

                    $scope.config.getIndeterminateState = function() {
                        return $scope.config.checkedCount > 0 && !$scope.config.allChecked;
                    };

                    $scope.config.toggleCheckAll = function() {
                        if ($scope.config.filteredList.length === 0) {
                            return;
                        }
                        var i = 0, listLength = $scope.config.filteredList.length;
                        for (i; i < listLength; i++) {
                            $scope.config.filteredList[i].checked = $scope.config.allChecked;
                        }
                        if ($scope.config.allChecked) {
                            $scope.config.checkedCount = listLength;
                        } else {
                            $scope.config.checkedCount = 0;
                        }
                    };

                    $scope.config.syncCheckAll = function(listItem) {
                        if (listItem.checked) {
                            $scope.config.checkedCount++;
                        } else {
                            $scope.config.checkedCount--;
                        }
                        $scope.config.allChecked = $scope.config.checkedCount === $scope.config.filteredList.length;
                    };

                    $scope.config.checkAll = function() {
                        $scope.config.allChecked = true;
                        $scope.config.toggleCheckAll();
                    };


                    $scope.config.refreshList = function() {
                        $scope.config.filteredList = [];
                        $scope.config.allTokens = [];
                        return load();
                    };

                    $scope.config.toggleLabel = function(item) {
                        return (item.tomcatEnabled) ? LOCALE.maketext("Enabled") : LOCALE.maketext("Disabled");
                    };
                    $scope.config.toggleTitle = function(item) {
                        return (item.tomcatEnabled) ? LOCALE.maketext("Disable [asis,Tomcat] support.") : LOCALE.maketext("Enable [asis,Tomcat] support.");
                    };

                    $scope.config.toggleTomcatStatus = function(item) {
                        alertService.clear();
                        return TomcatApi.enableDisableTomcat([item.user], !item.tomcatEnabled)
                            .then(function(data) {
                                if (_.isEmpty(data[item.user])) {
                                    item.tomcatEnabled = !item.tomcatEnabled;

                                    var successMsg = (item.tomcatEnabled) ?
                                        LOCALE.maketext("“[_1]” support is enabled for “[_2]”.", tomcatVer, item.user) :
                                        LOCALE.maketext("“[_1]” support is disabled for “[_2]”.", tomcatVer, item.user);

                                    alertService.add({
                                        type: "success",
                                        message: _.escape(successMsg),
                                        autoclose: 1000,
                                        id: "alertSuccess",
                                        replace: true
                                    });
                                } else {
                                    alertService.add({
                                        type: "danger",
                                        message: _.escape(data[item.user]),
                                        id: "alertError",
                                        replace: true
                                    });
                                }
                            })
                            .catch(function(error) {
                                alertService.add({
                                    type: "danger",
                                    message: _.escape(error),
                                    id: "alertError",
                                    replace: true
                                });
                            })
                            .finally(function() {
                                $scope.config.resetToggleSingle(item);
                            });
                    };

                    $scope.config.confirmToggleSingle = function(item) {
                        item.showAlert = true;
                        if (item.tomcatEnabled) {
                            item.elId = "confirmToggle_continue_disable_" + item.user;
                            item.alertActionTitle = LOCALE.maketext("Continue to disable.");
                            item.alertActionText = LOCALE.maketext("Disable");
                            item.alertMsg = LOCALE.maketext("If you disable “[_1]”, any URLs that “[_1]” handles will no longer work as expected.", tomcatVer);
                        } else {
                            item.elId = "confirmToggle_continue_enable_" + item.user;
                            item.alertActionTitle = LOCALE.maketext("Continue to enable.");
                            item.alertActionText = LOCALE.maketext("Enable");
                            item.alertMsg = memoryUsageWarning;
                        }
                        return;
                    };

                    $scope.config.resetToggleSingle = function(item) {
                        item.showAlert = false;
                        item.alertMsg = "";
                        return;
                    };

                    $scope.config.confirmToggleMultiple = function(userList, enable) {
                        $uibModal.open({
                            templateUrl: "confirm_enable_disable.tmpl",
                            controller: ToggleTomcatModalController,
                            controllerAs: "promptCtrl",
                            resolve: {
                                data: function() {
                                    return {
                                        "userList": userList,
                                        "enable": enable
                                    };
                                }
                            }
                        });
                    };

                    function load() {
                        $scope.config.loading = true;

                        // Get all users and the tomcat enabled users via ajax
                        // calls simultaneously and process the view.
                        return $q.all([
                            TomcatApi.getUsers(true),
                            TomcatApi.getTomcatList()])
                            .then(function(data) {
                                var tableData = [];
                                var userList = data[0];
                                var tomcatList = data[1];
                                if (userList !== null && typeof userList !== "undefined") {
                                    tableData = _.map(_.pull(userList, "root"), function(item) {
                                        return {
                                            user: item,
                                            tomcatEnabled: _.includes(tomcatList, item),
                                            showAlert: false,
                                            alertMsg: ""
                                        };
                                    });

                                    table.load(tableData);
                                    $scope.config.allUsers = tableData;
                                    $scope.config.render();
                                }
                            })
                            .catch(function(error) {
                                $scope.config.loadingError = true;
                                $scope.config.loadingErrorMessage = error;
                            })
                            .finally(function() {
                                $scope.config.loading = false;
                            });
                    }

                    $scope.config.getSelectedUsers = function() {
                        var selectedUsers = [];
                        selectedUsers = _.filter($scope.config.filteredList, [ "checked", true ]);
                        return selectedUsers;
                    };

                    function ToggleTomcatModalController($uibModalInstance, data) {
                        var promptCtrl = this;
                        promptCtrl.showActions = true;

                        promptCtrl.cancel = function() {
                            $uibModalInstance.dismiss("cancel");
                        };

                        // In the selected list there can be a mix of tomcat enabled and
                        // non enabled users.
                        // If the current toggle is to enable, let's filter out the users that are already enabled.
                        // Then we can send only the non enabled ones to the API.
                        var eligibleUsers = _.map(_.filter(data.userList, ["tomcatEnabled", !data.enable]), "user");
                        var disableWarningText = LOCALE.maketext("If you disable “[_1]”, any URLs that “[_1]” handles will no longer work as expected.", tomcatVer);

                        if (_.isEmpty(eligibleUsers)) {
                            promptCtrl.showActions = false;
                            if (data.enable) {
                                promptCtrl.prompt = LOCALE.maketext("“[_1]” is already enabled for the selected [numerate,_2,user,users]. Select other users to enable.", tomcatVer, eligibleUsers.length);
                            } else {
                                promptCtrl.prompt = LOCALE.maketext("“[_1]” is already disabled for the selected [numerate,_2,user,users]. Select other users to disable.", tomcatVer, eligibleUsers.length);
                            }
                        } else if (eligibleUsers.length > 0 && eligibleUsers.length === $scope.config.allUsers.length) {
                            if (data.enable) {
                                promptCtrl.prompt = memoryUsageWarning + " " + LOCALE.maketext("Are you certain that you want to enable “[_1]” for all of your users?", tomcatVer);
                            } else {
                                promptCtrl.prompt = disableWarningText;
                            }

                        } else if (eligibleUsers.length > 0) {
                            if (data.enable) {
                                promptCtrl.prompt = memoryUsageWarning + " " + LOCALE.maketext("Are you certain that you want to enable “[_1]” for the selected [numerate,_2,user,users]?", tomcatVer, eligibleUsers.length);
                            } else {
                                promptCtrl.prompt = disableWarningText;
                            }
                        }

                        promptCtrl.confirm = function() {
                            return TomcatApi.enableDisableTomcat(eligibleUsers, data.enable)
                                .then(function(response) {
                                    if (response) {
                                        var successList = [];
                                        _.each(_.keys(response), function(key) {
                                            if (_.isEmpty(response[key])) {
                                                successList.push(key);
                                            }
                                        });

                                        var failedDomains = _.omit(response, successList);
                                        var failedKeys = _.keys(failedDomains);
                                        if (failedKeys.length > 0) {
                                            _.each(failedKeys, function(key) {
                                                alertService.add({
                                                    type: "danger",
                                                    message: _.escape(failedDomains[key]),
                                                    replace: false
                                                });
                                            });
                                        }
                                        if (successList.length !== 0) {
                                            var successMsg = "";
                                            if (successList.length === $scope.config.allUsers.length) {
                                                if (data.enable) {
                                                    successMsg = LOCALE.maketext("You successfully enabled “[_1]” for all of your users.", tomcatVer);
                                                } else {
                                                    successMsg = LOCALE.maketext("You successfully disabled “[_1]” for all of your users.", tomcatVer);
                                                }
                                            } else if (Array.isArray(data.userList) && successList.length === data.userList.length) {
                                                if (data.enable) {
                                                    successMsg = LOCALE.maketext("You successfully enabled “[_1]” for the selected [numerate,_2,user,users].", tomcatVer, eligibleUsers.length);
                                                } else {
                                                    successMsg = LOCALE.maketext("You successfully disabled “[_1]” for the selected [numerate,_2,user,users].", tomcatVer, eligibleUsers.length);
                                                }
                                            } else {
                                                if (data.enable) {
                                                    successMsg = LOCALE.maketext("You successfully enabled “[_1]” for “[_2]” of “[_3]” [numerate,_3,user,users].", tomcatVer, successList.length, eligibleUsers.length);
                                                } else {
                                                    successMsg = LOCALE.maketext("You successfully disabled “[_1]” for “[_2]” of “[_3]” [numerate,_3,user,users].", tomcatVer, successList.length, eligibleUsers.length);
                                                }
                                            }
                                            alertService.add({
                                                type: "success",
                                                message: _.escape(successMsg),
                                                autoclose: 1000,
                                                replace: false
                                            });
                                        }
                                        $scope.config.refreshList();
                                    }
                                })
                                .catch(function(error) {
                                    alertService.add({
                                        type: "danger",
                                        message: _.escape(error),
                                        replace: false
                                    });
                                })
                                .finally(function() {
                                    $uibModalInstance.close();
                                });
                        };
                    }

                    ToggleTomcatModalController.$inject = ["$uibModalInstance", "data"];

                    /**
                     * Sets up user interface data structures from loaded data.
                     */
                    $scope.$on("$viewContentLoaded", function() {
                        load();
                    });
                }
            ]);
        return controller;
    }
);
Back to Directory File Manager