Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/greylist/views/mailServices.js

/*
# templates/greylist/views/mailServices.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",
        "cjt/util/locale",
        "lodash",
        "uiBootstrap",
        "cjt/validator/datatype-validators",
        "cjt/validator/compare-validators",
        "cjt/directives/validationContainerDirective",
        "cjt/directives/validationItemDirective",
        "cjt/directives/toggleSortDirective",
        "cjt/directives/actionButtonDirective",
        "cjt/decorators/growlDecorator",
        "app/services/GreylistDataSource"
    ],
    function(angular, LOCALE, _) {

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

        var controller = app.controller(
            "mailServices",
            ["$scope", "GreylistDataSource", "growl", "$timeout", "$q",
                function($scope, GreylistDataSource, growl, $timeout, $q) {

                    $scope.loadingProviders = true;
                    $scope.commonMailProviders = {};
                    $scope.autotrust_new_common_mail_providers = true;

                    $scope.disableSave = function(form) {
                        var isDataUnchanged = _.isEqual($scope.commonMailProviders, GreylistDataSource.commonMailProviders) && $scope.autotrust_new_common_mail_providers === GreylistDataSource.autotrust_new_common_mail_providers;
                        return (form.$pristine || form.$invalid || isDataUnchanged);
                    };

                    $scope.changedProviders = function(trust) {
                        var providersToTrust = {};

                        for (var provider in $scope.commonMailProviders) {
                            if ($scope.commonMailProviders[provider].is_trusted === trust &&
                            GreylistDataSource.commonMailProviders.hasOwnProperty(provider) &&
                            GreylistDataSource.commonMailProviders[provider].is_trusted !== $scope.commonMailProviders[provider].is_trusted) {
                                providersToTrust[provider] = $scope.commonMailProviders[provider];
                            }
                        }

                        return providersToTrust;
                    };

                    $scope.untrustProviders = function() {

                    // no need to make an API call if all the providers are currently trusted
                        var allTrusted = $scope.areAllProvidersTrusted();
                        if (allTrusted) {
                            return;
                        }

                        var providersToUntrust = $scope.changedProviders(false);

                        if (Object.keys(providersToUntrust).length > 0) {
                            return GreylistDataSource.untrustCommonMailProviders(providersToUntrust)
                                .catch(function(error) {
                                    growl.error(error);
                                });
                        }

                        return null;
                    };

                    $scope.trustProviders = function() {

                    // no need to make an API call if all the providers are currently untrusted
                        var allUntrusted = $scope.areAllProvidersUntrusted();
                        if (allUntrusted) {
                            return;
                        }

                        var providersToTrust = $scope.changedProviders(true);

                        if (Object.keys(providersToTrust).length > 0) {
                            return GreylistDataSource.trustCommonMailProviders(providersToTrust)
                                .catch(function(error) {
                                    growl.error(error);
                                });
                        }

                        return null;
                    };

                    $scope.save = function(form) {
                        if (!form.$valid) {
                            return;
                        }

                        return $q.all([
                            $scope.trustProviders(),
                            $scope.untrustProviders(),
                            GreylistDataSource.saveCommonMailProviders($scope.commonMailProviders, $scope.autotrust_new_common_mail_providers)
                        ]).then(
                            function(result) {
                                growl.success(LOCALE.maketext("The system successfully saved your [asis,Greylisting] Common Mail Provider settings."));
                                form.$setPristine();
                            }, function(error) {
                                growl.error(error);
                            }
                        );
                    };

                    function init() {
                        GreylistDataSource.loadCommonMailProviders()
                            .then(function() {
                                $scope.commonMailProviders = {};
                                $scope.commonMailProviders = angular.copy(GreylistDataSource.commonMailProviders);
                                $scope.autotrust_new_common_mail_providers = GreylistDataSource.autotrust_new_common_mail_providers;
                                $scope.loadingProviders = false;
                            }).catch(function(response) {
                                growl.error(response.error);
                                $scope.loadingProviders = false;
                            });
                    }

                    $scope.areAllProvidersTrusted = function() {
                        var settings = $scope.commonMailProviders;
                        for (var provider in settings) {
                            if (settings.hasOwnProperty(provider) && !settings[provider].is_trusted) {
                                return false;
                            }
                        }
                        return true;
                    };

                    $scope.areAllProvidersUntrusted = function() {
                        var settings = $scope.commonMailProviders;
                        for (var provider in settings) {
                            if (settings.hasOwnProperty(provider) && settings[provider].is_trusted) {
                                return false;
                            }
                        }
                        return true;
                    };

                    $scope.autoUpdateNoneChecked = function() {
                        var settings = $scope.commonMailProviders;
                        for (var provider in settings) {
                            if (settings.hasOwnProperty(provider) && settings[provider].autoupdate) {
                                return false;
                            }
                        }
                        return true;
                    };

                    $scope.autoUpdateAllChecked = function() {
                        var settings = $scope.commonMailProviders;
                        for (var provider in settings) {
                            if (settings.hasOwnProperty(provider) && !settings[provider].autoupdate) {
                                return false;
                            }
                        }
                        return true;
                    };

                    $scope.trustAll = function(form, reallyTrust) {
                        var settings = $scope.commonMailProviders;
                        for (var provider in settings) {
                            if (settings.hasOwnProperty(provider)) {
                                settings[provider].is_trusted = reallyTrust;
                            }
                        }
                        form.$setDirty();
                    };

                    $scope.autoUpdateAll = function(form, reallyUpdate) {
                        var settings = $scope.commonMailProviders;
                        for (var provider in settings) {
                            if (settings.hasOwnProperty(provider)) {
                                settings[provider].autoupdate = reallyUpdate;
                            }
                        }
                        form.$setDirty();
                    };

                    $scope.forceLoadMailProviders = function(form) {
                        $scope.loadingProviders = true;
                        $scope.commonMailProviders = {};
                        init();
                        form.$setPristine();
                    };

                    $scope.isCommonMailProvidersPopulated = function() {
                        return _.keys($scope.commonMailProviders).length > 0;
                    };

                    init();
                }
            ]);

        return controller;
    }
);
Back to Directory File Manager