Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/listsslhosts.tmpl

[%
USE CPList;
USE CPIcons;
USE CPScalar;
USE SSL;

WRAPPER 'master_templates/master.tmpl'
    app_key = 'manage_ssl_hosts'
    theme = "bootstrap"
    include_legacy_stylesheets = 1
    scripts = '/js/sorttable.js';

SET ONE_DAY = 60 * 60 * 24;
SET NEARLY_EXPIRED_WINDOW = 30 * ONE_DAY;

SET MINIMUM_MODULUS_LENGTH = SSL.DEFAULT_KEY_SIZE;

MACRO floor(n)
     GET n
     FILTER format("%d");

MACRO ceiling(n)
     GET n + 1
     FILTER format("%d");

IF !sslvhosts.size %]
    <h3 class="simpleheading">[% locale.maketext('SSL Hosts') %]</h3>
    <div>
        [% locale.maketext('There are no secure sites configured on your server!') %]
    </div>
[% ELSE %]
    [% PROCESS '_ajaxapp_header.tmpl' -%]

    <div id="cjt_pagenotice_container"></div>

    <section>
    <h3 class="section-heading">[% locale.maketext('Installed SSL Hosts') %]</h3>
    <div class="tblActionBar form-inline">
    </div>
    <div class="table-responsive">
        <table role="table" class="table table-hover table-bordered table-condensed table-striped sortable" id="domainlist">
        <tr>
            <th>[% locale.maketext('Domains') %]</th>
            [% IF httpd_is_enabled -%]
                <th>[% locale.maketext('IP Address') %]</th>
                <th>[% locale.maketext('IP Address Type') %]</th>
                <th>[% locale.maketext('Is Primary Website on IP Address?') %]</th>
                <th>[% locale.maketext('Is [output,acronym,SNI,Server Name Indication] Required?') %]</th>
            [% END -%]
            <th>[% locale.maketext('Document Root') %]</th>
            <th>[% locale.maketext('Owner') %]</th>
            <th>[% locale.maketext('Issuer') %]</th>
            <th>[% locale.maketext('Expires') %]</th>
            <th>[% locale.maketext('Key Type') %]</th>
            <th class="sorttable_nosort">[% locale.maketext('Actions') %]</th>
        </tr>

        [%
        SET sslvhosts = sslvhosts.sort('host');

        SET now = CPANEL.now();
        SET warn_icon = CPIcons.get_common_icon_markup("warning", 16);
        SET error_icon = CPIcons.get_common_icon_markup("error", 16);

        SET expiration_dates = sslvhosts.ofeach('crt').ofeach('not_after');
        FOR expdate = expiration_dates;
            expiration_dates.${loop.index} = expdate + 1;
        END;

        SET expiration_dates = locale.get_lookup_hash_of_multi_epoch_datetime( expiration_dates, 'date_format_short' );
        # Removed datetimes because it slows the page down so much

        SET expire_error_msg = locale.maketext('The certificate has expired.');
        SET self_signed_warn_msg = locale.maketext('Self-signed certificates will cause browser warnings.');
        SET key_critical_msg = locale.maketext('A key that does not use [asis,ECDSA] or at least [numf,_1]-bit [asis,RSA] does not provide adequate security.', MINIMUM_MODULUS_LENGTH);
        SET self_signed = locale.maketext('[comment]- Self Signed -[comment,The decorating dashes are meant to visually distinguish this label from a certificate authority name.]');
        SET expire_today = locale.maketext('The certificate will expire today.');

        FOR hostdata = sslvhosts;
            SET host = hostdata.sslhost;
            SET user = hostdata.user;
            SET ip = hostdata.ip;
            SET iptype = hostdata.iptype;
            SET docroot = hostdata.docroot;

            IF ! user.defined();
                SET user = 'nobody';
            END;

            SET issuer = self_signed;
            SET issuer_warn = 1;
            IF ! hostdata.crt.is_self_signed;
                SET issuer = hostdata.crt.${'issuer.organizationName'};
                SET issuer_warn = 0;
            END;

            SET not_after = hostdata.crt.not_after;
            SET expiration_time = not_after + 1;
            SET expired = (not_after < now);
            SET nearly_expired = ((not_after - now) < NEARLY_EXPIRED_WINDOW);
            IF !expired && nearly_expired;
                SET daysUntilExpiration = ceiling((not_after - now) / ONE_DAY);
                SET expires_today = (floor((not_after - now) / ONE_DAY) == 0 ? ((not_after - now) % ONE_DAY) > 0 : 0);
                IF expires_today;
                    SET expire_warn_msg = expire_today;
                ELSE;
                    SET expire_warn_msg = locale.maketext('Your certificate will expire in [quant,_1,day,days].', daysUntilExpiration);
                END;
            END;

            SET domains_list = [host];
            domains_list = domains_list.merge( hostdata.aliases.unique() ).sort();
        %]
        <tr>
            <td class="column column-domains">
                <ul>
                    [% FOR domain = domains_list -%]
                    <li>
                        [%
                            IF hostdata.crt.domains && SSL.validate_domains_lists_have_match(hostdata.crt.domains, domain);
                                SET cert_icon = 'fa-lock';
                                SET cert_class = 'working';
                            ELSE;
                                SET cert_icon = 'fa-unlock';
                                SET cert_class = 'not-working';
                            END;
                        -%]
                        [% IF domain.match('[*]') -%]
                            <span class="[% cert_class %]">
                                <i class="fas [% cert_icon %]"></i>
                                [% domain FILTER html %]
                            </span>
                        [% ELSE -%]
                            <a target="_blank" href="https://[% domain FILTER html %]" class="[% cert_class %]" rel="noreferrer">
                                <i class="fas [% cert_icon %]"></i>
                                [% domain FILTER html %]
                            </a>
                        [% END -%]
                    </li>
                    [% END -%]
                </ul>
            </td>
            [% IF httpd_is_enabled -%]
                <td class="column column-ip">[% ip %]</td>
                <td class="column column-iptype">[% iptype %]</td>
                <td class="column column-is-primary">[% hostdata.is_primary_on_ip ? locale.maketext('Yes') : locale.maketext('No') %]</td>
                <td class="column column-sni">[% hostdata.needs_sni ? locale.maketext('Yes') : locale.maketext('No') %]</td>
            [% END -%]
            <td class="column column-docroot">[% docroot.html().breakOn('_') %]</td>
            <td class="column column-user">[% user %]</td>
            <td class="column column-issuer">
                <div>
                [% issuer %]
                [% IF issuer_warn %][% warn_icon %]<div class="warn hidden"><span>[% self_signed_warn_msg %]</span></div>[% END %]
                </div>
            </td>
            <td class="column column-expires" sorttable_customkey="[% expiration_time %]">
                <div>
                [% expiration_dates.${expiration_time} %]
                [% IF expired %]
                    [% error_icon %]<div class="error hidden"><span>[% expire_error_msg %]</span></div>
                [% ELSIF nearly_expired %]
                    [% warn_icon %]<div class="warn hidden"><span>[% expire_warn_msg %]</span></div>
                [% END %]
                </div>
            </td>
            <td class="column column-modulus"[% IF hostdata.key_critical %] title="[% key_critical_msg %]"[% END %]>
                <div>
                [% hostdata.key_type_label.html() %]
                [% IF hostdata.key_critical %]
                    [% error_icon %]<div class="error hidden"><span>[% key_critical_msg %]</span></div>
                [% END %]
                </div>
            </td>
            <td class="column column-action">
                <a href='[% cp_security_token %]/scripts2/dodelsslhost?host=[% host FILTER uri %]' class='btn btn-link'>
                    <span class="glyphicon glyphicon-trash"></span>
                    [% locale.maketext('Delete') %]
                </a>
                [% IF httpd_is_enabled && !hostdata.is_primary_on_ip && !host.match('[*]') -%]
                    <a href='javascript:void(0)' data-servername="[% host FILTER html %]" class='make-primary-button btn btn-link'>
                        <span class='fas fa-star'></span>
                        [% locale.maketext('Make Primary') %]
                    </a>
                [% END -%]
            </td>
        </tr>
        [% END; %]
        </table>
    </div>
    </section>

    [% PROCESS '_ajaxapp_footer.tmpl' -%]

    <script>
        [% INSERT '/usr/local/cpanel/base/yui/event-mouseenter/event-mouseenter-min.js' %]

        var EVENT = YAHOO.util.Event;
        var DOM = YAHOO.util.Dom;

        /**
         * Initialize the page
         */
        var initialize = function() {

            /**
             * Initialize the handlers for the warning and errors.
             * @param  {HTMLElement} el Node to attach the handers too.
             */
            var install_handlers = function(el) {
                var parent = el.parentNode.parentNode;
                EVENT.on(parent, "mouseenter", function(e) {
                    var thatEl = el;
                    if (DOM.hasClass(thatEl, "hidden")) {
                        DOM.removeClass(thatEl, "hidden");
                    }
                });

                EVENT.on(parent, "mouseleave", function(e) {
                    var thatEl = el;
                    if (!DOM.hasClass(thatEl, "hidden")) {
                        DOM.addClass(thatEl, "hidden");
                    }
                });

                EVENT.on(parent, "click", function(e) {
                   var thatEl = el;
                   hasHidden = DOM.hasClass(thatEl, "hidden");
                    if (!hasHidden) {
                        DOM.addClass(thatEl, "hidden");
                    } else {
                        DOM.removeClass(thatEl, "hidden");
                    }
                });
            };

            DOM.getElementsByClassName ( "error" , "div" , "domainlist" , install_handlers );
            DOM.getElementsByClassName ( "warn" , "div" , "domainlist" , install_handlers );
        };

        EVENT.onDOMReady(initialize);
    </script>
[% END;
END;
-%]
Back to Directory File Manager