Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/mail_blocked_domains/services/manageService.js

/*
# templates/mail_blocked_domains/services/manageService.js
#                                                  Copyright 2022 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 */
/* jshint -W100 */
/* jshint -W089 */

define(
    [
        "lodash",
        "angular",
        "punycode",
        "cjt/util/locale",
        "cjt/io/batch-request",
        "cjt/io/whm-v1-request",
        "cjt/services/APICatcher",
        "cjt/services/alertService",
        "cjt/io/whm-v1", // IMPORTANT: Load the driver so its ready
    ],
    function mailBlockedDomainsService(_, angular, PUNYCODE, LOCALE, BATCH, APIREQUEST) {
        "use strict";

        var NO_MODULE = "";

        // ----------------------------------------------------------------------

        var app = angular.module("whm.mailBlockedDomains.Service", ["cjt2.services.apicatcher", "cjt2.services.api"]);

        function manageServiceFactory(api, alertService) {
            var savedDomains;

            function setSavedDomains(domains) {
                savedDomains = domains.map( PUNYCODE.toUnicode ).sort();
            }

            return {
                setSavedDomains: setSavedDomains,

                getSavedDomains: function getSavedDomains() {
                    return savedDomains.slice();
                },

                saveBlockedDomains: function saveBlockedDomains(domains) {
                    domains = domains.map( PUNYCODE.toASCII );
                    var oldDomains = savedDomains.map( PUNYCODE.toASCII );

                    var apicalls = [];

                    // It’s inefficient to do each addition and removal
                    // in its own transaction, but hopefully there won’t
                    // be much need for optimizing it.

                    var adds = _.difference(domains, oldDomains);
                    if (adds.length) {
                        apicalls.push( new APIREQUEST.Class().initialize( NO_MODULE, "block_incoming_email_from_domain", { domain: adds } ) );
                    }

                    var removes = _.difference(oldDomains, domains);
                    if (removes.length) {
                        apicalls.push( new APIREQUEST.Class().initialize( NO_MODULE, "unblock_incoming_email_from_domain", { domain: removes } ) );
                    }

                    // Last batch call is a re-fetch of the data.
                    apicalls.push( new APIREQUEST.Class().initialize(NO_MODULE, "list_blocked_incoming_email_domains") );

                    var batch = new BATCH.Class( apicalls );

                    alertService.add( {
                        type: "info",
                        message: LOCALE.maketext("Submitting updates …"),
                        replace: true,
                    } );

                    return api.promise(batch).then( function(result) {
                        var newDomains = result.data[ result.data.length - 1 ].data;
                        newDomains = newDomains.map( function(o) {
                            return PUNYCODE.toUnicode(o.domain);
                        } );

                        setSavedDomains(newDomains);

                        alertService.success(LOCALE.maketext("Success!"));
                    } );
                },
            };
        }

        manageServiceFactory.$inject = ["APICatcher", "alertService"];
        return app.factory("manageService", manageServiceFactory);
    }
);
Back to Directory File Manager