@page "/admin/users"
@using Iceshrimp.Backend.Components.Admin
@using Iceshrimp.Backend.Core.Configuration
@using Iceshrimp.Backend.Core.Database.Tables
@using Microsoft.EntityFrameworkCore
@using Microsoft.Extensions.Options
@inherits AdminComponentBase
Username
Status
Actions
@foreach (var user in _users)
{
@if (Remote)
{
@@@user.Username@@@user.Host
}
else
{
@@@user.Username
}
@{
var text = "Active";
if (user.IsSuspended)
text = "Suspended";
if (user.IsAdmin)
text += ", Administrator";
if (user.IsModerator)
text += ", Moderator";
}
@text
@if (user.Id == AuthUser.Id)
{
It's you!
}
else
{
if (!user.IsSuspended)
{
Suspend
}
else
{
Unsuspend
}
| Purge
| Delete
}
}
@if (_users is [])
{
No users found.
}
else
{
@if (!Remote)
{
Listing @_count local users.
@if (Options.Value.Registrations == Enums.Registrations.Invite)
{
Registrations are invite-only.
Generate
invite!
}
else if (Options.Value.Registrations == Enums.Registrations.Open)
{
Registrations are open.
}
else
{
Registrations are closed.
}
}
else
{
Listing @_count remote users.
}
}
@if (Offset is > 0)
{
❮ Previous page
}
else
{
❮ Previous page
}
@if (_users.Length == 50)
{
Next page ❯
}
else
{
Next page ❯
}
@code {
[Inject] public required IOptionsSnapshot Options { get; set; }
[CascadingParameter] public required User AuthUser { get; set; }
[SupplyParameterFromQuery] public int? Offset { get; set; }
[SupplyParameterFromQuery] public bool Remote { get; set; }
[SupplyParameterFromQuery(Name = "q")] public string? Query { get; set; }
private User[] _users = [];
private int _count;
protected override async Task OnGet()
{
var query = Remote
? Database.Users.Where(p => p.IsRemoteUser)
.Where(p => ("@" + p.Username + "@" + p.Host).ToLower().Contains((Query ?? "").ToLower()))
.OrderBy(p => p.Username + "@" + p.Host)
: Database.Users.Where(p => p.IsLocalUser && !p.IsSystemUser)
.Where(p => ("@" + p.Username.ToLower()).Contains((Query ?? "").ToLower()))
.OrderBy(p => p.Username);
_users = await query.Skip(Offset ?? 0).Take(50).ToArrayAsync();
_count = await query.CountAsync();
}
}