summary refs log tree commit diff
path: root/extra/admin-api/Spacebar.ConfigModel/ServerConfiguration.cs
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-12-25 23:01:27 +0100
committerRory& <root@rory.gay>2025-12-25 23:01:27 +0100
commita75c38ff2a4bc87adcdd668b0f17daf645c68252 (patch)
tree03d8a6ba5c88f0673d156a52e5dd7ded44d5282d /extra/admin-api/Spacebar.ConfigModel/ServerConfiguration.cs
parentDrop unused metrics configuration (diff)
downloadserver-ts-a75c38ff2a4bc87adcdd668b0f17daf645c68252.tar.xz
C#: db config model
Diffstat (limited to '')
-rw-r--r--extra/admin-api/Spacebar.ConfigModel/ServerConfiguration.cs383
1 files changed, 324 insertions, 59 deletions
diff --git a/extra/admin-api/Spacebar.ConfigModel/ServerConfiguration.cs b/extra/admin-api/Spacebar.ConfigModel/ServerConfiguration.cs

index 49309ab1..2ea107b8 100644 --- a/extra/admin-api/Spacebar.ConfigModel/ServerConfiguration.cs +++ b/extra/admin-api/Spacebar.ConfigModel/ServerConfiguration.cs
@@ -3,49 +3,197 @@ namespace Spacebar.ConfigModel; public class ServerConfiguration { - [JsonPropertyName("admin")] public EndpointConfiguration Admin = new EndpointConfiguration(); - [JsonPropertyName("gateway")] public EndpointConfiguration Gateway = new EndpointConfiguration(); - [JsonPropertyName("cdn")] public CdnConfiguration Cdn = new CdnConfiguration(); - [JsonPropertyName("api")] public ApiConfiguration Api = new ApiConfiguration(); - [JsonPropertyName("general")] public GeneralConfiguration General = new GeneralConfiguration(); - [JsonPropertyName("limits")] public LimitsConfiguration Limits = new LimitsConfiguration(); - [JsonPropertyName("security")] public SecurityConfiguration Security = new SecurityConfiguration(); - [JsonPropertyName("login")] public LoginConfiguration Login = new LoginConfiguration(); - [JsonPropertyName("register")] public RegisterConfiguration Register = new RegisterConfiguration(); - [JsonPropertyName("regions")] public RegionConfiguration Regions = new RegionConfiguration(); - [JsonPropertyName("guild")] public GuildConfiguration Guild = new GuildConfiguration(); - [JsonPropertyName("gif")] public GifConfiguration Gif = new GifConfiguration(); - [JsonPropertyName("rabbitmq")] public RabbitMQConfiguration Rabbitmq = new RabbitMQConfiguration(); - [JsonPropertyName("kafka")] public KafkaConfiguration Kafka = new KafkaConfiguration(); - [JsonPropertyName("templates")] public TemplateConfiguration Templates = new TemplateConfiguration(); - [JsonPropertyName("metrics")] public MetricsConfiguration Metrics = new MetricsConfiguration(); - [JsonPropertyName("defaults")] public DefaultsConfiguration Defaults = new DefaultsConfiguration(); - [JsonPropertyName("external")] public ExternalTokensConfiguration External = new ExternalTokensConfiguration(); - [JsonPropertyName("email")] public EmailConfiguration Email = new EmailConfiguration(); - [JsonPropertyName("passwordReset")] public PasswordResetConfiguration PasswordReset = new PasswordResetConfiguration(); - [JsonPropertyName("user")] public UserConfiguration User = new UserConfiguration(); + [JsonPropertyName("admin")] + public EndpointConfiguration Admin { get; set; } = new(); + + [JsonPropertyName("gateway")] + public EndpointConfiguration Gateway { get; set; } = new(); + + [JsonPropertyName("cdn")] + public CdnConfiguration Cdn { get; set; } = new(); + + [JsonPropertyName("api")] + public ApiConfiguration Api { get; set; } = new(); + + [JsonPropertyName("general")] + public GeneralConfiguration General { get; set; } = new(); + + [JsonPropertyName("limits")] + public LimitsConfiguration Limits { get; set; } = new(); + + [JsonPropertyName("security")] + public SecurityConfiguration Security { get; set; } = new(); + + [JsonPropertyName("login")] + public LoginConfiguration Login { get; set; } = new(); + + [JsonPropertyName("register")] + public RegisterConfiguration Register { get; set; } = new RegisterConfiguration(); + + [JsonPropertyName("regions")] + public RegionConfiguration Regions { get; set; } = new(); + + [JsonPropertyName("guild")] + public GuildConfiguration Guild { get; set; } = new(); + + [JsonPropertyName("gif")] + public GifConfiguration Gif { get; set; } = new GifConfiguration(); + + [JsonPropertyName("rabbitmq")] + public RabbitMQConfiguration Rabbitmq { get; set; } = new RabbitMQConfiguration(); + + [JsonPropertyName("templates")] + public TemplateConfiguration Templates { get; set; } = new TemplateConfiguration(); + + [JsonPropertyName("defaults")] + public DefaultsConfiguration Defaults { get; set; } = new(); + + [JsonPropertyName("external")] + public ExternalTokensConfiguration External { get; set; } = new(); + + // TODO: lazy + // [JsonPropertyName("email")] + // public EmailConfiguration Email { get; set; } = new EmailConfiguration(); + + [JsonPropertyName("passwordReset")] + public PasswordResetConfiguration PasswordReset { get; set; } = new PasswordResetConfiguration(); + + [JsonPropertyName("user")] + public UserConfiguration User { get; set; } = new UserConfiguration(); +} + +public class RegisterConfiguration { + [JsonPropertyName("email")] + public RegistrationEmailConfiguration Email { get; set; } = new RegistrationEmailConfiguration(); + + [JsonPropertyName("dateOfBirth")] + public DateOfBirthConfiguration DateOfBirth { get; set; } = new DateOfBirthConfiguration(); + + [JsonPropertyName("password")] + public PasswordConfiguration Password { get; set; } = new PasswordConfiguration(); + + [JsonPropertyName("disabled")] + public bool Disabled { get; set; } = false; + + [JsonPropertyName("requireCaptcha")] + public bool RequireCaptcha { get; set; } = true; + + [JsonPropertyName("requireInvite")] + public bool RequireInvite { get; set; } = false; + + [JsonPropertyName("guestsRequireInvite")] + public bool GuestsRequireInvite { get; set; } = true; + + [JsonPropertyName("allowNewRegistration")] + public bool AllowNewRegistration { get; set; } = true; + + [JsonPropertyName("allowMultipleAccounts")] + public bool AllowMultipleAccounts { get; set; } = true; + + [JsonPropertyName("blockIpDataCoThreatTypes")] + public List<string> BlockIpDataCoThreatTypes { get; set; } = [ + "tor", "icloud_relay", "proxy", "datacenter", "anonymous", "known_attacker", "known_abuser", "threat" + ]; // matching ipdata's threat.is_* fields as of 2025/11/30, minus bogon + + [JsonPropertyName("blockAsnTypes")] + public List<string> BlockAsnTypes { get; set; } = [""]; + + [JsonPropertyName("blockAsns")] + public List<string> BlockAsns { get; set; } = [""]; + + [JsonPropertyName("blockAbuseIpDbAboveScore")] + public int BlockAbuseIpDbAboveScore { get; set; } = 75; // 0 to disable + + [JsonPropertyName("incrementingDiscriminators")] + public bool IncrementingDiscriminators { get; set; } = false; // random otherwise + + [JsonPropertyName("defaultRights")] + public string DefaultRights { get; set; } = "875069521787904"; // See `npm run generate:rights` + + [JsonPropertyName("checkIp")] + public bool CheckIp { get; set; } = true; } -public class GeneralConfiguration { - [JsonPropertyName("instanceName")] public string InstanceName = "Spacebar Instance"; +public class PasswordConfiguration { + [JsonPropertyName("required")] + public bool Required { get; set; } = true; - [JsonPropertyName("instanceDescription")] - public string? InstanceDescription = "This is a Spacebar instance made in the pre-release days"; + [JsonPropertyName("minLength")] + public int MinLength { get; set; } = 8; - [JsonPropertyName("frontPage")] public string? FrontPage = null; - [JsonPropertyName("tosPage")] public string? TosPage = null; + [JsonPropertyName("minNumbers")] + public int MinNumbers { get; set; } = 2; - [JsonPropertyName("correspondenceEmail")] - public string? CorrespondenceEmail = null; + [JsonPropertyName("minUpperCase")] + public int MinUpperCase { get; set; } = 2; - [JsonPropertyName("correspondenceUserID")] - public string? CorrespondenceUserId = null; + [JsonPropertyName("minSymbols")] + public int MinSymbols { get; set; } = 0; +} - [JsonPropertyName("image")] public string? Image = null; - [JsonPropertyName("instanceId")] public string InstanceId = Snowflake.generate(); +public class DateOfBirthConfiguration { + [JsonPropertyName("required")] + public bool Required { get; set; } = true; - [JsonPropertyName("autoCreateBotUsers")] - public bool AutoCreateBotUsers = false; + [JsonPropertyName("minimum")] + public int Minimum { get; set; } = 13; +} + +public class RegistrationEmailConfiguration { + [JsonPropertyName("required")] + public bool Required { get; set; } = false; + + [JsonPropertyName("allowlist")] + public bool Allowlist { get; set; } = false; + + [JsonPropertyName("blocklist")] + public bool Blocklist { get; set; } = false; + + [JsonPropertyName("domains")] + public List<string> Domains { get; set; } = []; +} + +public class TemplateConfiguration { + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } = true; + + [JsonPropertyName("allowTemplateCreation")] + public bool AllowTemplateCreation { get; set; } = true; + + [JsonPropertyName("allowDiscordTemplates")] + public bool AllowDiscordTemplates { get; set; } = true; + + [JsonPropertyName("allowRaws")] + public bool AllowRaws { get; set; } = true; +} + +public class PasswordResetConfiguration { + [JsonPropertyName("requireCaptcha")] + public bool RequireCaptcha { get; set; } = false; +} + +public class UserConfiguration { + [JsonPropertyName("blockedContains")] + public List<string> BlockedContains { get; set; } = []; + + [JsonPropertyName("blockedEquals")] + public List<string> BlockedEquals { get; set; } = []; +} + +public class RabbitMQConfiguration { + [JsonPropertyName("host")] + public string? Host { get; set; } = null; +} + +public class GifConfiguration { + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } = true; + + [JsonPropertyName("provider")] + public string Provider { get; set; } = "tenor"; + + [JsonPropertyName("apiKey")] + public string? ApiKey { get; set; } = "LIVDSRZULELA"; } public class EndpointConfiguration { @@ -65,42 +213,159 @@ public class ApiConfiguration : EndpointConfiguration { } public class CdnConfiguration : EndpointConfiguration { - [JsonPropertyName("resizeHeightMax")] public int ResizeHeightMax = 1000; - [JsonPropertyName("resizeWidthMax")] public int ResizeWidthMax = 1000; - [JsonPropertyName("imagorServerUrl")] public string? ImagorServerUrl = null; + [JsonPropertyName("resizeHeightMax")] + public int ResizeHeightMax { get; set; } = 1000; + + [JsonPropertyName("resizeWidthMax")] + public int ResizeWidthMax { get; set; } = 1000; + + [JsonPropertyName("imagorServerUrl")] + public string? ImagorServerUrl { get; set; } = null; [JsonPropertyName("proxyCacheHeaderSeconds")] - public int ProxyCacheHeaderSeconds = 60 * 60 * 24; + public int ProxyCacheHeaderSeconds { get; set; } = 60 * 60 * 24; [JsonPropertyName("maxAttachmentSize")] - public int MaxAttachmentSize = 25 * 1024 * 1024; // 25 MB + public int MaxAttachmentSize { get; set; } = 25 * 1024 * 1024; // 25 MB - // limits: CdnLimitsConfiguration = new CdnLimitsConfiguration(); + // limits: CdnLimitsConfiguration {get;set;}=new CdnLimitsConfiguration(); } public class CdnLimitsConfiguration { - // ordered by route register order in CDN... - [JsonPropertyName("icon")] public CdnImageLimitsConfiguration Icon = new CdnImageLimitsConfiguration(); - [JsonPropertyName("roleIcon")] public CdnImageLimitsConfiguration RoleIcon = new CdnImageLimitsConfiguration(); - [JsonPropertyName("emoji")] public CdnImageLimitsConfiguration Emoji = new CdnImageLimitsConfiguration(); - [JsonPropertyName("sticker")] public CdnImageLimitsConfiguration Sticker = new CdnImageLimitsConfiguration(); - [JsonPropertyName("banner")] public CdnImageLimitsConfiguration Banner = new CdnImageLimitsConfiguration(); - [JsonPropertyName("splash")] public CdnImageLimitsConfiguration Splash = new CdnImageLimitsConfiguration(); - [JsonPropertyName("avatar")] public CdnImageLimitsConfiguration Avatar = new CdnImageLimitsConfiguration(); - [JsonPropertyName("discoverySplash")] public CdnImageLimitsConfiguration DiscoverySplash = new CdnImageLimitsConfiguration(); - [JsonPropertyName("appIcon")] public CdnImageLimitsConfiguration AppIcon = new CdnImageLimitsConfiguration(); - [JsonPropertyName("discoverSplash")] public CdnImageLimitsConfiguration DiscoverSplash = new CdnImageLimitsConfiguration(); //what even is this? - [JsonPropertyName("teamIcon")] public CdnImageLimitsConfiguration TeamIcon = new CdnImageLimitsConfiguration(); - [JsonPropertyName("channelIcon")] public CdnImageLimitsConfiguration ChannelIcon = new CdnImageLimitsConfiguration(); // is this even used? - [JsonPropertyName("guildAvatar")] public CdnImageLimitsConfiguration GuildAvatar = new CdnImageLimitsConfiguration(); + [JsonPropertyName("icon")] + public CdnImageLimitsConfiguration Icon { get; set; } = new(); + + [JsonPropertyName("roleIcon")] + public CdnImageLimitsConfiguration RoleIcon { get; set; } = new(); + + [JsonPropertyName("emoji")] + public CdnImageLimitsConfiguration Emoji { get; set; } = new(); + + [JsonPropertyName("sticker")] + public CdnImageLimitsConfiguration Sticker { get; set; } = new(); + + [JsonPropertyName("banner")] + public CdnImageLimitsConfiguration Banner { get; set; } = new(); + + [JsonPropertyName("splash")] + public CdnImageLimitsConfiguration Splash { get; set; } = new(); + + [JsonPropertyName("avatar")] + public CdnImageLimitsConfiguration Avatar { get; set; } = new(); + + [JsonPropertyName("discoverySplash")] + public CdnImageLimitsConfiguration DiscoverySplash { get; set; } = new(); + + [JsonPropertyName("appIcon")] + public CdnImageLimitsConfiguration AppIcon { get; set; } = new(); + + [JsonPropertyName("discoverSplash")] + public CdnImageLimitsConfiguration DiscoverSplash { get; set; } = new(); //what even is this? + + [JsonPropertyName("teamIcon")] + public CdnImageLimitsConfiguration TeamIcon { get; set; } = new(); + + [JsonPropertyName("channelIcon")] + public CdnImageLimitsConfiguration ChannelIcon { get; set; } = new(); // is this even used? + + [JsonPropertyName("guildAvatar")] + public CdnImageLimitsConfiguration GuildAvatar { get; set; } = new(); } public class CdnImageLimitsConfiguration { - [JsonPropertyName("maxHeight")] public int MaxHeight = 8192; - [JsonPropertyName("maxWidth")] public int MaxWidth = 8192; + [JsonPropertyName("maxHeight")] + public int MaxHeight { get; set; } = 8192; + + [JsonPropertyName("maxWidth")] + public int MaxWidth { get; set; } = 8192; - [JsonPropertyName("maxSize")] public int MaxSize = 10 * 1024 * 1024; // 10 MB + [JsonPropertyName("maxSize")] + public int MaxSize { get; set; } = 10 * 1024 * 1024; // 10 MB // "always" | "never" | "premium" - [JsonPropertyName("allowAnimated")] public string AllowAnimated = "always"; + [JsonPropertyName("allowAnimated")] + public string AllowAnimated { get; set; } = "always"; +} + +public class LoginConfiguration { + [JsonPropertyName("requireCaptcha")] + public bool RequireCaptcha { get; set; } = false; + + [JsonPropertyName("requireVerification")] + public bool RequireVerification { get; set; } = false; +} + +public class RegionConfiguration { + [JsonPropertyName("default")] + public string Default { get; set; } = "spacebar-central"; + + [JsonPropertyName("useDefaultAsOptimal")] + public bool UseDefaultAsOptimal { get; set; } = true; + + [JsonPropertyName("available")] + public List<Region> Available { get; set; } = []; + + public class Region { + [JsonPropertyName("id")] + public string Id { get; set; } = null!; + + [JsonPropertyName("name")] + public string Name { get; set; } = null!; + + [JsonPropertyName("endpoint")] + public string Endpoint { get; set; } = null!; + + [JsonPropertyName("vip")] + public bool Vip { get; set; } = false; + + [JsonPropertyName("custom")] + public bool Custom { get; set; } = false; + + [JsonPropertyName("deprecated")] + public bool Deprecated { get; set; } = false; + } +} + +public class ExternalTokensConfiguration { + [JsonPropertyName("twitter")] + public string? Twitter { get; set; } = null; +} + +public class GuildConfiguration { + [JsonPropertyName("defaultFeatures")] + public List<string> DefaultFeatures { get; set; } = []; + + [JsonPropertyName("autoJoin")] + public GuildAutoJoinConfiguration AutoJoin { get; set; } = new(); + + [JsonPropertyName("discovery")] + public GuildDiscoveryConfiguration Discovery { get; set; } = new(); + + public class GuildDiscoveryConfiguration { + [JsonPropertyName("showAllGuilds")] + public bool ShowAllGuilds { get; set; } = false; + + [JsonPropertyName("useRecommendation")] + public bool UseRecommendation { get; set; } = false; + + [JsonPropertyName("offset")] + public int Offset { get; set; } = 0; + + [JsonPropertyName("limit")] + public int Limit { get; set; } = 24; + } + + public class GuildAutoJoinConfiguration { + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } = false; + + [JsonPropertyName("guilds")] + public List<string> Guilds { get; set; } = []; + + [JsonPropertyName("canLeave")] + public bool CanLeave { get; set; } = true; + + [JsonPropertyName("bots")] + public bool Bots { get; set; } = false; + } } \ No newline at end of file