Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/hulkd/views/configView.ptt

[%
    SET on_switch_text = "ON";
    SET off_switch_text = "OFF";
    IF (locale.get_language_tag() != "en");
        # These characters should not be translated.
        on_switch_text = "I";
        off_switch_text = "O";
    END;
%]
<div>
    <div class="row">
        <div class="col-xs-12">
            <h3>[% locale.maketext('Configuration Settings') %]</h3>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <section id="form">
            <form class="layout-medium ng-pristine ng-valid" id="config_form" name="config_form" novalidate>
                <div class="panel panel-default">
                    <div class="panel-heading">
                      <div class="switchable_panel">
                          <div class="switchable_panel_group">
                              <div class="panel_label">
                                 [% locale.maketext('Username-based Protection') %]
                              </div>
                              <div class="panel_switch">
                                  <div role="checkbox"
                                      id="usernameToggleSwitch"
                                      class="toggle-switch toggle-switch-xs"
                                      tabindex="0"
                                      uib-tooltip="[% locale.maketext('Click to enable or disable username-based protection.') %]"
                                      tooltip-append-to-body="true"
                                      aria-checked="{{ username_protection_enabled }}"
                                      aria-label="[% locale.maketext("Click to enable or disable username-based protection.") %]"
                                      ng-click="username_protection_enabled = !username_protection_enabled"
                                      ng-keyup="handle_protection_keyup($event, 'username')"
                                      ng-keyup="handle_protection_keydown($event)">
                                      <div id="usernameToggleStatus" class="toggle-switch-animate" ng-class="{'switch-off': !username_protection_enabled, 'switch-on': username_protection_enabled}">
                                          <span class="switch-left">
                                              [% on_switch_text %]
                                          </span>
                                          <span class="knob">{{knobLabel}}</span>
                                          <span class="switch-right">
                                              [% off_switch_text %]
                                          </span>
                                      </div>
                                  </div>
                              </div>
                          </div>
                      </div>
                    </div>
                    <div id="user_protection_settings" class="panel-body" ng-class="{off: !username_protection_enabled}">
                        <p class="description">
                        [% locale.maketext("Username-based protection tracks login attempts for user accounts. When disabled, [asis,cPHulk] will not lock user accounts, but existing account locks will remain.") %]
                        </p>
                        <div class="form-group">
                            <label for="txtField_brute_force_period_mins">[% locale.maketext('Brute Force Protection Period (in minutes)') %]</label>
                            <div class="row">
                                <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                    <input type="text"
                                        id="txtField_brute_force_period_mins"
                                        name="txtField_brute_force_period_mins"
                                        ng-model="config_settings.brute_force_period_mins"
                                        ng-disabled="!username_protection_enabled"
                                        disable-validation="!username_protection_enabled"
                                        required
                                        positive-integer
                                        num-greater-than-equal="1"
                                        num-less-than-equal="1440"
                                        placeholder="[% locale.maketext('Minutes') %]"
                                        class="form-control" />
                                </div>
                                <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                    <ul validation-container field-name="txtField_brute_force_period_mins">
                                        <validation-item
                                            field-name="txtField_brute_force_period_mins"
                                            validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
                                    </ul>
                                </div>
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="txtField_max_failures">[% locale.maketext('Maximum Failures by Account') %]</label>
                            <div class="row">
                                <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                    <input type="text"
                                        id="txtField_max_failures"
                                        name="txtField_max_failures"
                                        ng-model="config_settings.max_failures"
                                        ng-disabled="!username_protection_enabled"
                                        disable-validation="!username_protection_enabled"
                                        required
                                        positive-integer
                                        max-length="6"
                                        placeholder="[% locale.maketext('Integer') %]"
                                        class="form-control" />
                                </div>
                                <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                    <ul validation-container field-name="txtField_max_failures">
                                        <validation-item
                                            field-name="txtField_max_failures"
                                            validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
                                    </ul>
                                </div>
                            </div>
                        </div>
                        <div class="radio">
                            <label>
                              <input type="radio"
                                    ng-model="username_protection_level"
                                    value="local"
                                    name="username_protection_level_setting"
                                    ng-checked="username_protection_level == 'local'"
                                    ng-disabled="!username_protection_enabled">
                              <span>[% locale.maketext('Apply protection to local addresses [output,strong,only]') %]</span>
                            </label>
                        </div>
                        <div class="radio">
                            <label>
                              <input type="radio"
                                    ng-model="username_protection_level"
                                    value="both"
                                    name="username_protection_level_setting"
                                    ng-checked="username_protection_level == 'both'"
                                    ng-disabled="!username_protection_enabled">
                              <span>[% locale.maketext('Apply protection to local and remote addresses') %]</span>
                            </label>
                        </div>
                        <div class="checkbox">
                            <label>
                                <input type="checkbox" ng-model="config_settings.username_based_protection_for_root" ng-disabled="!username_protection_enabled"/>
                                <span>
                                [% locale.maketext('Allow username protection to lock the “[_1]” user.', 'root') %]
                                </span>
                            </label>
                        </div>
                    </div>
                </div>
                <div class="panel panel-default">
                    <div class="panel-heading">
                    <div class="switchable_panel">
                        <div class="switchable_panel_group">
                            <div class="panel_label">
                                [% locale.maketext('[asis,IP] Address-based Protection') %]
                            </div>
                            <div class="panel_switch">
                                <div role="checkbox"
                                    id="ipToggleSwitch"
                                    class="toggle-switch toggle-switch-xs"
                                    tabindex="0"
                                    uib-tooltip="[% locale.maketext('Click to enable or disable [asis,IP] address-based protection.') %]"
                                    tooltip-append-to-body="true"
                                    aria-checked="{{ config_settings.ip_based_protection }}"
                                    aria-label="[% locale.maketext("Click to enable or disable [asis,IP] address-based protection.") %]"
                                    ng-click="config_settings.ip_based_protection = !config_settings.ip_based_protection"
                                    ng-keyup="handle_protection_keyup($event, 'ip_based_protection')"
                                    ng-keyup="handle_protection_keydown($event)">
                                    <div id="ipToggleStatus" class="toggle-switch-animate" ng-class="{'switch-off': !config_settings.ip_based_protection, 'switch-on': config_settings.ip_based_protection}">
                                        <span class="switch-left">
                                            [% on_switch_text %]
                                        </span>
                                        <span class="knob">{{knobLabel}}</span>
                                        <span class="switch-right">
                                            [% off_switch_text %]
                                        </span>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                  </div>
                  <div id="ip_protection_settings" class="panel-body" ng-class="{off: !config_settings.ip_based_protection}">
                    <p class="description">
                    [% locale.maketext("[asis,IP] Address-based protection tracks login attempts from specific [asis,IP] addresses. When disabled, [asis,cPHulk] will not block [asis,IP] addresses, but existing blocks will remain.") %]
                    </p>
                    <div class="form-group">
                        <label for="txtField_ip_brute_force_period_mins">[% locale.maketext('IP Address-based Brute Force Protection Period (in minutes)') %]</label>
                        <div class="row">
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <input type="text"
                                    id="txtField_ip_brute_force_period_mins"
                                    name="txtField_ip_brute_force_period_mins"
                                    ng-model="config_settings.ip_brute_force_period_mins"
                                    ng-disabled="!config_settings.ip_based_protection"
                                    disable-validation="!config_settings.ip_based_protection"
                                    required
                                    positive-integer
                                    num-greater-than-equal="1"
                                    num-less-than-equal="1440"
                                    placeholder="[% locale.maketext('Minutes') %]"
                                    class="form-control" />
                            </div>
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <ul validation-container field-name="txtField_ip_brute_force_period_mins">
                                    <validation-item
                                        field-name="txtField_ip_brute_force_period_mins"
                                        validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
                                </ul>
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="txtField_max_failures_byip">[% locale.maketext('Maximum Failures per IP Address') %]</label>
                        <div class="row">
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <input type="text"
                                    id="txtField_max_failures_byip"
                                    name="txtField_max_failures_byip"
                                    ng-model="config_settings.max_failures_byip"
                                    ng-disabled="!config_settings.ip_based_protection"
                                    disable-validation="!config_settings.ip_based_protection"
                                    required
                                    positive-integer
                                    max-length="6"
                                    placeholder="[% locale.maketext('Integer') %]"
                                    class="form-control" />
                            </div>
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <ul validation-container field-name="txtField_max_failures_byip">
                                    <validation-item
                                        field-name="txtField_max_failures_byip"
                                        validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
                                </ul>
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="txtField_command_to_run_on_brute_force">
                            [% locale.maketext('Command to Run When an IP Address Triggers Brute Force Protection') %]
                        </label>
                        <span class="glyphicon glyphicon-info-sign"
                            role="checkbox"
                            tabindex="0"
                            aria-checked="{{ !bruteInfoCollapse }}"
                            aria-label="[% locale.maketext("Display additional help text for this field.") %]"
                            ng-click="bruteInfoCollapse = !bruteInfoCollapse"
                            ng-keyup="collapse_keydown($event)"
                            ng-keyup="collapse_keyup($event, 'bruteInfoCollapse')"></span>
                        <div uib-collapse="bruteInfoCollapse">
                            <span class="info-block">
                                <div class="alert alert-warning">
                                    <span class="glyphicon glyphicon-exclamation-sign"></span>
                                    <div class="alert-message">
                                        <strong>[% locale.maketext('Warning:') %]</strong> [% locale.maketext('The command must complete within [quant,_1,second,seconds] to avoid a timeout.', 15) %]
                                    </div>
                                </div>
                                <p><strong>[% locale.maketext('The following variables may be used in commands:') %]</strong>
                                  <ul>
                                    <li><strong>&percnt;exptime&percnt;</strong> - [% locale.maketext('The [asis,Unix] time when brute force protection will release the block') %]</li>
                                    <li><strong>&percnt;max_allowed_failures&percnt;</strong> - [% locale.maketext('Maximum allowed failures to trigger this type (excessive or non-excessive failures)') %]</li>
                                    <li><strong>&percnt;current_failures&percnt;</strong> - [% locale.maketext('Number of current failures') %]</li>
                                    <li><strong>&percnt;excessive_failures&percnt;</strong> - [% locale.maketext('0 (not an excessive login failure) or 1 (an excessive login failure)') %]</li>
                                    <li><strong>&percnt;reason&percnt;</strong> - [% locale.maketext('The reason for the block') %]</li>
                                    <li><strong>&percnt;remote_ip&percnt;</strong> - [% locale.maketext('The blocked IP address') %]</li>
                                    <li><strong>&percnt;authservice&percnt;</strong> - [% locale.maketext('The last service to request authentication (for example, [asis,webmaild])') %]</li>
                                    <li><strong>&percnt;user&percnt;</strong> - [% locale.maketext('The last username to request authentication') %]</li>
                                    <li><strong>&percnt;logintime&percnt;</strong> - [% locale.maketext('The time of the request') %]</li>
                                    <li><strong>&percnt;ip_version&percnt;</strong> - [% locale.maketext('The IP version (4 or 6)') %]</li>
                                  </ul>
                               </p>
                            </span>
                        </div>
                        <div class="row">
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <input type="text"
                                    id="txtField_command_to_run_on_brute_force"
                                    name="txtField_command_to_run_on_brute_force"
                                    ng-model="config_settings.command_to_run_on_brute_force"
                                    ng-disabled="!config_settings.ip_based_protection"
                                    placeholder="[% locale.maketext('Command Text') %]"
                                    class="form-control" />
                            </div>
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6"></div>
                        </div>
                    </div>
                    <div class="checkbox">
                        <label>
                            <input type="checkbox" ng-model="config_settings.block_brute_force_with_firewall" ng-disabled="!config_settings.can_temp_ban_firewall || !config_settings.ip_based_protection"/>
                            <span>
                            [% locale.maketext('Block IP addresses at the firewall level if they trigger brute force protection') %]
                            </span>
                        </label>
                    </div>
                    <div class="alert alert-info" ng-show="!config_settings.can_temp_ban_firewall">
                        <span class="glyphicon glyphicon-info-sign"></span>
                        <div class="alert-message">
                        {{ config_settings.iptable_error }}
                        </div>
                    </div>
                  </div>
                </div>

                <div class="panel panel-default">
                  <div class="panel-heading">[% locale.maketext('One-day Blocks') %]</div>
                  <div id="one_day_protection_settings" class="panel-body" ng-class="{off: !config_settings.ip_based_protection}">
                    <div class="form-group">
                        <label for="txtField_mark_as_brute">[% locale.maketext('Maximum Failures per IP Address before the IP Address is Blocked for One Day') %]</label>
                        <div class="row">
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <input type="text"
                                    id="txtField_mark_as_brute"
                                    name="txtField_mark_as_brute"
                                    ng-model="config_settings.mark_as_brute"
                                    ng-disabled="!config_settings.ip_based_protection"
                                    disable-validation="!config_settings.ip_based_protection"
                                    required
                                    positive-integer
                                    max-length="6"
                                    placeholder="[% locale.maketext('Integer') %]"
                                    class="form-control" />
                            </div>
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <ul validation-container field-name="txtField_mark_as_brute">
                                    <validation-item
                                        field-name="txtField_mark_as_brute"
                                        validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
                                </ul>
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="txtField_command_to_run_on_excessive_brute_force">
                            [% locale.maketext('Command to Run When an IP Address Triggers a One-Day Block') %]
                        </label>
                        <span class="glyphicon glyphicon-info-sign"
                            role="checkbox"
                            tabindex="0"
                            aria-checked="{{ !excessiveBruteInfoCollapse }}"
                            aria-label="[% locale.maketext("Display additional help text for this field.") %]"
                            ng-click="excessiveBruteInfoCollapse = !excessiveBruteInfoCollapse"
                            ng-keyup="collapse_keydown($event)"
                            ng-keyup="collapse_keyup($event, 'excessiveBruteInfoCollapse')"></span>
                        <div uib-collapse="excessiveBruteInfoCollapse">
                            <span class="info-block">
                                <div class="alert alert-warning">
                                    <span class="glyphicon glyphicon-exclamation-sign"></span>
                                    <div class="alert-message">
                                        <strong>[% locale.maketext('Warning:') %]</strong> [% locale.maketext('The command must complete within [quant,_1,second,seconds] to avoid a timeout.', 15) %]
                                    </div>
                                </div>
                                <p><strong>[% locale.maketext('The following variables may be used in commands:') %]</strong>
                                  <ul>
                                    <li><strong>&percnt;exptime&percnt;</strong> - [% locale.maketext('The [asis,Unix] time when brute force protection will release the block') %]</li>
                                    <li><strong>&percnt;max_allowed_failures&percnt;</strong> - [% locale.maketext('Maximum allowed failures to trigger this type (excessive or non-excessive failures)') %]</li>
                                    <li><strong>&percnt;current_failures&percnt;</strong> - [% locale.maketext('Number of current failures') %]</li>
                                    <li><strong>&percnt;excessive_failures&percnt;</strong> - [% locale.maketext('0 (not an excessive login failure) or 1 (an excessive login failure)') %]</li>
                                    <li><strong>&percnt;reason&percnt;</strong> - [% locale.maketext('The reason for the block') %]</li>
                                    <li><strong>&percnt;remote_ip&percnt;</strong> - [% locale.maketext('The blocked IP address') %]</li>
                                    <li><strong>&percnt;authservice&percnt;</strong> - [% locale.maketext('The last service to request authentication (for example, [asis,webmaild])') %]</li>
                                    <li><strong>&percnt;user&percnt;</strong> - [% locale.maketext('The last username to request authentication') %]</li>
                                    <li><strong>&percnt;logintime&percnt;</strong> - [% locale.maketext('The time of the request') %]</li>
                                    <li><strong>&percnt;ip_version&percnt;</strong> - [% locale.maketext('The IP version (4 or 6)') %]</li>
                                  </ul>
                                </p>
                            </span>
                        </div>
                        <div class="row">
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <input type="text"
                                    id="txtField_command_to_run_on_excessive_brute_force"
                                    name="txtField_command_to_run_on_excessive_brute_force"
                                    ng-model="config_settings.command_to_run_on_excessive_brute_force"
                                    ng-disabled="!config_settings.ip_based_protection"
                                    placeholder="[% locale.maketext('Command Text') %]"
                                    class="form-control" />
                            </div>
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6"></div>
                        </div>
                    </div>
                    <div class="checkbox">
                        <label>
                            <input type="checkbox" ng-model="config_settings.block_excessive_brute_force_with_firewall" ng-disabled="!config_settings.can_temp_ban_firewall || !config_settings.ip_based_protection" />
                            <span>
                            [% locale.maketext('Block IP addresses at the firewall level if they trigger a one-day block') %]
                            </span>
                        </label>
                    </div>
                    <div class="alert alert-info" ng-show="!config_settings.can_temp_ban_firewall">
                        <span class="glyphicon glyphicon-info-sign"></span>
                        <div class="alert-message">
                        {{ config_settings.iptable_error }}
                        </div>
                    </div>
                  </div>
                </div>

               <div class="panel panel-default">
                  <div class="panel-heading">[% locale.maketext('Login History') %]</div>
                  <div class="panel-body">
                    <div class="form-group">
                        <label for="txtField_lookback_period_min">[% locale.maketext('Duration for Retaining Failed Logins (in minutes)') %]</label>
                        <div class="row">
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <input type="text"
                                    id="txtField_lookback_period_min"
                                    name="txtField_lookback_period_min"
                                    ng-model="config_settings.lookback_period_min"
                                    required
                                    positive-integer
                                    max-length="6"
                                    placeholder="[% locale.maketext('Minutes') %]"
                                    class="form-control" />
                            </div>
                            <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
                                <ul validation-container field-name="txtField_lookback_period_min">
                                    <validation-item
                                        field-name="txtField_lookback_period_min"
                                        validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
                                </ul>
                            </div>
                        </div>
                    </div>
                  </div>
                </div>

                <div class="panel panel-default">
                  <div class="panel-heading">[% locale.maketext('Notifications') %]</div>
                  <div class="panel-body">
                    <div class="checkbox">
                        <label>
                            <input type="checkbox" ng-model="config_settings.notify_on_root_login" />
                            <span>
                            [% locale.maketext('Send a notification upon successful root login when the IP address is not on the whitelist') %]
                            </span>
                        </label>
                    </div>
                    <div class="checkbox">
                        <label>
                            <input type="checkbox"
                                ng-model="config_settings.notify_on_root_login_for_known_netblock" />
                            <span>
                            [% locale.maketext('Send a notification upon successful root login when the [asis,IP] address is not on the whitelist, but from a known [asis,netblock]') %]
                            </span>
                        </label>
                    </div>
                    <div class="checkbox">
                        <label>
                            <input type="checkbox"
                                ng-model="config_settings.notify_on_brute"
                                ng-disabled="!config_settings.ip_based_protection" />
                            <span>
                            [% locale.maketext('Send a notification when the system detects a brute force user') %]
                            </span>
                        </label>
                    </div>
                      <p class="text-info">
                           [% locale.maketext('[output,strong,Note:] Users can enable login notifications in the Contact Information area inside of [asis,cPanel].') %]
                      </p>
                  </div>
                </div>

                <div class="form-group">
                    <div class="row">
                        <div class="col-xs-12 col-sm-10 col-md-8 col-lg-6">
                            <button
                                type="submit"
                                spinner-id="saveConfig"
                                cp-action="save(config_form)"
                                button-class="btn-primary"
                                ng-disabled="disableSave(config_form)">[% locale.maketext("Save") %]</button>
                        </div>
                    </div>
                </div>
            </form>
            </section>
        </div>
    </div>
</div>
Back to Directory File Manager