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