Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/mysqlhost/directives/mysqlhost_domain_validators.js

/*
# templates/mysqlhost/directives/mysqlhost_domain_validators.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
*/

/* --------------------------*/
/* DEFINE GLOBALS FOR LINT
/*--------------------------*/
/* global define: false     */
/* --------------------------*/

define([
    "angular",
    "cjt/validator/validator-utils",
    "cjt/util/locale",
    "cjt/util/inet6",
    "cjt/validator/domain-validators",
    "cjt/validator/validateDirectiveFactory",
],
function(angular, validationUtils, LOCALE, inet6, DOMAIN_VALIDATORS) {

    // Correlate with $Cpanel::Regex::regex{'ipv4'}
    var ipV4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;

    /**
         * Validate document root
         *
         * @method  docRootPath
         * @param {string} document root path
         * @return {object} validation result
         */
    var validators = {

        hostnameOrIp: function(val) {
            var result = validationUtils.initializeValidationResult();
            var isValid = false;

            if (_isLoopback(val)) {
                isValid = true;
            } else if (_isValidIp(val)) {
                isValid = true;
            } else {
                var output = DOMAIN_VALIDATORS.methods.fqdn(val);
                isValid = output.isValid;

                // grab messages from the other validator to this one
                if (!isValid) {
                    for (var i = 0, len = output.messages.length; i < len; i++) {
                        result.add(output.messages[i].name, output.messages[i].message);
                    }
                }
            }

            if (!isValid) {
                result.isValid = false;
                result.add("hostnameOrIp", LOCALE.maketext("The host must be a valid [asis,IP] address or [asis,hostname]."));
            }

            return result;
        },

        loopback: function(val) {
            var result = validationUtils.initializeValidationResult();

            if (_isLoopback(val)) {
                result.isValid = true;
            } else {
                result.isValid = false;
                result.add("localhost", LOCALE.maketext("The value must be a valid [asis,loopback] address."));
            }

            return result;
        }
    };

    function _isLoopback(ipOrHost) {
        switch (ipOrHost) {
            case "localhost":
            case "localhost.localdomain":
            case "0000:0000:0000:0000:0000:0000:0000:0001":
            case "0:0:0:0:0:0:0:1":
            case ":1":
            case "::1":
            case "0:0:0:0":
            case "0000:0000:0000:0000:0000:0000:0000:0000":
                return true;

            default:
                if (/^0000:0000:0000:0000:0000:ffff:7f/.test(ipOrHost) ||
                        /^::ffff:127\./.test(ipOrHost) ||
                        /^127\./.test(ipOrHost)) {
                    return true;
                }
        }

        return false;
    }

    /* hosts, domains and ip addresses */

    function _isValidIp(ipOrHost) {
        return inet6.isValid(ipOrHost) || ipV4Regex.test(ipOrHost);
    }

    var validatorModule = angular.module("cjt2.validate");

    validatorModule.run(["validatorFactory",
        function(validatorFactory) {
            validatorFactory.generate(validators);
        }
    ]);

    return {
        methods: validators,
        name: "mysqlhostDomainValidators",
        description: "Validation directives for ip address and hostname.",
        version: 11.52,
    };
}
);
Back to Directory File Manager