summary refs log tree commit diff
path: root/extra/admin-api/Spacebar.AdminAPI/Controllers
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-11-24 20:24:17 +0100
committerRory& <root@rory.gay>2025-11-24 20:24:17 +0100
commiteb07c5c9560ebf3628019c169f722182e4d7f80e (patch)
tree65d9408de617e462ac9482b6fe44e1ee6f62fce4 /extra/admin-api/Spacebar.AdminAPI/Controllers
parentAdmin API: .NET 10 (diff)
downloadserver-ts-eb07c5c9560ebf3628019c169f722182e4d7f80e.tar.xz
Admin API: Check rights, require OPERATOR
Diffstat (limited to 'extra/admin-api/Spacebar.AdminAPI/Controllers')
-rw-r--r--extra/admin-api/Spacebar.AdminAPI/Controllers/GuildController.cs21
-rw-r--r--extra/admin-api/Spacebar.AdminAPI/Controllers/Media/UserMediaController.cs7
-rw-r--r--extra/admin-api/Spacebar.AdminAPI/Controllers/UserController.cs26
3 files changed, 42 insertions, 12 deletions
diff --git a/extra/admin-api/Spacebar.AdminAPI/Controllers/GuildController.cs b/extra/admin-api/Spacebar.AdminAPI/Controllers/GuildController.cs

