using VoidCat.Services.Strike; namespace VoidCat.Model { /// /// System settings /// public class VoidSettings { /// /// Maintenance flag /// public bool MaintenanceMode { get; init; } = false; /// /// Base site url, used for redirect urls /// public Uri SiteUrl { get; init; } /// /// Data directory to store files in /// public string DataDirectory { get; init; } = "./data"; /// /// Size in bytes to split uploads into chunks /// public ulong? UploadSegmentSize { get; init; } /// /// Max file size for upload /// public ulong? MaxFileSize { get; init; } /// /// Tor configuration /// public TorSettings? TorSettings { get; init; } /// /// JWT settings for login token signing /// public JwtSettings JwtSettings { get; init; } = new() { Issuer = "void_cat_internal", Key = "default_key_void_cat_host" }; /// /// Redis database connection string /// public string? Redis { get; init; } /// /// Strike payment service api settings /// public StrikeApiSettings? Strike { get; init; } /// /// Email server settings /// public SmtpSettings? Smtp { get; init; } /// /// CORS origins /// public List CorsOrigins { get; init; } = new(); /// /// Cloud file storage settings /// public CloudStorageSettings? CloudStorage { get; init; } /// /// Virus scanner settings /// public VirusScannerSettings? VirusScanner { get; init; } /// /// Request header to unmask in the logs, otherwise all are masked /// public IEnumerable? RequestHeadersLog { get; init; } /// /// hCaptcha settings /// public CaptchaSettings? CaptchaSettings { get; init; } /// /// Postgres database connection string /// public string? Postgres { get; init; } /// /// Prometheus server for querying metrics /// public PrometheusSettings? Prometheus { get; init; } /// /// Select where to store metadata, if not set "local-disk" will be used /// public string MetadataStore { get; init; } = "local-disk"; /// /// Select which store to use for files storage, if not set "local-disk" will be used /// public string DefaultFileStore { get; init; } = "local-disk"; /// /// Plausible Analytics endpoint url /// public PlausibleSettings? PlausibleAnalytics { get; init; } /// /// Discord application settings /// public OAuthDetails? Discord { get; init; } /// /// Google application settings /// public OAuthDetails? Google { get; init; } /// /// A list of trackers to attach to torrent files /// public List TorrentTrackers { get; init; } = new() { "wss://tracker.btorrent.xyz", "wss://tracker.openwebtorrent.com", "udp://tracker.opentrackr.org:1337/announce", "udp://tracker.openbittorrent.com:6969/announce", "http://tracker.openbittorrent.com:80/announce" }; /// /// Lightning node configuration for LNProxy services /// public LndConfig? LndConfig { get; init; } /// /// Blocked origin hostnames /// public List BlockedOrigins { get; init; } = new(); } public sealed class TorSettings { public Uri TorControl { get; init; } public string PrivateKey { get; init; } public string ControlPassword { get; init; } } public sealed class JwtSettings { public string Issuer { get; init; } public string Key { get; init; } } public sealed class SmtpSettings { public Uri? Server { get; init; } public string? Username { get; init; } public string? Password { get; init; } } public sealed class CloudStorageSettings { public S3BlobConfig[]? S3 { get; init; } } public sealed class S3BlobConfig { public string Name { get; init; } = null!; public string? AccessKey { get; init; } public string? SecretKey { get; init; } public Uri? ServiceUrl { get; init; } public string? Region { get; init; } public string? BucketName { get; init; } = "void-cat"; public bool Direct { get; init; } public bool SendChecksum { get; init; } = true; public bool DisablePayloadSigning { get; init; } } public sealed class VirusScannerSettings { public ClamAVSettings? ClamAV { get; init; } public VirusTotalConfig? VirusTotal { get; init; } } public sealed class ClamAVSettings { public Uri? Endpoint { get; init; } public long? MaxStreamSize { get; init; } } public sealed class VirusTotalConfig { public string? ApiKey { get; init; } } public sealed class CaptchaSettings { public string? SiteKey { get; init; } public string? Secret { get; init; } } public sealed class PrometheusSettings { public Uri? Url { get; init; } public string? EgressQuery { get; init; } } public sealed class PlausibleSettings { public Uri? Endpoint { get; init; } public string? Domain { get; init; } } public sealed class OAuthDetails { public string? ClientId { get; init; } public string? ClientSecret { get; init; } } public sealed class LndConfig { public string Network { get; init; } = "regtest"; public Uri Endpoint { get; init; } public string CertPath { get; init; } = null!; public string MacaroonPath { get; init; } = null!; } }