diff --git a/Iceshrimp.Backend/Controllers/Mastodon/InstanceController.cs b/Iceshrimp.Backend/Controllers/Mastodon/InstanceController.cs index f15cc02c..05e8105f 100644 --- a/Iceshrimp.Backend/Controllers/Mastodon/InstanceController.cs +++ b/Iceshrimp.Backend/Controllers/Mastodon/InstanceController.cs @@ -46,7 +46,8 @@ public class InstanceController( return new InstanceInfoV1Response(config.Value, instanceName, instanceDescription, adminContact) { Stats = new InstanceStats(userCount, noteCount, instanceCount), - Pleroma = new PleromaInstanceExtensions { VapidPublicKey = vapidKey, Metadata = new InstanceMetadata() } + Pleroma = new PleromaInstanceExtensions { VapidPublicKey = vapidKey, Metadata = new InstanceMetadata() }, + Rules = await GetRules() }; } @@ -66,7 +67,8 @@ public class InstanceController( return new InstanceInfoV2Response(config.Value, instanceName, instanceDescription, adminContact) { - Usage = new InstanceUsage { Users = new InstanceUsersUsage { ActiveMonth = activeMonth } } + Usage = new InstanceUsage { Users = new InstanceUsersUsage { ActiveMonth = activeMonth } }, + Rules = await GetRules() }; } @@ -87,6 +89,17 @@ public class InstanceController( .ToListAsync(); } + [HttpGet("/api/v1/instance/rules")] + [ProducesResults(HttpStatusCode.OK)] + public async Task> GetRules() + { + return await db.Rules + .OrderBy(p => p.Order) + .ThenBy(p => p.Id) + .Select(p => new RuleEntity { Id = p.Id, Text = p.Text, Hint = p.Description }) + .ToListAsync(); + } + [HttpGet("/api/v1/instance/translation_languages")] [ProducesResults(HttpStatusCode.OK)] public Dictionary> GetTranslationLanguages() => new(); diff --git a/Iceshrimp.Backend/Controllers/Mastodon/Schemas/Entities/RuleEntity.cs b/Iceshrimp.Backend/Controllers/Mastodon/Schemas/Entities/RuleEntity.cs new file mode 100644 index 00000000..f876144c --- /dev/null +++ b/Iceshrimp.Backend/Controllers/Mastodon/Schemas/Entities/RuleEntity.cs @@ -0,0 +1,11 @@ +using Iceshrimp.Backend.Core.Database; +using J = System.Text.Json.Serialization.JsonPropertyNameAttribute; + +namespace Iceshrimp.Backend.Controllers.Mastodon.Schemas.Entities; + +public class RuleEntity : IEntity +{ + [J("id")] public required string Id { get; set; } + [J("text")] public required string Text { get; set; } + [J("hint")] public required string? Hint { get; set; } +} diff --git a/Iceshrimp.Backend/Controllers/Mastodon/Schemas/InstanceInfoV1Response.cs b/Iceshrimp.Backend/Controllers/Mastodon/Schemas/InstanceInfoV1Response.cs index 650d2045..b768e363 100644 --- a/Iceshrimp.Backend/Controllers/Mastodon/Schemas/InstanceInfoV1Response.cs +++ b/Iceshrimp.Backend/Controllers/Mastodon/Schemas/InstanceInfoV1Response.cs @@ -1,3 +1,4 @@ +using Iceshrimp.Backend.Controllers.Mastodon.Schemas.Entities; using Iceshrimp.Backend.Controllers.Pleroma.Schemas.Entities; using Iceshrimp.Backend.Core.Configuration; using Iceshrimp.Backend.Core.Extensions; @@ -37,6 +38,8 @@ public class InstanceInfoV1Response( [J("pleroma")] public required PleromaInstanceExtensions Pleroma { get; set; } + [J("rules")] public required List Rules { get; set; } + //TODO: add the rest } diff --git a/Iceshrimp.Backend/Controllers/Mastodon/Schemas/InstanceInfoV2Response.cs b/Iceshrimp.Backend/Controllers/Mastodon/Schemas/InstanceInfoV2Response.cs index 798b1e55..e43a2c64 100644 --- a/Iceshrimp.Backend/Controllers/Mastodon/Schemas/InstanceInfoV2Response.cs +++ b/Iceshrimp.Backend/Controllers/Mastodon/Schemas/InstanceInfoV2Response.cs @@ -1,3 +1,4 @@ +using Iceshrimp.Backend.Controllers.Mastodon.Schemas.Entities; using Iceshrimp.Backend.Core.Configuration; using Iceshrimp.Backend.Core.Extensions; using J = System.Text.Json.Serialization.JsonPropertyNameAttribute; @@ -26,6 +27,8 @@ public class InstanceInfoV2Response( [J("usage")] public required InstanceUsage Usage { get; set; } + [J("rules")] public required List Rules { get; set; } + //TODO: add the rest }