index a15dd2598..03b38e64d 100644 --- a/extra/admin-api/Spacebar.AdminAPI/Controllers/GuildController.cs +++ b/extra/admin-api/Spacebar.AdminAPI/Controllers/GuildController.cs
@@ -1,10 +1,8 @@ -using System.Diagnostics; -using ArcaneLibs; using ArcaneLibs.Extensions; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; using RabbitMQ.Client; +using Spacebar.AdminAPI.Extensions; using Spacebar.AdminApi.Models; using Spacebar.AdminAPI.Services; using Spacebar.Db.Contexts; @@ -15,12 +13,14 @@ namespace Spacebar.AdminAPI.Controllers; [ApiController] [Route("/Guilds")] -public class GuildController(ILogger<GuildController> logger, Configuration config, RabbitMQConfiguration amqpConfig, SpacebarDbContext db, RabbitMQService mq, IServiceProvider sp, AuthenticationService authService) : ControllerBase { +public class GuildController(ILogger<GuildController> logger, Configuration config, RabbitMQConfiguration amqpConfig, SpacebarDbContext db, RabbitMQService mq, IServiceProvider sp, AuthenticationService auth) : ControllerBase { private readonly ILogger<GuildController> _logger = logger; [HttpGet] - public IAsyncEnumerable<GuildModel> Get() { - return db.Guilds.Select(x => new GuildModel { + public async IAsyncEnumerable<GuildModel> Get() { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + + var results = db.Guilds.Select(x => new GuildModel { Id = x.Id, AfkChannelId = x.AfkChannelId, AfkTimeout = x.AfkTimeout, @@ -70,16 +70,21 @@ public class GuildController(ILogger<GuildController> logger, Configuration conf BanCount = x.Bans.Count(), VoiceStateCount = x.VoiceStates.Count(), }).AsAsyncEnumerable(); + await foreach (var result in results) { + yield return result; + } } [HttpPost("{id}/force_join")] public async Task<IActionResult> ForceJoinGuild([FromBody] ForceJoinRequest request, string id) { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + var guild = await db.Guilds.FindAsync(id); if (guild == null) { return NotFound(new { entity = "Guild", id, message = "Guild not found" }); } - var userId = request.UserId ?? config.OverrideUid ?? (await authService.GetCurrentUser(Request)).Id; + var userId = request.UserId ?? config.OverrideUid ?? (await auth.GetCurrentUser(Request)).Id; var user = await db.Users.FindAsync(userId); if (user == null) { return NotFound(new { entity = "User", id = userId, message = "User not found" }); @@ -138,6 +143,8 @@ public class GuildController(ILogger<GuildController> logger, Configuration conf [HttpGet("{id}/delete")] public async IAsyncEnumerable<AsyncActionResult> DeleteUser(string id, [FromQuery] int messageDeleteChunkSize = 100) { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + var user = await db.Users.FindAsync(id); if (user == null) { Console.WriteLine($"User {id} not found"); diff --git a/extra/admin-api/Spacebar.AdminAPI/Controllers/Media/UserMediaController.cs b/extra/admin-api/Spacebar.AdminAPI/Controllers/Media/UserMediaController.cs
index a06d110bb..a4d915e5a 100644 --- a/extra/admin-api/Spacebar.AdminAPI/Controllers/Media/UserMediaController.cs +++ b/extra/admin-api/Spacebar.AdminAPI/Controllers/Media/UserMediaController.cs
@@ -1,6 +1,8 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Spacebar.AdminAPI.Extensions; using Spacebar.AdminApi.Models; +using Spacebar.AdminAPI.Services; using Spacebar.Db.Contexts; using Spacebar.Db.Models; using Spacebar.RabbitMqUtilities; @@ -9,10 +11,11 @@ namespace Spacebar.AdminAPI.Controllers.Media; [ApiController] [Route("/media/user")] -public class UserMediaController(ILogger<UserMediaController> logger, SpacebarDbContext db, RabbitMQService mq, IServiceProvider sp) : ControllerBase { - +public class UserMediaController(ILogger<UserMediaController> logger, SpacebarDbContext db, RabbitMQService mq, AuthenticationService auth, IServiceProvider sp) : ControllerBase { [HttpGet("{userId}/attachments")] public async IAsyncEnumerable<Attachment> GetAttachmentsByUser(string userId) { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + var db2 = sp.CreateScope().ServiceProvider.GetService<SpacebarDbContext>(); var attachments = db.Attachments // .IgnoreAutoIncludes() diff --git a/extra/admin-api/Spacebar.AdminAPI/Controllers/UserController.cs b/extra/admin-api/Spacebar.AdminAPI/Controllers/UserController.cs
index e4018a1ee..436c0f91f 100644 --- a/extra/admin-api/Spacebar.AdminAPI/Controllers/UserController.cs +++ b/extra/admin-api/Spacebar.AdminAPI/Controllers/UserController.cs
@@ -4,6 +4,7 @@ using ArcaneLibs.Extensions; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using RabbitMQ.Client; +using Spacebar.AdminAPI.Extensions; using Spacebar.AdminApi.Models; using Spacebar.AdminAPI.Services; using Spacebar.Db.Contexts; @@ -14,12 +15,14 @@ namespace Spacebar.AdminAPI.Controllers; [ApiController] [Route("/users")] -public class UserController(ILogger<UserController> logger, Configuration config, RabbitMQConfiguration amqpConfig, SpacebarDbContext db, RabbitMQService mq, IServiceProvider sp) : ControllerBase { +public class UserController(ILogger<UserController> logger, Configuration config, RabbitMQConfiguration amqpConfig, SpacebarDbContext db, RabbitMQService mq, IServiceProvider sp, AuthenticationService auth) : ControllerBase { private readonly ILogger<UserController> _logger = logger; [HttpGet] - public IAsyncEnumerable<UserModel> Get() { - return db.Users.Select(x => new UserModel { + public async IAsyncEnumerable<UserModel> Get() { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + + var results = db.Users.Select(x => new UserModel { Id = x.Id, Username = x.Username, Discriminator = x.Discriminator, @@ -57,10 +60,15 @@ public class UserController(ILogger<UserController> logger, Configuration config GuildCount = x.Guilds.Count, OwnedGuildCount = x.Guilds.Count(g => g.OwnerId == x.Id) }).AsAsyncEnumerable(); + + await foreach (var user in results) { + yield return user; + } } [HttpGet("meow")] public async Task Meow() { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); Console.WriteLine("meow"); ConnectionFactory factory = new ConnectionFactory(); @@ -141,6 +149,8 @@ public class UserController(ILogger<UserController> logger, Configuration config [HttpGet("{id}/delete")] public async IAsyncEnumerable<AsyncActionResult> DeleteUser(string id, [FromQuery] int messageDeleteChunkSize = 100) { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + var user = await db.Users.FindAsync(id); if (user == null) { Console.WriteLine($"User {id} not found"); @@ -248,6 +258,8 @@ public class UserController(ILogger<UserController> logger, Configuration config [HttpGet("duplicate")] public async Task<IActionResult> Duplicate() { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + var msg = db.Messages.First(); var channels = db.Channels.Select(x => new { x.Id, x.GuildId }).ToList(); int count = 1; @@ -291,6 +303,8 @@ public class UserController(ILogger<UserController> logger, Configuration config [HttpGet("duplicate/{id}")] public async Task<IActionResult> DuplicateMessage(ulong id, [FromQuery] int count = 100) { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + var msg = await db.Messages.FindAsync(id.ToString()); int createdCount = 1; while (true) { @@ -335,6 +349,8 @@ public class UserController(ILogger<UserController> logger, Configuration config [HttpGet("truncate_messages")] public async Task TruncateMessages() { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + var channels = db.Channels.Select(x => new { x.Id, x.GuildId }).ToList(); var ss = new SemaphoreSlim(12, 12); @@ -364,6 +380,8 @@ public class UserController(ILogger<UserController> logger, Configuration config } private async IAsyncEnumerable<T> AggregateAsyncEnumerablesWithoutOrder<T>(params IEnumerable<IAsyncEnumerable<T>> enumerables) { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + var enumerators = enumerables.Select(e => e.GetAsyncEnumerator()).ToList(); var tasks = enumerators.Select(e => e.MoveNextAsync().AsTask()).ToList(); @@ -439,6 +457,8 @@ public class UserController(ILogger<UserController> logger, Configuration config [HttpGet("test")] public async IAsyncEnumerable<string> Test() { + (await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR); + var factory = new ConnectionFactory { Uri = new Uri(amqpConfig.ToConnectionString()) };