mirror of
https://github.com/RaidMax/IW4M-Admin.git
synced 2025-06-11 15:52:25 -05:00
add ban management page
This commit is contained in:
66
WebfrontCore/Views/Admin/BanManagement.cshtml
Normal file
66
WebfrontCore/Views/Admin/BanManagement.cshtml
Normal file
@ -0,0 +1,66 @@
|
||||
@model IEnumerable<WebfrontCore.QueryHelpers.Models.BanInfo>
|
||||
|
||||
<div class="content mt-0">
|
||||
<h2 class="content-title mt-20 mb-10">@ViewBag.Title</h2>
|
||||
@if (!Model.Any())
|
||||
{
|
||||
<div class="text-muted mb-10">Search for records...</div>
|
||||
}
|
||||
<form method="get" class="mt-10">
|
||||
<div class="d-flex flex-column flex-md-row">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control bg-dark-dm bg-light-ex-lm" id="clientNameInput" name="clientName" value="@ViewBag.ClientName" placeholder="Client Name">
|
||||
<div class="input-group-append">
|
||||
<button class="btn bg-dark-dm bg-light-ex-lm" type="submit">
|
||||
<i class="oi oi-magnifying-glass"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="input-group mr-md-5 ml-md-10 mt-10 mb-5 mt-md-0 mb-md-0">
|
||||
<input type="text" class="form-control bg-dark-dm bg-light-ex-lm" id="clientGuidInput" name="clientGuid" value="@ViewBag.ClientGuid" placeholder="Client GUID">
|
||||
<div class="input-group-append">
|
||||
<button class="btn bg-dark-dm bg-light-ex-lm" type="submit">
|
||||
<i class="oi oi-magnifying-glass"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mr-md-10 ml-md-5 mb-10 mt-5 mt-md-0 mb-md-0">
|
||||
<input type="text" class="form-control bg-dark-dm bg-light-ex-lm" id="clientIPInput" name="clientIP" value="@ViewBag.ClientIP" placeholder="Client IP">
|
||||
<div class="input-group-append">
|
||||
<button class="btn bg-dark-dm bg-light-ex-lm" type="submit">
|
||||
<i class="oi oi-magnifying-glass"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<input type="number" class="form-control bg-dark-dm bg-light-ex-lm" id="clientIdInput" name="clientId" value="@ViewBag.ClientId" placeholder="Client Id">
|
||||
<div class="input-group-append">
|
||||
<button class="btn bg-dark-dm bg-light-ex-lm" type="submit">
|
||||
<i class="oi oi-magnifying-glass"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div id="ban_entry_list">
|
||||
<partial name="_BanEntries" for="@Model"/>
|
||||
</div>
|
||||
|
||||
@if (Model.Any())
|
||||
{
|
||||
<div class="w-full text-center">
|
||||
<i id="loaderLoad" class="oi oi-chevron-bottom mt-10 loader-load-more text-primary m-auto" aria-hidden="true"></i>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@section scripts {
|
||||
<script>
|
||||
initLoader('/Admin/BanManagementList', '#ban_entry_list', 10, 10, [{ 'name': 'clientIP', 'value': () => $('#clientIPInput').val() },
|
||||
{ 'name': 'clientGuid', 'value': () => $('#clientGuidInput').val() },
|
||||
{ 'name': 'clientName', 'value': () => $('#clientNameInput').val() },
|
||||
{ 'name': 'clientId', 'value': () => $('#clientIdInput').val() }]);
|
||||
</script>
|
||||
}
|
63
WebfrontCore/Views/Admin/_BanEntries.cshtml
Normal file
63
WebfrontCore/Views/Admin/_BanEntries.cshtml
Normal file
@ -0,0 +1,63 @@
|
||||
@model IEnumerable<WebfrontCore.QueryHelpers.Models.BanInfo>
|
||||
|
||||
@foreach (var ban in Model)
|
||||
{
|
||||
if (ban.AttachedPenalty is null && !ban.AssociatedPenalties.Any())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
<div class="card p-10 m-0 mt-15 mb-15">
|
||||
<div class="d-flex flex-row flex-wrap">
|
||||
<div class="d-flex p-15 mr-md-10 w-full w-md-200 bg-very-dark-dm bg-light-ex-lm rounded">
|
||||
<div class="align-self-center ">
|
||||
<a asp-controller="Client" asp-action="Profile" asp-route-id="@ban.ClientId" class="font-size-18 no-decoration">@ban.ClientName</a>
|
||||
<has-permission entity="ClientGuid" required-permission="Read">
|
||||
<div class="text-muted">@ban.NetworkId.ToString("X")</div>
|
||||
</has-permission>
|
||||
<has-permission entity="ClientIPAddress" required-permission="Read">
|
||||
<div class="text-muted">@ban.IPAddress.ConvertIPtoString()</div>
|
||||
</has-permission>
|
||||
@if (ban.AttachedPenalty is not null)
|
||||
{
|
||||
<br/>
|
||||
<div class="text-muted font-weight-light">@ban.AttachedPenalty.Offense.CapClientName(30)</div>
|
||||
<div class="text-danger font-weight-light">@ban.AttachedPenalty.DateTime.ToStandardFormat()</div>
|
||||
<div class="btn profile-action mt-10 w-100" data-action="unban" data-action-id="@ban.ClientId">Unban</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<br/>
|
||||
<div class="align-self-end text-muted font-weight-light">
|
||||
<span class="oi oi-warning font-size-12"></span>
|
||||
<span>Link-Only Ban</span>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@foreach (var associatedEntity in ban.AssociatedPenalties)
|
||||
{
|
||||
<div class="d-flex flex-wrap flex-column w-full w-md-200 p-10">
|
||||
<div data-toggle="tooltip" data-title="Linked via shared IP" class="d-flex">
|
||||
<i class="oi oi-link-intact align-self-center"></i>
|
||||
<div class="text-truncate ml-5 mr-5">
|
||||
<a asp-controller="Client" asp-action="Profile" asp-route-id="@associatedEntity.OffenderInfo.ClientId" class="font-size-18 no-decoration">@associatedEntity.OffenderInfo.ClientName</a>
|
||||
</div>
|
||||
</div>
|
||||
<has-permission entity="ClientGuid" required-permission="Read">
|
||||
<div class="text-muted">@associatedEntity.OffenderInfo.NetworkId?.ToString("X")</div>
|
||||
</has-permission>
|
||||
<has-permission entity="ClientIPAddress" required-permission="Read">
|
||||
<div class="text-muted">@associatedEntity.OffenderInfo.IPAddress.ConvertIPtoString()</div>
|
||||
</has-permission>
|
||||
<br/>
|
||||
<div class="text-muted font-weight-light">@associatedEntity.Offense.CapClientName(30)</div>
|
||||
<div class="text-danger font-weight-light">@associatedEntity.DateTime.ToStandardFormat()</div>
|
||||
<div class="btn profile-action mt-10 w-100" data-action="unban" data-action-id="@associatedEntity.OffenderInfo.ClientId">Unban</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
@model WebfrontCore.ViewModels.TableInfo
|
||||
@using WebfrontCore.ViewModels
|
||||
@model WebfrontCore.ViewModels.TableInfo
|
||||
@{
|
||||
Layout = null;
|
||||
}
|
||||
@ -17,7 +18,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@{ var start = 0;}
|
||||
@{ var start = 0; }
|
||||
@if (!Model.Rows.Any())
|
||||
{
|
||||
<!-- desktop -->
|
||||
@ -35,15 +36,40 @@
|
||||
@foreach (var row in Model.Rows)
|
||||
{
|
||||
<!-- desktop -->
|
||||
<tr class="bg-dark-dm bg-light-lm @(Model.InitialRowCount > 0 && start >= Model.InitialRowCount ? "d-none hidden-row-lg": "d-none d-lg-table-row")">
|
||||
<tr class="bg-dark-dm bg-light-lm @(Model.InitialRowCount > 0 && start >= Model.InitialRowCount ? "d-none hidden-row-lg" : "d-none d-lg-table-row")">
|
||||
@for (var i = 0; i < Model.Columns.Count; i++)
|
||||
{
|
||||
<td>@row.Datum[i]</td>
|
||||
var data = row.Datum[i];
|
||||
<td>
|
||||
@if (data.Template is null)
|
||||
{
|
||||
if (data.Type == ColumnType.Text)
|
||||
{
|
||||
<span>@data.Value</span>
|
||||
}
|
||||
if (data.Type == ColumnType.Link)
|
||||
{
|
||||
<a href="@data.Data" class="no-decoration">@data.Value</a>
|
||||
}
|
||||
if (data.Type == ColumnType.Icon)
|
||||
{
|
||||
<span class="oi @data.Value profile-action" data-action="@data.Data" data-action-id="@data.Id"></span>
|
||||
}
|
||||
if (data.Type == ColumnType.Button)
|
||||
{
|
||||
<div class="btn profile-action" data-action="@data.Data" data-action-id="@data.Id">@data.Value</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@data.Template
|
||||
}
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
|
||||
<!-- mobile -->
|
||||
<tr class="@(Model.InitialRowCount > 0 && start >= Model.InitialRowCount ? "d-none hidden-row": "d-flex d-table-row d-lg-none")">
|
||||
<tr class="@(Model.InitialRowCount > 0 && start >= Model.InitialRowCount ? "d-none hidden-row" : "d-flex d-table-row d-lg-none")">
|
||||
<td class="bg-primary text-light text-right w-125">
|
||||
@foreach (var column in Model.Columns)
|
||||
{
|
||||
@ -53,7 +79,21 @@
|
||||
<td class="bg-dark-dm bg-light-lm flex-fill w-200">
|
||||
@for (var i = 0; i < Model.Columns.Count; i++)
|
||||
{
|
||||
<div class="mt-5 mb-5 text-truncate" style="min-width:0">@row.Datum[i]</div>
|
||||
var data = row.Datum[i];
|
||||
<div class="mt-5 mb-5 text-truncate" style="min-width:0">
|
||||
@if (data.Type == ColumnType.Text)
|
||||
{
|
||||
<span>@data.Value</span>
|
||||
}
|
||||
@if (data.Type == ColumnType.Link)
|
||||
{
|
||||
<a href="@data.Data">@data.Value</a>
|
||||
}
|
||||
@if (data.Type == ColumnType.Icon)
|
||||
{
|
||||
<span class="oi @data.Value profile-action" data-action="@data.Data" data-action-id="@data.Id"></span>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -115,30 +115,35 @@
|
||||
<span class="name">@ViewBag.Localization["WEBFRONT_NAV_CONSOLE"]</span>
|
||||
</a>
|
||||
</has-permission>
|
||||
@if (ViewBag.User.Level >= EFClient.Permission.Owner)
|
||||
{
|
||||
<a asp-controller="Configuration" asp-action="Edit" class="sidebar-link">
|
||||
<i class="oi oi-cog mr-5"></i>
|
||||
<span class="name">Configuration</span>
|
||||
</a>
|
||||
}
|
||||
<has-permission entity="AuditPage" required-permission="Read">
|
||||
<a asp-controller="Admin" asp-action="AuditLog" class="sidebar-link">
|
||||
<i class="oi oi-book mr-5"></i>
|
||||
<span class="name">@ViewBag.Localization["WEBFRONT_NAV_AUDIT_LOG"]</span>
|
||||
</a>
|
||||
</has-permission>
|
||||
<has-permission entity="RecentPlayersPage" required-permission="Read">
|
||||
<a class="sidebar-link profile-action" href="#actionModal" data-action="RecentClients" title="@ViewBag.Localization["WEBFRONT_ACTION_RECENT_CLIENTS"]">
|
||||
<i class="oi oi-timer mr-5"></i>
|
||||
<span class="name">@ViewBag.Localization["WEBFRONT_ACTION_RECENT_CLIENTS"]</span>
|
||||
</a>
|
||||
</has-permission>
|
||||
<a class="sidebar-link profile-action" href="#actionModal" data-action="GenerateLoginToken" data-response-duration="30000" title="@ViewBag.Localization["WEBFRONT_ACTION_TOKEN"]">
|
||||
<i class="oi oi-key mr-5"></i>
|
||||
<span class="name">@ViewBag.Localization["WEBFRONT_ACTION_TOKEN"]</span>
|
||||
<has-permission entity="Penalty" required-permission="Read"></has-permission>
|
||||
<a asp-controller="Admin" asp-action="BanManagement" class="sidebar-link">
|
||||
<i class="oi oi-ban mr-5"></i>
|
||||
<span class="name">Ban Management</span>
|
||||
</a>
|
||||
</has-permission>
|
||||
@if (ViewBag.User.Level >= EFClient.Permission.Owner)
|
||||
{
|
||||
<a asp-controller="Configuration" asp-action="Edit" class="sidebar-link">
|
||||
<i class="oi oi-cog mr-5"></i>
|
||||
<span class="name">Configuration</span>
|
||||
</a>
|
||||
}
|
||||
<has-permission entity="AuditPage" required-permission="Read">
|
||||
<a asp-controller="Admin" asp-action="AuditLog" class="sidebar-link">
|
||||
<i class="oi oi-book mr-5"></i>
|
||||
<span class="name">@ViewBag.Localization["WEBFRONT_NAV_AUDIT_LOG"]</span>
|
||||
</a>
|
||||
</has-permission>
|
||||
<has-permission entity="RecentPlayersPage" required-permission="Read">
|
||||
<a class="sidebar-link profile-action" href="#actionModal" data-action="RecentClients" title="@ViewBag.Localization["WEBFRONT_ACTION_RECENT_CLIENTS"]">
|
||||
<i class="oi oi-timer mr-5"></i>
|
||||
<span class="name">@ViewBag.Localization["WEBFRONT_ACTION_RECENT_CLIENTS"]</span>
|
||||
</a>
|
||||
</has-permission>
|
||||
<a class="sidebar-link profile-action" href="#actionModal" data-action="GenerateLoginToken" data-response-duration="30000" title="@ViewBag.Localization["WEBFRONT_ACTION_TOKEN"]">
|
||||
<i class="oi oi-key mr-5"></i>
|
||||
<span class="name">@ViewBag.Localization["WEBFRONT_ACTION_TOKEN"]</span>
|
||||
</a>
|
||||
@if (ViewBag.Authorized)
|
||||
{
|
||||
<a asp-controller="Account" asp-action="Logout" class="sidebar-link">
|
||||
|
Reference in New Issue
Block a user