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

/*
# mail_blocked_domains/services/parser.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
*/

define(
    [
        "punycode",
        "cjt/util/locale",
        "cjt/validator/domain-validators",
        "cjt/validator/validator-utils",
    ],
    function mailBlockedDomainsParser(PUNYCODE, LOCALE, domainValidators, valUtils) {
        "use strict";

        var _validateDomain = domainValidators.methods.wildcardFqdnAllowTld;

        function _discardEmpty(a) {
            return !!a.length;
        }

        /**
        * @function parseDomainsFromText
        * @param txt String The text input to parse.
        * @returns Array The array of domains parsed from the string.
        *
        * On failure, this throws an array:
        *
        *   [
        *       [ domain1, failureReason ],
        *       [ domain2, failureReason ],
        *       ...
        *   ]
        */

        function parseDomainsFromText(txt) {
            var domains = txt.
                trim().
                split(/\s*\n\s*/).
                filter(_discardEmpty)
            ;

            var failures = [];

            var appear = {};

            domains.forEach( function(d, di) {
                var result = _validateDomain(d);

                if (result.isValid) {
                    var uvalue = PUNYCODE.toUnicode(d);

                    if (!appear[uvalue]) {
                        appear[uvalue] = 1;
                    } else {
                        if (appear[uvalue] === 1) {
                            var vresult = valUtils.initializeValidationResult();
                            vresult.addError( "duplicate", LOCALE.maketext("You may not enter any domain more than once.") );
                            failures.push( [uvalue, vresult] );
                        }

                        appear[uvalue]++;
                    }

                    domains[di] = uvalue;
                } else {
                    failures.push( [d, result] );
                }
            } );

            if (failures.length) {
                throw failures;
            }

            return domains;
        }

        return {
            parseDomainsFromText: parseDomainsFromText,
        };
    }
);
Back to Directory File Manager