Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/mod_security/views/rulesListView.ptt
[%
USE Whostmgr;
SET easy_apache_url = Whostmgr.ENV.cp_security_token _ '/scripts7/EasyApache4';
%]
<div class="row">
<!-- The 'sm' size uses only 11 total columns to compensate for the 1 column spacer from the spinner -->
<div class="col-xs-12 col-sm-3">
<h2>[% locale.maketext('Rules List') %]</h2>
</div>
<div class="col-xs-12 col-sm-9 text-left-xs text-right-sm">
<div class="navigation-controls">
<button id="btnTopHitList"
type="button"
class="btn btn-default"
ng-click="loadView('hitList', null, { clearAlerts: true })">
[% locale.maketext('Hits List') %]
</button>
<div class="button-group">
<button id="btnTopEditCustomRules"
type="button"
class="btn btn-default"
ng-click="loadView('editCustomRules')">
[% locale.maketext('Edit Rules') %]
</button>
<button id="btnTopAddRule"
type="button"
class="btn btn-primary"
ng-click="loadView('addCustomRule')">
[% locale.maketext('Add Rule') %]
</button>
</div>
</div>
</div>
</div>
<div class="row list-header" ng-hide="dbException">
<div class="col-xs-12 col-sm-5 col-md-6">
<div class="form-group">
<div class="row">
<div class="col-xs-11">
<div class="input-group filter-controls">
<input id="ruleListFilter"
class="form-control"
placeholder="[% locale.maketext('Search') %]"
title="[% locale.maketext('Type in your search filter.') %]"
ng-model="meta.filterValue"
autocomplete="off"
auto-focus
ng-keyup="triggerToggleSearch($event)">
<span class="input-group-btn" uib-dropdown auto-close="outsideClick" event-handler="fixMenuClipping" is-open="advancedSearchOpen">
<button id="btnSearch"
type="button"
class="btn btn-default"
ng-click="toggleSearch(true)">
<span class="glyphicon" ng-class="{ 'glyphicon-search': !activeSearch, 'glyphicon-remove': activeSearch }"></span>
</button>
<button id="btnAdvanceSearch"
type="button"
class="btn btn-default dropdown-toggle"
title="[% locale.maketext('Advanced Search') %]"
uib-dropdown-toggle>
<span class="caret"></span>
<span class="sr-only">[% locale.maketext('Advanced Search') %]</span>
</button>
<ul class="dropdown-menu advanced-filter-menu" role="menu" ng-click="$event.stopPropagation()">
<li>
<div class="radio">
<label>
<input id="chkShowStagedAndDeployed"
type="radio"
name="radioPublishState"
ng-model="meta.advanced.showStagedDeployed"
ng-checked="meta.advanced.showStagedDeployed === 'both'"
ng-change="onAdvancedChanged('staged-and-deployed')"
value="both">
[% locale.maketext('Show published and unpublished rules.') %]
</label>
</div>
<div class="radio">
<label>
<input id="chkShowStaged"
type="radio"
name="radioPublishState"
ng-model="meta.advanced.showStagedDeployed"
ng-checked="meta.advanced.showStagedDeployed === 'staged'"
ng-change="onAdvancedChanged('staged')"
value="staged">
[% locale.maketext('Show unpublished rules.') %]
</label>
</div>
<div class="radio">
<label>
<input id="chkShowDeployed"
type="radio"
name="radioPublishState"
ng-model="meta.advanced.showStagedDeployed"
ng-checked="meta.advanced.showStagedDeployed === 'deployed'"
ng-change="onAdvancedChanged('deployed')"
value="deployed">
[% locale.maketext('Show published rules.') %]
</label>
</div>
</li>
<li>
<hr>
</li>
<li>
<div class="radio">
<label>
<input id="chkShowEnabledAndDisabled"
type="radio"
name="radioEnableState"
ng-model="meta.advanced.showEnabledDisabled"
ng-checked="meta.advanced.showEnabledDisabled === 'both'"
ng-change="onAdvancedChanged('enabled-and-disabled')"
value="both">
[% locale.maketext('Show enabled and disabled rules.') %]
</label>
</div>
<div class="radio">
<label>
<input id="chkShowEnabled"
type="radio"
name="radioEnableState"
ng-model="meta.advanced.showEnabledDisabled"
ng-checked="meta.advanced.showEnabledDisabled === 'enabled'"
ng-change="onAdvancedChanged('enabled')"
value="enabled">
[% locale.maketext('Show enabled rules.') %]
</label>
</div>
<div class="radio">
<label>
<input id="chkShowDisabled"
type="radio"
name="radioEnableState"
ng-model="meta.advanced.showEnabledDisabled"
ng-checked="meta.advanced.showEnabledDisabled === 'disabled'"
ng-change="onAdvancedChanged('disabled')"
value="disabled">
[% locale.maketext('Show disabled rules.') %]
</label>
</div>
</li>
<li>
<hr>
</li>
<li>
<div class="form-group">
<div class="row">
<div class="col-xs-12">
<label for="ddlVendorSelect">[% locale.maketext('Vendors:') %]</label>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<select id="ddlVendorSelect"
class="form-control"
ng-show="vendors.length > 0"
size="2"
multiple
ng-model="selectedVendors"
ng-click="onAdvancedChanged('vendor')"
ng-options="vendor as vendor.name for vendor in vendors">
</select>
<span id="no-vendors-installed"
ng-show="vendors.length === 0">
[% locale.maketext('There are no vendor rule sets installed on your system.') %]
</span>
</div>
</div>
</div>
</li>
<li>
<div class="checkbox">
<label>
<input id="chkShowUserRules"
type="checkbox"
ng-model="meta.advanced.includeUserRules"
ng-checked="meta.advanced.includeUserRules"
ng-change="onAdvancedChanged('userDefined')">
[% locale.maketext('Show user-defined rules.') %]
</label>
</div>
</li>
<li>
<div class="form-group action-group">
<button id="btnApplyFilter"
type="button"
class="btn btn-default"
ng-click="applyAdvancedFilter($event)"
ng-disable="!$scope.meta.advanced.changed"
title="[% locale.maketext('Apply the advanced filters.') %]">
[% locale.maketext('Apply') %]
</button>
<button id="btnResetFilter"
type="button"
class="btn btn-link"
ng-click="resetAdvancedFilter($event)"
title="[% locale.maketext('Reset to remove advanced filters.') %]">
[% locale.maketext('Reset') %]
</button>
</div>
</li>
</ul>
</span>
</div>
</div>
<div class="col-xs-1">
<span spinner id="ruleListSpinner" class="headerSpinner" title="[% locale.maketext('Loading …') %]"></span>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-7 col-md-6 form-inline text-left-xs text-right-sm">
<div class="form-group page-size-container">
<label for="ddlPageSize">[% locale.maketext('Page Size') %]
<select id="ddlPageSize"
class="form-control page-size-control"
ng-model="meta.pageSize"
ng-options="size for size in meta.pageSizes">
</select>
</label>
</div>
<uib-pagination id="topPager"
ng-change="selectPage()"
ng-model="meta.pageNumber"
items-per-page="meta.pageSize"
total-items="totalItems"
max-size="5"
direction-links="false"
boundary-links="true"
first-text="[% locale.maketext('First') %]"
last-text="[% locale.maketext('Last') %]"
previous-text="[% locale.maketext('Previous') %]"
next-text="[% locale.maketext('Next') %]"
class="pagination-small">
</uib-pagination>
</div>
</div>
<div class="callout callout-warning" ng-hide="dbException || !stagedChanges">
<div ng-show="discardConfirm">
<div>[% locale.maketext('Are you sure that you want to discard the unpublished changes?') %]</div>
<button id="btnTopConfirmDiscard"
type="button"
cp-action="discardChanges()"
button-class="btn-default"
ng-disabled="pendingChanges">
[% locale.maketext('Discard Changes') %]
</button>
<button id="btnTopCancelDiscard"
type="button"
class="btn btn-link"
ng-click="discardConfirm = false"
ng-disabled="pendingChanges">
[% locale.maketext('Cancel') %]
</button>
</div>
<div ng-hide="discardConfirm">
<div ng-show="loadingPageData == 'error'">[% locale.maketext('You have unpublished and invalid changes in your [asis,ModSecurity™] configuration.') %]</div>
<div ng-show="loadingPageData != 'error'">[% locale.maketext('You have unpublished changes for your [asis,ModSecurity™] configuration. You must save these changes for them to take effect.') %]</div>
<button id="btnTopDeployChanges"
type="button"
cp-action="deployChanges()"
ng-show="loadingPageData != 'error'"
ng-disabled="pendingChanges">
[% locale.maketext('Deploy and Restart [asis,Apache]') %]
</button>
<button id="btnTopDiscardChanges"
type="button"
class="btn btn-default"
ng-click="discardConfirm = true"
ng-disabled="pendingChanges">
[% locale.maketext('Discard Changes') %]
</button>
</div>
</div>
<ul class="list-unstyled list-table list-table-striped rules-list" ng-hide="dbException">
<li class="list-table-header row" cp-responsive-sort>
<span class="visible-xs col-xs-8">
<cp-responsive-sort-insert id-suffix="rules" label="[% locale.maketext('Sort by') %]"></cp-responsive-sort-insert>
</span>
<span class="hidden-xs col-sm-2 col-lg-1 rule-status">
<toggle-sort id="sortStatus"
class="nowrap"
onsort="sortList"
sort-meta="meta"
sort-field="disabled"
sort-reverse>
[% locale.maketext('Status') %]
</toggle-sort>
</span>
<span class="hidden-xs col-sm-2 col-lg-1 rule-published">
<toggle-sort id="sortPublished"
class="nowrap"
onsort="sortList"
sort-meta="meta"
sort-field="staged">
[% locale.maketext('Staging') %]
</toggle-sort>
</span>
<span class="hidden-xs col-sm-2 rule-vendor">
<toggle-sort id="sortVendor"
class="nowrap"
onsort="sortList"
sort-meta="meta"
sort-field="vendor_id">
[% locale.maketext('Vendor') %]
</toggle-sort>
</span>
<span class="hidden-xs col-sm-2 rule-id">
<toggle-sort id="sortID"
class="nowrap"
onsort="sortList"
sort-meta="meta"
sort-type="numeric"
sort-field="id">
[% locale.maketext('ID') %]
</toggle-sort>
</span>
<span class="hidden-xs col-sm-2 col-lg-4 rule-message">
<toggle-sort id="sortMessage"
class="nowrap"
onsort="sortList"
sort-meta="meta"
sort-field="meta_msg">
[% locale.maketext('Message') %]
</toggle-sort>
</span>
<span class="col-xs-4 col-sm-2 text-right rule-included">
<div class="btn-group btn-group-nowrap" ng-click="openAdvancedSearch($event)">
<button id="btnUserRules"
class="btn btn-primary"
type="button"
title="{{ generateIndicatorText('user-title') }}"
uib-popover="{{ generateIndicatorText('user-title') }}"
popover-trigger="mouseenter"
popover-append-to-body="true"
popover-placement="bottom">
<span ng-class="{ 'glyphicon glyphicon-minus-sign' : !appliedIncludeUserRules, 'fas fa-user' : appliedIncludeUserRules }"></span>
<span class="sr-only">[% locale.maketext('User rule sets included.') %]</span>
</button>
<button id="btnVendorCount"
class="btn btn-primary"
type="button"
title="{{ generateIndicatorText('vendor-title') }}"
uib-popover="{{ generateIndicatorText('vendor-title') }}"
popover-trigger="mouseenter"
popover-append-to-body="true"
popover-placement="bottom">
<span class="hidden-md hidden-lg">{{ generateIndicatorText('vendor-short') }}</span>
<span class="hidden-xs hidden-sm">{{ generateIndicatorText('vendor-long') }}</span>
<span class="sr-only">[% locale.maketext('Vendor rule set count.') %]</span>
</button>
</div>
</span>
</li>
<li class="row"
ng-class="{ 'disabled' : rule.disabled, 'warning' : rule.staged}"
ng-repeat="rule in rules">
<span class="col-xs-6 col-sm-2 col-lg-1 rule-status" id="statusData{{$index}}">
<strong class="hidden-sm hidden-md hidden-lg">[% locale.maketext('Status:') %]</strong>
<span class="label label-{{rule.disabled ? 'default' : 'success' }}">
{{rule.disabled ? [% locale.maketext('Disabled').json() %] : [% locale.maketext('Enabled').json() %] }}
</span>
</span>
<span class="col-xs-6 col-sm-2 col-lg-1 rule-published" id="publishedData{{$index}}">
<strong class="hidden-sm hidden-md hidden-lg">[% locale.maketext('Staging:') %]</strong>
<span class="label label-warning" ng-show="rule.staged">
[% locale.maketext('Unpublished') %]
</span>
<span class="label label-primary" ng-show="!rule.staged">
[% locale.maketext('Published') %]
</span>
</span>
<span class="col-xs-6 col-sm-2 rule-vendor">
<strong class="hidden-sm hidden-md hidden-lg">[% locale.maketext('Vendor:') %]</strong>
<span id="vendorIdData{{$index}}" title="{{getVendorName(rule)}}">{{rule.vendor_id === "" ? "[% locale.maketext('Custom') %]" : rule.vendor_id}}</span>
</span>
<span class="col-xs-6 col-sm-2 rule-id">
<strong class="hidden-sm hidden-md hidden-lg">[% locale.maketext('ID:') %]</strong>
<span id="idData{{$index}}">{{rule.id || 0}}</span>
</span>
<span class="col-xs-12 col-sm-4 col-lg-6 rule-message">
<strong class="hidden-sm hidden-md hidden-lg" ng-show="rule.meta_msg">[% locale.maketext('Message:') %]</strong>
<span id="messageData{{$index}}" ng-bind-html="rule.meta_msg | encodeHtml | wrap:'':40"></span>
</span>
<span id="contentData{{$index}}"
class="col-xs-12 col-sm-10 col-md-10 rule-content"
ng-hide="rule.showDeleteConfirm">
<div ng-repeat="part in rule.rule | split track by $index">
<span ng-bind-html="part | encodeHtml | wrap:'':40"></span>
</div>
</span>
<span id="actionsSwitch{{$index}}"
class="col-xs-12 rule-actions"
ng-class="{ 'text-center': rule.showDeleteConfirm, 'col-sm-1 col-md-1': !rule.showDeleteConfirm }"
ng-switch="rule.showDeleteConfirm">
<span id="actionsContainer{{$index}}" ng-switch-default>
<button id="btnEdit{{$index}}"
type="button"
class="btn btn-link"
title="[% locale.maketext('Edit Rule') %]"
ng-show="isCustomVendor(rule)"
ng-click="loadView('editCustomRule', { ruleId : rule.id })">
<span class='glyphicon glyphicon-pencil'></span>
[% locale.maketext('Edit') %]
</button>
<button id="btnCopy{{$index}}"
type="button"
class="btn btn-link"
title="[% locale.maketext('Copy Rule') %]"
ng-click="loadView('copyCustomRule', { config: rule.config, id : rule.id, disabled: rule.disabled })">
<span class='fas fa-copy fa-lg'></span>
[% locale.maketext('Copy') %]
</button>
<span ng-hide="rule.disabled">
<button id="btnDisable{{$index}}"
type="button"
title="[% locale.maketext('Disable Rule') %]"
button-class="btn-link"
cp-action="disable(rule)">
<span class='glyphicon glyphicon-ban-circle'></span>
[% locale.maketext('Disable') %]
</button>
</span>
<span ng-show="rule.disabled">
<button id="btnEnable{{$index}}"
type="button"
title="[% locale.maketext('Enable Rule') %]"
button-class="btn-link"
cp-action="enable(rule)">
<span class='fas fa-check fa-lg'></span>
[% locale.maketext('Enable') %]
</button>
</span>
<button id="btnDelete{{$index}}"
type="button"
class="btn btn-link"
title="[% locale.maketext('Delete Rule') %]"
ng-show="isCustomVendor(rule)"
ng-click="rule.showDeleteConfirm = true">
<span class="glyphicon glyphicon-trash"></span>
[% locale.maketext('Delete') %]
</button>
</span>
<div id="deleteConfirmContainer{{$index}}"
class="confirm-dialog"
ng-switch-when="true">
<div class="confirm-message">[% locale.maketext('Are you sure that you want to delete this rule?') %]</div>
<div class="form-group action-group">
<button id="btnConfirmDelete{{$index}}"
type="button"
title="[% locale.maketext('Delete Rule') %]"
spinner-id="spinnerDelete{{$index}}"
cp-action="delete(rule)">
[% locale.maketext('Delete') %]
</button>
<button id="btnCancelDelete{{$index}}"
type="button"
class="btn btn-link"
title="[% locale.maketext('Cancel Rule Deletion') %]"
ng-click="rule.showDeleteConfirm = false"
ng-disabled="rule.deleting">
[% locale.maketext('Cancel') %]
</button>
</div>
</div>
</span>
</li>
<li class="row info" ng-show="!rules.length" ng-switch="loadingPageData">
<span class="col-xs-12" id="loadingRecords" ng-switch-when="true">[% locale.maketext('The system is loading your rules.') %]</span>
<span class="col-xs-12" id="unsure" ng-switch-when="error">[% locale.maketext('The system is not able to load your rules.') %]</span>
<span class="col-xs-12" ng-switch-default>
<span ng-hide="hasSearchFilter()" id="noRecords">[% locale.maketext('You have no rules.') %]</span>
<span ng-show="hasSearchFilter()" id="noMatchingRecords">[% locale.maketext('No rules matched your search criteria.') %]</span>
</span>
</li>
</ul>
<div class="callout callout-warning" ng-show="stagedChanges && rules.length">
<div ng-show="discardConfirm">
<div>[% locale.maketext('Are you sure that you want to discard the unpublished changes?') %]</div>
<button id="btnBottomConfirmDiscard"
type="button"
cp-action="discardChanges()"
button-class="btn-default"
ng-disabled="pendingChanges">
[% locale.maketext('Discard Changes') %]
</button>
<button id="btnBottomCancelDiscard"
type="button"
class="btn btn-link"
ng-click="discardConfirm = false"
ng-disabled="pendingChanges">
[% locale.maketext('Cancel') %]
</button>
</div>
<div ng-hide="discardConfirm">
<div ng-show="loadingPageData == 'error'">[% locale.maketext('You have unpublished and invalid changes in your [asis,ModSecurity™] configuration.') %]</div>
<div ng-show="loadingPageData != 'error'">[% locale.maketext('You have unpublished changes for your [asis,ModSecurity™] configuration. You must save these changes for them to take effect.') %]</div>
<button id="btnBottomDeployChanges"
type="button"
cp-action="deployChanges()"
ng-show="loadingPageData != 'error'"
ng-disabled="pendingChanges">
[% locale.maketext('Deploy and Restart [asis,Apache]') %]
</button>
<button id="btnBottomDiscardChanges"
type="button"
class="btn btn-default"
ng-click="discardConfirm = true"
ng-disabled="pendingChanges">
[% locale.maketext('Discard Changes') %]
</button>
</div>
</div>
<div class="row list-footer clearfix">
<div class="col-xs-12 col-md-6 text-left-xs text-right-md form-inline pull-right">
<div class="form-group page-size-container">
<label for="ddlBottomPageSize">[% locale.maketext('Page Size') %]
<select id="ddlBottomPageSize"
class="form-control page-size-control"
ng-model="meta.pageSize"
ng-options="size for size in meta.pageSizes">
</select>
</label>
</div>
<uib-pagination id="bottomPager"
ng-change="selectPage()"
ng-model="meta.pageNumber"
items-per-page="meta.pageSize"
total-items="totalItems"
max-size="5"
direction-links="false"
boundary-links="true"
first-text="[% locale.maketext('First') %]"
last-text="[% locale.maketext('Last') %]"
previous-text="[% locale.maketext('Previous') %]"
next-text="[% locale.maketext('Next') %]"
class="pagination-small">
</uib-pagination>
</div>
<div class="col-xs-12 col-md-6 pull-left">
<div class="form-group">
<div class="row">
<div class="col-xs-12">
<div class="navigation-controls">
<button id="btnTop"
type="button"
class="btn btn-link"
ng-click="scrollTo('top')">
<span class="glyphicon glyphicon-chevron-up"></span>
[% locale.maketext('Back To Top') %]
</button>
<div class="button-group">
<button id="btnBottomHitList"
type="button"
class="btn btn-default"
ng-click="loadView('hitList')">
[% locale.maketext('Hits List') %]
</button>
<div class="button-group">
<button id="btnBottomEditCustomRules"
type="button"
class="btn btn-default"
ng-click="loadView('editCustomRules')">
[% locale.maketext('Edit Rules') %]
</button>
<button id="btnBottomAddRule"
type="button"
class="btn btn-primary"
ng-click="loadView('addCustomRule')">
[% locale.maketext('Add Rule') %]
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Back to Directory
File Manager