mirror of
https://github.com/spacebarchat/server.git
synced 2026-03-30 07:30:00 +00:00
C#: db config model
This commit is contained in:
@@ -4,8 +4,8 @@ namespace Spacebar.ConfigModel;
|
||||
|
||||
public class DefaultsConfiguration
|
||||
{
|
||||
[JsonPropertyName("guild")] public GuildDefaults Guild = new GuildDefaults();
|
||||
[JsonPropertyName("user")] public ChannelDefaults Channel = new ChannelDefaults();
|
||||
[JsonPropertyName("guild")] public GuildDefaults Guild = new();
|
||||
[JsonPropertyName("user")] public ChannelDefaults Channel = new();
|
||||
}
|
||||
|
||||
public class GuildDefaults
|
||||
|
||||
@@ -3,10 +3,187 @@ using System.Text.Json.Serialization;
|
||||
namespace Spacebar.ConfigModel;
|
||||
|
||||
public class LimitsConfiguration {
|
||||
[JsonPropertyName("user")] public UserLimits User = new UserLimits();
|
||||
[JsonPropertyName("guild")] public GuildLimits Guild = new GuildLimits();
|
||||
[JsonPropertyName("message")] public MessageLimits Message = new MessageLimits();
|
||||
[JsonPropertyName("channel")] public ChannelLimits Channel = new ChannelLimits();
|
||||
[JsonPropertyName("rate")] public RateLimits Rate = new RateLimits();
|
||||
[JsonPropertyName("absoluteRate")] public GlobalRateLimits AbsoluteRate = new GlobalRateLimits();
|
||||
[JsonPropertyName("user")]
|
||||
public UserLimits User { get; set; } = new UserLimits();
|
||||
|
||||
[JsonPropertyName("guild")]
|
||||
public GuildLimits Guild { get; set; } = new GuildLimits();
|
||||
|
||||
[JsonPropertyName("message")]
|
||||
public MessageLimits Message { get; set; } = new MessageLimits();
|
||||
|
||||
[JsonPropertyName("channel")]
|
||||
public ChannelLimits Channel { get; set; } = new ChannelLimits();
|
||||
|
||||
[JsonPropertyName("rate")]
|
||||
public RateLimits Rate { get; set; } = new RateLimits();
|
||||
|
||||
[JsonPropertyName("absoluteRate")]
|
||||
public GlobalRateLimits AbsoluteRate { get; set; } = new GlobalRateLimits();
|
||||
}
|
||||
|
||||
public class GlobalRateLimits {
|
||||
[JsonPropertyName("register")]
|
||||
public GlobalRateLimit Register { get; set; } = new() {
|
||||
Enabled = true,
|
||||
Count = 25,
|
||||
Window = 60 * 60 * 1000
|
||||
};
|
||||
|
||||
[JsonPropertyName("sendMessage")]
|
||||
public GlobalRateLimit SendMessage { get; set; } = new() {
|
||||
Enabled = true,
|
||||
Count = 200,
|
||||
Window = 60 * 1000
|
||||
};
|
||||
|
||||
public class GlobalRateLimit : RateLimits.RateLimitOptions {
|
||||
[JsonPropertyName("enabled")]
|
||||
public bool Enabled { get; set; } = true;
|
||||
}
|
||||
}
|
||||
|
||||
public class RateLimits {
|
||||
[JsonPropertyName("enabled")]
|
||||
public bool Enabled { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("ip")]
|
||||
public RateLimitOptions Ip { get; set; } = new RateLimitOptions() {
|
||||
Count = 500,
|
||||
Window = 5
|
||||
};
|
||||
|
||||
[JsonPropertyName("global")]
|
||||
public RateLimitOptions Global { get; set; } = new RateLimitOptions() {
|
||||
Count = 250,
|
||||
Window = 5
|
||||
};
|
||||
|
||||
[JsonPropertyName("error")]
|
||||
public RateLimitOptions Error { get; set; } = new RateLimitOptions() {
|
||||
Count = 50,
|
||||
Window = 5
|
||||
};
|
||||
|
||||
[JsonPropertyName("routes")]
|
||||
public RouteRateLimits Routes { get; set; } = new RouteRateLimits();
|
||||
|
||||
public class RouteRateLimits {
|
||||
[JsonPropertyName("guild")]
|
||||
public RateLimitOptions Guild { get; set; } = new RateLimitOptions() {
|
||||
Count = 5,
|
||||
Window = 5
|
||||
};
|
||||
|
||||
[JsonPropertyName("webhook")]
|
||||
public RateLimitOptions Webhook { get; set; } = new RateLimitOptions() {
|
||||
Count = 10,
|
||||
Window = 5
|
||||
};
|
||||
|
||||
[JsonPropertyName("channel")]
|
||||
public RateLimitOptions Channel { get; set; } = new RateLimitOptions() {
|
||||
Count = 10,
|
||||
Window = 5
|
||||
};
|
||||
|
||||
[JsonPropertyName("auth")]
|
||||
public AuthRateLimits Auth { get; set; } = new AuthRateLimits();
|
||||
|
||||
public class AuthRateLimits {
|
||||
[JsonPropertyName("login")]
|
||||
public RateLimitOptions Login { get; set; } = new RateLimitOptions() {
|
||||
Count = 5,
|
||||
Window = 60
|
||||
};
|
||||
|
||||
[JsonPropertyName("register")]
|
||||
public RateLimitOptions Register { get; set; } = new RateLimitOptions() {
|
||||
Count = 2,
|
||||
Window = 60 * 60 * 12
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class RateLimitOptions {
|
||||
[JsonPropertyName("count")]
|
||||
public int Count { get; set; }
|
||||
|
||||
[JsonPropertyName("window")]
|
||||
public int Window { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public TimeSpan WindowTimeSpan => TimeSpan.FromSeconds(Window);
|
||||
}
|
||||
}
|
||||
|
||||
public class ChannelLimits {
|
||||
[JsonPropertyName("maxPins")]
|
||||
public int MaxPins { get; set; } = 500;
|
||||
|
||||
[JsonPropertyName("maxTopic")]
|
||||
public int MaxTopic { get; set; } = 1024;
|
||||
|
||||
[JsonPropertyName("maxWebhooks")]
|
||||
public int MaxWebhooks { get; set; } = 100;
|
||||
}
|
||||
|
||||
public class MessageLimits {
|
||||
[JsonPropertyName("maxCharacters")]
|
||||
public int MaxCharacters { get; set; } = 1048576;
|
||||
|
||||
[JsonPropertyName("maxTTSCharacters")]
|
||||
public int MaxTTSCharacters { get; set; } = 160;
|
||||
|
||||
[JsonPropertyName("maxReactions")]
|
||||
public int MaxReactions { get; set; } = 2048;
|
||||
|
||||
[JsonPropertyName("maxAttachmentSize")]
|
||||
public int MaxAttachmentSize { get; set; } = 1024 * 1024 * 1024;
|
||||
|
||||
[JsonPropertyName("maxBulkDelete")]
|
||||
public int MaxBulkDelete { get; set; } = 1000;
|
||||
|
||||
[JsonPropertyName("maxEmbedDownloadSize")]
|
||||
public int MaxEmbedDownloadSize { get; set; } = 1024 * 1024 * 1024;
|
||||
|
||||
[JsonPropertyName("maxPreloadCount")]
|
||||
public int MaxPreloadCount { get; set; } = 100;
|
||||
}
|
||||
|
||||
public class GuildLimits {
|
||||
[JsonPropertyName("maxRoles")]
|
||||
public int MaxRoles { get; set; } = 1000;
|
||||
|
||||
[JsonPropertyName("maxEmojis")]
|
||||
public int MaxEmojis { get; set; } = 2000;
|
||||
|
||||
[JsonPropertyName("maxStickers")]
|
||||
public int MaxStickers { get; set; } = 500;
|
||||
|
||||
[JsonPropertyName("maxMembers")]
|
||||
public int MaxMembers { get; set; } = 25000000;
|
||||
|
||||
[JsonPropertyName("maxChannels")]
|
||||
public int MaxChannels { get; set; } = 65535;
|
||||
|
||||
[JsonPropertyName("maxBulkBanUsers")]
|
||||
public int MaxBulkBanUsers { get; set; } = 200;
|
||||
|
||||
[JsonPropertyName("maxChannelsInCategory")]
|
||||
public int MaxChannelsInCategory { get; set; } = 65536;
|
||||
}
|
||||
|
||||
public class UserLimits {
|
||||
[JsonPropertyName("maxGuilds")]
|
||||
public int MaxGuilds { get; set; } = 1048576;
|
||||
|
||||
[JsonPropertyName("maxUsername")]
|
||||
public int MaxUsername { get; set; } = 32;
|
||||
|
||||
[JsonPropertyName("maxFriends")]
|
||||
public int MaxFriends { get; set; } = 5000;
|
||||
|
||||
[JsonPropertyName("maxBio")]
|
||||
public int MaxBio { get; set; } = 190;
|
||||
}
|
||||
@@ -2,25 +2,82 @@ using System.Text.Json.Serialization;
|
||||
|
||||
namespace Spacebar.ConfigModel;
|
||||
|
||||
public class SecurityConfiguration
|
||||
{
|
||||
[JsonPropertyName("captcha")] public CaptchaConfiguration Captcha = new CaptchaConfiguration();
|
||||
[JsonPropertyName("twoFactor")] public TwoFactorConfiguration TwoFactor = new TwoFactorConfiguration();
|
||||
[JsonPropertyName("autoUpdate")] public bool AutoUpdate = true;
|
||||
[JsonPropertyName("requestSignature")] public string RequestSignature; // = crypto.randomBytes(32).toString("base64");
|
||||
[JsonPropertyName("jwtSecret")] public string? JwtSecret = null;
|
||||
[JsonPropertyName("forwardedFor")] public string? ForwardedFor = null;
|
||||
[JsonPropertyName("trustedProxies")] public string TrustedProxies = null;
|
||||
[JsonPropertyName("abuseIpDbApiKey")] public string? AbuseIpDbApiKey = null;
|
||||
[JsonPropertyName("abuseipdbBlacklistRatelimit")] public int AbuseipdbBlacklistRatelimit = 5;
|
||||
[JsonPropertyName("abuseipdbConfidenceScoreTreshold")] public int AbuseipdbConfidenceScoreTreshold = 50;
|
||||
[JsonPropertyName("ipdataApiKey")] public string? IpdataApiKey = null;
|
||||
[JsonPropertyName("mfaBackupCodeCount")] public int MfaBackupCodeCount = 10;
|
||||
[JsonPropertyName("statsWorldReadable")] public bool StatsWorldReadable = true;
|
||||
[JsonPropertyName("defaultRegistrationTokenExpiration")] public int DefaultRegistrationTokenExpiration = 1000 * 60 * 60 * 24 * 7;
|
||||
[JsonPropertyName("cdnSignUrls")] public bool CdnSignUrls = false;
|
||||
[JsonPropertyName("cdnSignatureKey")] public string CdnSignatureKey = crypto.randomBytes(32).toString("base64");
|
||||
[JsonPropertyName("cdnSignatureDuration")] public string CdnSignatureDuration = "24h";
|
||||
[JsonPropertyName("cdnSignatureIncludeIp")] public bool CdnSignatureIncludeIp = true;
|
||||
[JsonPropertyName("cdnSignatureIncludeUserAgent")] public bool CdnSignatureIncludeUserAgent = true;
|
||||
public class SecurityConfiguration {
|
||||
[JsonPropertyName("captcha")]
|
||||
public CaptchaConfiguration Captcha { get; set; } = new();
|
||||
|
||||
[JsonPropertyName("twoFactor")]
|
||||
public TwoFactorConfiguration TwoFactor { get; set; } = new();
|
||||
|
||||
[JsonPropertyName("autoUpdate")]
|
||||
public bool AutoUpdate { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("requestSignature")] public string RequestSignature; // {get;set;}=crypto.randomBytes(32).toString("base64");
|
||||
|
||||
[JsonPropertyName("jwtSecret")]
|
||||
public string? JwtSecret { get; set; } = null;
|
||||
|
||||
[JsonPropertyName("forwardedFor")]
|
||||
public string? ForwardedFor { get; set; } = null;
|
||||
|
||||
[JsonPropertyName("trustedProxies")]
|
||||
public string TrustedProxies { get; set; } = null;
|
||||
|
||||
[JsonPropertyName("abuseIpDbApiKey")]
|
||||
public string? AbuseIpDbApiKey { get; set; } = null;
|
||||
|
||||
[JsonPropertyName("abuseipdbBlacklistRatelimit")]
|
||||
public int AbuseipdbBlacklistRatelimit { get; set; } = 5;
|
||||
|
||||
[JsonPropertyName("abuseipdbConfidenceScoreTreshold")]
|
||||
public int AbuseipdbConfidenceScoreTreshold { get; set; } = 50;
|
||||
|
||||
[JsonPropertyName("ipdataApiKey")]
|
||||
public string? IpdataApiKey { get; set; } = null;
|
||||
|
||||
[JsonPropertyName("mfaBackupCodeCount")]
|
||||
public int MfaBackupCodeCount { get; set; } = 10;
|
||||
|
||||
[JsonPropertyName("statsWorldReadable")]
|
||||
public bool StatsWorldReadable { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("defaultRegistrationTokenExpiration")]
|
||||
public int DefaultRegistrationTokenExpiration { get; set; } = 1000 * 60 * 60 * 24 * 7;
|
||||
|
||||
[JsonPropertyName("cdnSignUrls")]
|
||||
public bool CdnSignUrls { get; set; } = false;
|
||||
|
||||
[JsonPropertyName("cdnSignatureKey")]
|
||||
public string CdnSignatureKey { get; set; } = null!; // crypto.randomBytes(32).toString("base64");
|
||||
|
||||
[JsonPropertyName("cdnSignatureDuration")]
|
||||
public string CdnSignatureDuration { get; set; } = "24h";
|
||||
|
||||
[JsonPropertyName("cdnSignatureIncludeIp")]
|
||||
public bool CdnSignatureIncludeIp { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("cdnSignatureIncludeUserAgent")]
|
||||
public bool CdnSignatureIncludeUserAgent { get; set; } = true;
|
||||
}
|
||||
|
||||
public class CaptchaConfiguration {
|
||||
[JsonPropertyName("enabled")]
|
||||
public bool Enabled { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// One of: null, recaptcha, hcaptcha
|
||||
/// </summary>
|
||||
[JsonPropertyName("service")]
|
||||
public string Service { get; set; } = "none";
|
||||
|
||||
[JsonPropertyName("sitekey")]
|
||||
public string? SiteKey { get; set; } = null;
|
||||
|
||||
[JsonPropertyName("secret")]
|
||||
public string? Secret { get; set; } = null;
|
||||
}
|
||||
|
||||
public class TwoFactorConfiguration {
|
||||
[JsonPropertyName("generateBackupCodes")]
|
||||
public bool GenerateBackupCodes { get; set; } = true;
|
||||
}
|
||||
@@ -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 GeneralConfiguration {
|
||||
[JsonPropertyName("instanceName")] public string InstanceName = "Spacebar Instance";
|
||||
public class RegisterConfiguration {
|
||||
[JsonPropertyName("email")]
|
||||
public RegistrationEmailConfiguration Email { get; set; } = new RegistrationEmailConfiguration();
|
||||
|
||||
[JsonPropertyName("instanceDescription")]
|
||||
public string? InstanceDescription = "This is a Spacebar instance made in the pre-release days";
|
||||
[JsonPropertyName("dateOfBirth")]
|
||||
public DateOfBirthConfiguration DateOfBirth { get; set; } = new DateOfBirthConfiguration();
|
||||
|
||||
[JsonPropertyName("frontPage")] public string? FrontPage = null;
|
||||
[JsonPropertyName("tosPage")] public string? TosPage = null;
|
||||
[JsonPropertyName("password")]
|
||||
public PasswordConfiguration Password { get; set; } = new PasswordConfiguration();
|
||||
|
||||
[JsonPropertyName("correspondenceEmail")]
|
||||
public string? CorrespondenceEmail = null;
|
||||
[JsonPropertyName("disabled")]
|
||||
public bool Disabled { get; set; } = false;
|
||||
|
||||
[JsonPropertyName("correspondenceUserID")]
|
||||
public string? CorrespondenceUserId = null;
|
||||
[JsonPropertyName("requireCaptcha")]
|
||||
public bool RequireCaptcha { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("image")] public string? Image = null;
|
||||
[JsonPropertyName("instanceId")] public string InstanceId = Snowflake.generate();
|
||||
[JsonPropertyName("requireInvite")]
|
||||
public bool RequireInvite { get; set; } = false;
|
||||
|
||||
[JsonPropertyName("autoCreateBotUsers")]
|
||||
public bool AutoCreateBotUsers = 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 PasswordConfiguration {
|
||||
[JsonPropertyName("required")]
|
||||
public bool Required { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("minLength")]
|
||||
public int MinLength { get; set; } = 8;
|
||||
|
||||
[JsonPropertyName("minNumbers")]
|
||||
public int MinNumbers { get; set; } = 2;
|
||||
|
||||
[JsonPropertyName("minUpperCase")]
|
||||
public int MinUpperCase { get; set; } = 2;
|
||||
|
||||
[JsonPropertyName("minSymbols")]
|
||||
public int MinSymbols { get; set; } = 0;
|
||||
}
|
||||
|
||||
public class DateOfBirthConfiguration {
|
||||
[JsonPropertyName("required")]
|
||||
public bool Required { get; set; } = true;
|
||||
|
||||
[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("maxSize")] public int MaxSize = 10 * 1024 * 1024; // 10 MB
|
||||
[JsonPropertyName("maxWidth")]
|
||||
public int MaxWidth { get; set; } = 8192;
|
||||
|
||||
[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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user