Files
WebDrop/server/src/WebDrop.Api/WebDropOptions.cs
T

53 lines
2.3 KiB
C#

using WebDrop.Core;
namespace WebDrop.Api;
/// <summary>配置节 "WebDrop"。环境变量形式:WebDrop__DataDir、WebDrop__Captcha__Provider ……</summary>
public sealed class WebDropOptions
{
public string DataDir { get; set; } = "data";
/// <summary>允许跨域访问的前端源。前端托管在独立域名,必须在此列出;为空则不发 CORS 头。</summary>
public string[] CorsOrigins { get; set; } = [];
/// <summary>在反向代理之后部署时开启,以便限流按真实客户端 IP 分区。注意代理本身不受信任。</summary>
public bool TrustForwardedHeaders { get; set; }
/// <summary>
/// 声明部署层已启用 HTTP/3(例如由反向代理终结 QUIC),仅用于 /info 的通告。
/// 服务端进程本身不内置 QUIC:CreateSlimBuilder 不含 HTTP/3,需要时再接入。
/// </summary>
public bool EnableHttp3 { get; set; }
public string? PasskeyRpId { get; set; }
public int RequestsPerMinute { get; set; } = 600;
public int ChannelCreatesPerMinute { get; set; } = 30;
public int ShareDraftTtlSeconds { get; set; } = 86_400;
public int SweepIntervalSeconds { get; set; } = 30;
public ServerLimits Limits { get; set; } = new();
public CaptchaOptions Captcha { get; set; } = new();
}
/// <summary>
/// 创建频道的验证码。工作量证明完全交给 Cap(https://github.com/tiagozip/cap),本项目不自己实现。
/// 选 "cap" 时需要部署一个 Cap Standalone(Docker),并在其中建一个站点密钥。
/// </summary>
public sealed class CaptchaOptions
{
/// <summary>"none"(默认,不校验)或 "cap"。</summary>
public string Provider { get; set; } = "none";
/// <summary>浏览器里的 Cap widget 连接的地址,形如 https://cap.example.com/&lt;site_key&gt;/。会通过 /info 下发给前端。</summary>
public string ApiEndpoint { get; set; } = "";
/// <summary>本服务调用 siteverify 的地址,形如 https://cap.example.com/&lt;site_key&gt;/siteverify。可以是内网地址。</summary>
public string SiteverifyUrl { get; set; } = "";
/// <summary>Cap 站点密钥对应的 secret,只在服务端使用,不得下发给前端。</summary>
public string Secret { get; set; } = "";
public int TimeoutSeconds { get; set; } = 5;
}