Iceshrimp.NET/Iceshrimp.Backend/Controllers/Mastodon/Schemas/InstanceInfoV2Response.cs
2024-02-21 04:07:27 +01:00

48 lines
No EOL
2.2 KiB
C#

using Iceshrimp.Backend.Core.Configuration;
using J = System.Text.Json.Serialization.JsonPropertyNameAttribute;
namespace Iceshrimp.Backend.Controllers.Mastodon.Schemas;
public class InstanceInfoV2Response(Config config)
{
[J("version")] public string Version => $"4.2.1 (compatible; Iceshrimp.NET/{config.Instance.Version})";
[J("source_url")] public string SourceUrl => "https://iceshrimp.dev/iceshrimp/iceshrimp.net";
[J("domain")] public string AccountDomain => config.Instance.AccountDomain;
[J("title")] public string InstanceName => config.Instance.AccountDomain;
[J("description")] public string Description => $"{config.Instance.AccountDomain} on Iceshrimp.NET";
[J("registrations")] public InstanceRegistrations Registrations => new(config.Security);
[J("configuration")] public InstanceConfigurationV2 Configuration => new(config.Instance);
[J("usage")] public required InstanceUsage Usage { get; set; }
//TODO: add the rest
}
public class InstanceConfigurationV2(Config.InstanceSection config)
{
[J("accounts")] public InstanceAccountsConfiguration Accounts => new();
[J("statuses")] public InstanceStatusesConfiguration Statuses => new(config.CharacterLimit);
[J("media_attachments")] public InstanceMediaConfiguration Media => new();
[J("polls")] public InstancePollConfiguration Polls => new();
[J("reactions")] public InstanceReactionConfiguration Reactions => new();
[J("urls")] public InstanceUrls Urls => new(config);
}
public class InstanceRegistrations(Config.SecuritySection config)
{
[J("enabled")] public bool Enabled => config.Registrations > Enums.Registrations.Closed;
[J("approval_required")] public bool ApprovalRequired => config.Registrations < Enums.Registrations.Open;
[J("message")] public string? Message => null;
[J("url")] public string? Url => null;
}
public class InstanceUsage
{
[J("users")] public required InstanceUsersUsage Users { get; set; }
}
public class InstanceUsersUsage
{
[J("active_month")] public required long ActiveMonth { get; set; }
}