Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/hulkd/views/historyView.ptt
<section id="actionArea">
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6">
<form class="form-inline">
<div class="form-group">
<label for="selectTable" class="col-sm-12 control-label">[% locale.maketext("Select a Report:") %]</label>
</div>
<div class="form-group">
<div class="col-sm-8">
<select name="selectTable"
id="selectTable"
class="form-control"
ng-model="selectedTable"
ng-disabled="loadingPageData"
ng-change="loadTable()">
<option value="failedLogins" selected="selected">
[% locale.maketext('Failed Logins') %]</option>
<option value="users">
[% locale.maketext('Blocked Users') %]</option>
<option value="brutes">
[% locale.maketext('Blocked IP Addresses') %]</option>
<option value="excessiveBrutes">
[% locale.maketext('One-day Blocks') %]</option>
</select>
</div>
</div>
</form>
</div>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="pull-right">
<button type="button"
spinner-id="refreshHistory"
cp-action="refreshLogins()"
button-class="btn-default"
ng-disabled="loadingPageData">[% locale.maketext("Refresh") %]</button>
<button type="button"
spinner-id="clearHistory"
cp-action="clearHistory()"
button-class="btn-primary"
ng-disabled="clearingHistory">[% locale.maketext("Remove Blocks and Clear Reports") %]</button>
</div>
</div>
</div>
</section>
<div ng-switch on="selectedTable">
<section id="brutes" ng-switch-when="brutes">
<h3>[% locale.maketext("Blocked IP Addresses") %]</h3>
<p>{{ blockedIPsDescription(config_settings) }}</p>
<div class="alert alert-info" ng-show="!config_settings.ip_based_protection">
<span class="glyphicon glyphicon-info-sign"></span>
<div class="alert-message">
[% locale.maketext("[asis,IP] Address-based protection is currently disabled. [asis,cPHulk] will not create new blocks, but existing blocks will remain.") %]
</div>
</div>
<div class="row search-page-container">
<div class="col-xs-12 col-sm-12 col-md-7 col-lg-7">
<div class="search-container">
<label for="brutesFilter">[% locale.maketext("Filter") %]</label>
<div class="search">
<search id="brutesFilter" ng-model="meta.brutes.filterValue" ng-change="search('brutes')"></search>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-5 col-lg-5">
<div class="pagination-container hidden-xs hidden-sm">
<page-size id="topBrutesPageSize"
allowed-sizes="meta.pageSizes"
total-items="meta.brutes.totalRows"
ng-model="meta.brutes.pageSize"
show-all="false"
ng-change="changePageSize('brutes')">
</page-size>
<uib-pagination id="topBrutesPager"
ng-change="fetchPage('brutes', page)"
ng-model="meta.brutes.pageNumber"
max-size="meta.maxPages"
items-per-page="meta.brutes.pageSize"
total-items="meta.brutes.totalRows"
direction-links="true"
boundary-links="true"
rotate="false"
first-text="<<"
last-text=">>"
previous-text="<"
next-text=">"
class="pagination-small">
</uib-pagination>
</div>
</div>
</div>
<div class="row hidden-xs hidden-sm">
<div class="col-xs-12 col-md-offset-7 col-md-5">
<p class="text-right">[% locale.maketext("Displaying [_1] to [_2] out of [_3] records", "{{ meta.brutes.pageNumberStart }}", "{{ meta.brutes.pageNumberEnd }}", "{{ meta.brutes.totalRows }}") %]</p>
</div>
</div>
<table id="brutesTable" class="table table-striped table-condensed">
<thead>
<th>
<span toggle-sort id="sortIp" onsort="sortBruteList" sort-meta="meta.brutes" sort-field="ip">
[% locale.maketext('IP Address') %]
</span>
</th>
<th>
<span toggle-sort id="sortCountry" onsort="sortBruteList" sort-meta="meta.brutes" sort-field="country_code">
[% locale.maketext('Country') %]
</span>
</th>
<th>
<span toggle-sort id="sortComments" onsort="sortBruteList" sort-meta="meta.brutes" sort-field="notes">
[% locale.maketext('Notes') %]
</span>
</th>
<th>
<span toggle-sort id="sortBegin" onsort="sortBruteList" sort-meta="meta.brutes" sort-field="logintime">
[% locale.maketext('Begin Time') %]
</span>
<th>
<span toggle-sort id="sortExpTime" onsort="sortBruteList" sort-meta="meta.brutes" sort-field="exptime">
[% locale.maketext('Expiration Time') %]
</span>
</th>
<th>
<span toggle-sort id="sortTimeLeft" onsort="sortBruteList" sort-meta="meta.brutes" sort-field="timeleft" sort-type="numeric">
[% locale.maketext('Minutes Remaining') %]
</span>
</th>
<th>
[% locale.maketext('Actions') %]
</th>
</thead>
<tbody ng-class="{ 'table-overlay': updatingPageData }">
<tr ng-repeat="brute in brutes">
<td>{{ brute.ip }}</td>
<td>{{ brute.country_code }}</td>
<td ng-bind-html="brute.notes"></td>
<td>{{ brute.logintime }}</td>
<td>{{ brute.exptime }}</td>
<td>{{ brute.timeleft }}</td>
<td>
<button
name="unblock_brute_{{ $id }}"
id="unblock_brute_{{ $id }}"
class="btn btn-link"
ng-click="unBlockAddress(brute.ip, $event)">
<span class='glyphicon glyphicon-trash'></span>
[% locale.maketext('Remove Block') %]</button>
</td>
</tr>
<tr class="info emptyrow" ng-hide="brutes.length" ng-switch="loadingPageData">
<td colspan="7" id="noRecords" ng-switch-when="true">
<i id="loading_brutes_spinner" class="fas fa-spinner fa-spin"></i>
[% locale.maketext('The system is retrieving the Blocked IP Addresses list.') %]
</td>
<td colspan="7" id="noRecords" ng-switch-default>[% locale.maketext('The Blocked IP Addresses list is empty.') %]</td>
</tr>
</tbody>
</table>
<div class="search-page-container visible-sm-block visible-xs-block hidden-lg hidden-md">
<div class="row">
<div class="col-xs-12 col-sm-12">
<div>
<uib-pagination id="bottomBrutesPager"
ng-change="fetchPage('brutes', page)"
ng-model="meta.brutes.pageNumber"
max-size="meta.maxPages"
items-per-page="meta.brutes.pageSize"
total-items="meta.brutes.totalRows"
direction-links="true"
boundary-links="true"
rotate="false"
first-text="<<"
last-text=">>"
previous-text="<"
next-text=">"></uib-pagination>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12">
<p>[% locale.maketext("Displaying [_1] to [_2] out of [_3] records", "{{ meta.brutes.pageNumberStart }}", "{{ meta.brutes.pageNumberEnd }}", "{{ meta.brutes.totalRows }}") %]</p>
</div>
</div>
</div>
</section>
<section id="excessiveBrutes" ng-switch-when="excessiveBrutes">
<h3>[% locale.maketext("One-day Blocks") %]</h3>
<p>[% locale.maketext('The system blocks IP addresses with excessive login failures for a duration of “[_1]” [numerate,_1,day,days].', "1") %]</p>
<div class="alert alert-info" ng-show="!config_settings.ip_based_protection">
<span class="glyphicon glyphicon-info-sign"></span>
<div class="alert-message">
[% locale.maketext("[asis,IP] Address-based protection is currently disabled. [asis,cPHulk] will not create new blocks, but existing blocks will remain.") %]
</div>
</div>
<div class="row search-page-container">
<div class="col-xs-12 col-sm-12 col-md-7 col-lg-7">
<div class="search-container">
<label for="excessiveBrutesFilter">[% locale.maketext("Filter") %]</label>
<div class="search">
<search id="excessiveBrutesFilter" ng-model="meta.excessiveBrutes.filterValue" ng-change="search('excessiveBrutes')"></search>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-5 col-lg-5">
<div class="pagination-container hidden-xs hidden-sm">
<page-size id="topExcessiveBrutesPageSize"
allowed-sizes="meta.pageSizes"
total-items="meta.excessiveBrutes.totalRows"
ng-model="meta.excessiveBrutes.pageSize"
show-all="false"
ng-change="changePageSize('excessiveBrutes')">
</page-size>
<uib-pagination id="topExcessiveBrutesPager"
ng-change="fetchPage('excessiveBrutes', page)"
ng-model="meta.excessiveBrutes.pageNumber"
max-size="meta.maxPages"
items-per-page="meta.excessiveBrutes.pageSize"
total-items="meta.excessiveBrutes.totalRows"
direction-links="true"
boundary-links="true"
rotate="false"
first-text="<<"
last-text=">>"
previous-text="<"
next-text=">"
class="pagination-small">
</uib-pagination>
</div>
</div>
</div>
<div class="row hidden-xs hidden-sm">
<div class="col-xs-12 col-md-offset-7 col-md-5">
<p class="text-right">[% locale.maketext("Displaying [_1] to [_2] out of [_3] records", "{{ meta.excessiveBrutes.pageNumberStart }}", "{{ meta.excessiveBrutes.pageNumberEnd }}", "{{ meta.excessiveBrutes.totalRows }}") %]</p>
</div>
</div>
<table id="excessiveBrutesTable" class="table table-striped table-condensed">
<thead>
<th>
<span toggle-sort id="sortIp" onsort="sortExcessiveBruteList" sort-meta="meta.excessiveBrutes" sort-field="ip">
[% locale.maketext('IP Address') %]
</span>
</th>
<th>
<span toggle-sort id="sortCountry" onsort="sortExcessiveBruteList" sort-meta="meta.excessiveBrutes" sort-field="country_code">
[% locale.maketext('Country') %]
</span>
</th>
<th>
<span toggle-sort id="sortComments" onsort="sortExcessiveBruteList" sort-meta="meta.excessiveBrutes" sort-field="notes">
[% locale.maketext('Notes') %]
</span>
</th>
<th>
<span toggle-sort id="sortBegin" onsort="sortExcessiveBruteList" sort-meta="meta.excessiveBrutes" sort-field="logintime">
[% locale.maketext('Begin Time') %]
</span>
</th>
<th>
<span toggle-sort id="sortExpTime" onsort="sortExcessiveBruteList" sort-meta="meta.excessiveBrutes" sort-field="exptime">
[% locale.maketext('Expiration Time') %]
</span>
</th>
<th>
<span toggle-sort id="sortTimeLeft" onsort="sortExcessiveBruteList" sort-meta="meta.excessiveBrutes" sort-field="timeleft" sort-type="numeric">
[% locale.maketext('Minutes Remaining') %]
</span>
</th>
<th>
[% locale.maketext('Actions') %]
</th>
</thead>
<tbody ng-class="{ 'table-overlay': updatingPageData }">
<tr ng-repeat="brute in excessiveBrutes">
<td>{{ brute.ip }}</td>
<td>{{ brute.country_code }}</td>
<td ng-bind-html="brute.notes"></td>
<td>{{ brute.logintime }}</td>
<td>{{ brute.exptime }}</td>
<td>{{ brute.timeleft }}</td>
<td>
<button
name="unblock_excessive_brute_{{ $id }}"
id="unblock_excessive_brute_{{ $id }}"
class="btn btn-link"
ng-click="unBlockAddress(brute.ip, $event)">
<span class='glyphicon glyphicon-trash'></span>
[% locale.maketext('Remove Block') %]</button>
</td>
</tr>
<tr class="info emptyrow" ng-hide="excessiveBrutes.length" ng-switch="loadingPageData">
<td colspan="7" id="noRecords" ng-switch-when="true">
<i id="loading_brutes_spinner" class="fas fa-spinner fa-spin"></i>
[% locale.maketext('The system is retrieving the One-day Blocks list.') %]
</td>
<td colspan="7" id="noRecords" ng-switch-default>[% locale.maketext('The One-day Blocks list is empty.') %]</td>
</tr>
</tbody>
</table>
<div class="search-page-container visible-sm-block visible-xs-block hidden-lg hidden-md">
<div class="row">
<div class="col-xs-12 col-sm-12">
<div>
<uib-pagination id="bottomExcessiveBrutesPager"
ng-change="fetchPage('excessiveBrutes', page)"
ng-model="meta.excessiveBrutes.pageNumber"
max-size="meta.maxPages"
items-per-page="meta.excessiveBrutes.pageSize"
total-items="meta.excessiveBrutes.totalRows"
direction-links="true"
boundary-links="true"
rotate="false"
first-text="<<"
last-text=">>"
previous-text="<"
next-text=">"></uib-pagination>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12">
<p>[% locale.maketext("Displaying [_1] to [_2] out of [_3] records", "{{ meta.excessiveBrutes.pageNumberStart }}", "{{ meta.excessiveBrutes.pageNumberEnd }}", "{{ meta.excessiveBrutes.totalRows }}") %]</p>
</div>
</div>
</div>
</section>
<section id="blockedUsers" ng-switch-when="users">
<h3>[% locale.maketext("Blocked Users") %]</h3>
<p> {{ blockedUsersDescription(config_settings) }} </p>
<div class="alert alert-info" ng-show="!config_settings.username_based_protection && !config_settings.username_based_protection_local_origin">
<span class="glyphicon glyphicon-info-sign"></span>
<div class="alert-message">
[% locale.maketext("Username-based protection is currently disabled. [asis,cPHulk] will not lock user accounts, but existing account locks will remain.") %]
</div>
</div>
<div class="row search-page-container">
<div class="col-xs-12 col-sm-12 col-md-7 col-lg-7">
<div class="search-container">
<label for="blockedUsersFilter">[% locale.maketext("Filter") %]</label>
<div class="search">
<search id="blockedUsersFilter" ng-model="meta.users.filterValue" ng-change="search('users')"></search>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-5 col-lg-5">
<div class="pagination-container hidden-xs hidden-sm">
<page-size id="topBlockedUsersPageSize"
allowed-sizes="meta.pageSizes"
total-items="meta.users.totalRows"
ng-model="meta.users.pageSize"
show-all="false"
ng-change="changePageSize('users')">
</page-size>
<uib-pagination id="topBlockedUsersPager"
ng-change="fetchPage('users', page)"
ng-model="meta.users.pageNumber"
max-size="meta.maxPages"
items-per-page="meta.users.pageSize"
total-items="meta.users.totalRows"
direction-links="true"
boundary-links="true"
rotate="false"
first-text="<<"
last-text=">>"
previous-text="<"
next-text=">"
class="pagination-small">
</uib-pagination>
</div>
</div>
</div>
<div class="row hidden-xs hidden-sm">
<div class="col-xs-12 col-md-offset-7 col-md-5">
<p class="text-right">[% locale.maketext("Displaying [_1] to [_2] out of [_3] records", "{{ meta.users.pageNumberStart }}", "{{ meta.users.pageNumberEnd }}", "{{ meta.users.totalRows }}") %]</p>
</div>
</div>
<table id="blockedUsersTable" class="table table-striped table-condensed">
<thead>
<th>
<span toggle-sort id="sortUser" onsort="sortBlockedUsers" sort-meta="meta.users" sort-field="user">
[% locale.maketext('User') %]
</span>
</th>
<th>
<span toggle-sort id="sortLoginIP Address" onsort="sortBlockedUsers" sort-meta="meta.users" sort-field="ip">
[% locale.maketext('IP Address') %]
</span>
</th>
<th>
<span toggle-sort id="sortLoginCountry" onsort="sortBlockedUsers" sort-meta="meta.users" sort-field="country_code">
[% locale.maketext('Country') %]
</span>
</th>
<th>
<span toggle-sort id="sortService" onsort="sortBlockedUsers" sort-meta="meta.users" sort-field="service">
[% locale.maketext('Service') %]
</span>
</th>
<th>
<span toggle-sort id="sortAuthService" onsort="sortBlockedUsers" sort-meta="meta.users" sort-field="authservice">
[% locale.maketext('Authentication Service') %]
</span>
</th>
<th>
<span toggle-sort id="sortLoginTime" onsort="sortBlockedUsers" sort-meta="meta.users" sort-field="logintime">
[% locale.maketext('Login Time') %]
</span>
</th>
<th>
<span toggle-sort id="sortExpTime" onsort="sortBlockedUsers" sort-meta="meta.users" sort-field="exptime">
[% locale.maketext('Expiration Time') %]
</span>
</th>
<th>
<span toggle-sort id="sortTimeLeft" onsort="sortBlockedUsers" sort-meta="meta.users" sort-field="timeleft" sort-type="numeric">
[% locale.maketext('Minutes Remaining') %]
</span>
</th>
</thead>
<tbody ng-class="{ 'table-overlay': updatingPageData }">
<tr ng-repeat="user in users">
<td ng-bind-html="user.user"></td>
<td>{{ user.ip }}</td>
<td>{{ user.country_code }}</td>
<td ng-bind-html="user.service"></td>
<td ng-bind-html="user.authservice"></td>
<td>{{ user.logintime }}</td>
<td>{{ user.exptime }}</td>
<td>{{ user.timeleft }}</td>
</tr>
<tr class="info emptyrow" ng-hide="users.length" ng-switch="loadingPageData">
<td colspan="8" id="noRecords" ng-switch-when="true">
<i id="loading_users_spinner" class="fas fa-spinner fa-spin"></i>
[% locale.maketext('The system is retrieving the Blocked Users list.') %]
</td>
<td colspan="8" id="noRecords" ng-switch-default>[% locale.maketext('The Blocked Users list is empty.') %]</td>
</tr>
</tbody>
</table>
<div class="search-page-container visible-sm-block visible-xs-block hidden-lg hidden-md">
<div class="row">
<div class="col-xs-12 col-sm-12">
<div>
<uib-pagination id="bottomBlockedUsersPager"
ng-change="fetchPage('users', page)"
ng-model="meta.users.pageNumber"
max-size="meta.maxPages"
items-per-page="meta.users.pageSize"
total-items="meta.users.totalRows"
direction-links="true"
boundary-links="true"
rotate="false"
first-text="<<"
last-text=">>"
previous-text="<"
next-text=">"></uib-pagination>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12">
<p>[% locale.maketext("Displaying [_1] to [_2] out of [_3] records", "{{ meta.users.pageNumberStart }}", "{{ meta.users.pageNumberEnd }}", "{{ meta.users.totalRows }}") %]</p>
</div>
</div>
</div>
</section>
<section id="failedLogins" ng-switch-default>
<h3>[% locale.maketext("Failed Logins") %]</h3>
<p>{{ lookbackPeriodMinsDescription(config_settings) }}</p>
<div class="row search-page-container">
<div class="col-xs-12 col-sm-12 col-md-7 col-lg-7">
<div class="search-container">
<label for="failedLoginsFilter">[% locale.maketext("Filter") %]</label>
<div class="search">
<search id="failedLoginsFilter" ng-model="meta.logins.filterValue" ng-change="search('logins')"></search>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-5 col-lg-5">
<div class="pagination-container hidden-xs hidden-sm">
<page-size id="topFailedLoginsPageSize"
allowed-sizes="meta.pageSizes"
total-items="meta.logins.totalRows"
ng-model="meta.logins.pageSize"
show-all="false"
ng-change="changePageSize('logins')">
</page-size>
<uib-pagination id="topFailedLoginsPager"
ng-change="fetchPage('logins', page)"
ng-model="meta.logins.pageNumber"
max-size="meta.maxPages"
items-per-page="meta.logins.pageSize"
total-items="meta.logins.totalRows"
direction-links="true"
boundary-links="true"
rotate="false"
first-text="<<"
last-text=">>"
previous-text="<"
next-text=">"
class="pagination-small">
</uib-pagination>
</div>
</div>
</div>
<div class="row hidden-xs hidden-sm">
<div class="col-xs-12 col-md-offset-7 col-md-5">
<p class="text-right">[% locale.maketext("Displaying [_1] to [_2] out of [_3] records", "{{ meta.logins.pageNumberStart }}", "{{ meta.logins.pageNumberEnd }}", "{{ meta.logins.totalRows }}") %]</p>
</div>
</div>
<table id="failedLoginsTable" class="table table-striped table-condensed">
<thead>
<th>
<span toggle-sort id="sortUser" onsort="sortLoginList" sort-meta="meta.logins" sort-field="user">
[% locale.maketext('User') %]
</span>
</th>
<th>
<span toggle-sort id="sortLoginIP Address" onsort="sortLoginList" sort-meta="meta.logins" sort-field="ip">
[% locale.maketext('IP Address') %]
</span>
</th>
<th>
<span toggle-sort id="sortCountry" onsort="sortLoginList" sort-meta="meta.logins" sort-field="country_code">
[% locale.maketext('Country') %]
</span>
</th>
<th>
<span toggle-sort id="sortService" onsort="sortLoginList" sort-meta="meta.logins" sort-field="service">
[% locale.maketext('Service') %]
</span>
</th>
<th>
<span toggle-sort id="sortAuthService" onsort="sortLoginList" sort-meta="meta.logins" sort-field="authservice">
[% locale.maketext('Authentication Service') %]
</span>
</th>
<th>
<span toggle-sort id="sortLoginTime" onsort="sortLoginList" sort-meta="meta.logins" sort-field="logintime">
[% locale.maketext('Login Time') %]
</span>
</th>
<th>
<span toggle-sort id="sortExpTime" onsort="sortLoginList" sort-meta="meta.logins" sort-field="exptime">
[% locale.maketext('Expiration Time') %]
</span>
</th>
<th>
<span toggle-sort id="sortTimeLeft" onsort="sortLoginList" sort-meta="meta.logins" sort-field="timeleft" sort-type="numeric">
[% locale.maketext('Minutes Remaining') %]
</span>
</th>
</thead>
<tbody ng-class="{ 'table-overlay': updatingPageData }">
<tr ng-repeat="failure in logins">
<td ng-bind-html="failure.user"></td>
<td>{{ failure.ip }}</td>
<td>{{ failure.country_code }}</td>
<td ng-bind-html="failure.service"></td>
<td ng-bind-html="failure.authservice"></td>
<td>{{ failure.logintime }}</td>
<td>{{ failure.exptime }}</td>
<td>{{ failure.timeleft }}</td>
</tr>
<tr class="info emptyrow" ng-hide="logins.length" ng-switch="loadingPageData">
<td colspan="8" id="noRecords" ng-switch-when="true">
<i id="loading_logins_spinner" class="fas fa-spinner fa-spin"></i>
[% locale.maketext('The system is retrieving the Failed Logins list.') %]
</td>
<td colspan="8" id="noRecords" ng-switch-default>[% locale.maketext('The Failed Logins list is empty.') %]</td>
</tr>
</tbody>
</table>
<div class="search-page-container visible-sm-block visible-xs-block hidden-lg hidden-md">
<div class="row">
<div class="col-xs-12 col-sm-12">
<div>
<uib-pagination id="bottomFailedLoginsPager"
ng-change="fetchPage('logins', page)"
ng-model="meta.logins.pageNumber"
max-size="meta.maxPages"
items-per-page="meta.logins.pageSize"
total-items="meta.logins.totalRows"
direction-links="true"
boundary-links="true"
rotate="false"
first-text="<<"
last-text=">>"
previous-text="<"
next-text=">"></uib-pagination>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12">
<p>[% locale.maketext("Displaying [_1] to [_2] out of [_3] records", "{{ meta.logins.pageNumberStart }}", "{{ meta.logins.pageNumberEnd }}", "{{ meta.logins.totalRows }}") %]</p>
</div>
</div>
</div>
</section>
</div>
Back to Directory
File Manager