53 lines
2.3 KiB
C#
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/<site_key>/。会通过 /info 下发给前端。</summary>
|
|
public string ApiEndpoint { get; set; } = "";
|
|
|
|
/// <summary>本服务调用 siteverify 的地址,形如 https://cap.example.com/<site_key>/siteverify。可以是内网地址。</summary>
|
|
public string SiteverifyUrl { get; set; } = "";
|
|
|
|
/// <summary>Cap 站点密钥对应的 secret,只在服务端使用,不得下发给前端。</summary>
|
|
public string Secret { get; set; } = "";
|
|
|
|
public int TimeoutSeconds { get; set; } = 5;
|
|
}
|