Files
sing-box-extended-mirror/option/tls_acme.go
T

115 lines
4.1 KiB
Go
Raw Normal View History

2022-08-24 17:04:15 +08:00
package option
2023-09-16 21:37:22 +08:00
import (
2026-07-24 18:15:14 +08:00
"reflect"
2023-09-16 21:37:22 +08:00
C "github.com/sagernet/sing-box/constant"
2026-07-24 18:15:14 +08:00
"github.com/sagernet/sing-box/schema"
2023-09-16 21:37:22 +08:00
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/common/json"
2024-11-02 00:39:02 +08:00
"github.com/sagernet/sing/common/json/badjson"
2024-11-18 18:55:34 +08:00
"github.com/sagernet/sing/common/json/badoption"
2023-09-16 21:37:22 +08:00
)
2022-08-24 17:04:15 +08:00
type InboundACMEOptions struct {
2024-11-18 18:55:34 +08:00
Domain badoption.Listable[string] `json:"domain,omitempty"`
2022-08-24 17:04:15 +08:00
DataDirectory string `json:"data_directory,omitempty"`
DefaultServerName string `json:"default_server_name,omitempty"`
Email string `json:"email,omitempty"`
Provider string `json:"provider,omitempty"`
DisableHTTPChallenge bool `json:"disable_http_challenge,omitempty"`
DisableTLSALPNChallenge bool `json:"disable_tls_alpn_challenge,omitempty"`
AlternativeHTTPPort uint16 `json:"alternative_http_port,omitempty"`
AlternativeTLSPort uint16 `json:"alternative_tls_port,omitempty"`
ExternalAccount *ACMEExternalAccountOptions `json:"external_account,omitempty"`
2023-09-16 21:37:22 +08:00
DNS01Challenge *ACMEDNS01ChallengeOptions `json:"dns01_challenge,omitempty"`
Profile string `json:"profile,omitempty"`
2022-08-24 17:04:15 +08:00
}
type ACMEExternalAccountOptions struct {
KeyID string `json:"key_id,omitempty"`
MACKey string `json:"mac_key,omitempty"`
}
2023-09-16 21:37:22 +08:00
type _ACMEDNS01ChallengeOptions struct {
2026-07-24 18:15:14 +08:00
Provider string `json:"provider,omitempty" enum:"alidns,cloudflare,acmedns"`
2023-09-16 21:37:22 +08:00
AliDNSOptions ACMEDNS01AliDNSOptions `json:"-"`
CloudflareOptions ACMEDNS01CloudflareOptions `json:"-"`
2026-01-17 06:52:43 -06:00
ACMEDNSOptions ACMEDNS01ACMEDNSOptions `json:"-"`
2023-09-16 21:37:22 +08:00
}
type ACMEDNS01ChallengeOptions _ACMEDNS01ChallengeOptions
func (o ACMEDNS01ChallengeOptions) MarshalJSON() ([]byte, error) {
var v any
switch o.Provider {
case C.DNSProviderAliDNS:
v = o.AliDNSOptions
case C.DNSProviderCloudflare:
v = o.CloudflareOptions
2026-01-17 06:52:43 -06:00
case C.DNSProviderACMEDNS:
v = o.ACMEDNSOptions
2023-12-05 19:09:13 +08:00
case "":
return nil, E.New("missing provider type")
2023-09-16 21:37:22 +08:00
default:
return nil, E.New("unknown provider type: " + o.Provider)
}
2026-08-21 12:38:09 +08:00
return badjson.MarshallObjects(_ACMEDNS01ChallengeOptions(o), v)
2023-09-16 21:37:22 +08:00
}
func (o *ACMEDNS01ChallengeOptions) UnmarshalJSON(bytes []byte) error {
err := json.Unmarshal(bytes, (*_ACMEDNS01ChallengeOptions)(o))
if err != nil {
return err
}
var v any
switch o.Provider {
case C.DNSProviderAliDNS:
v = &o.AliDNSOptions
case C.DNSProviderCloudflare:
v = &o.CloudflareOptions
2026-01-17 06:52:43 -06:00
case C.DNSProviderACMEDNS:
v = &o.ACMEDNSOptions
2023-09-16 21:37:22 +08:00
default:
return E.New("unknown provider type: " + o.Provider)
}
2024-11-02 00:39:02 +08:00
err = badjson.UnmarshallExcluded(bytes, (*_ACMEDNS01ChallengeOptions)(o), v)
2023-09-16 21:37:22 +08:00
if err != nil {
return err
2023-09-16 21:37:22 +08:00
}
return nil
}
2026-07-24 18:15:14 +08:00
func acmeDNS01Variants() []schema.UnionVariant {
return []schema.UnionVariant{
{Value: C.DNSProviderAliDNS, StructType: reflect.TypeFor[ACMEDNS01AliDNSOptions]()},
{Value: C.DNSProviderCloudflare, StructType: reflect.TypeFor[ACMEDNS01CloudflareOptions]()},
{Value: C.DNSProviderACMEDNS, StructType: reflect.TypeFor[ACMEDNS01ACMEDNSOptions]()},
}
}
func (o ACMEDNS01ChallengeOptions) DescribeSchema(builder schema.Builder) (*schema.Node, error) {
return builder.Define("ACMEDNS01Challenge", func() (*schema.Node, error) {
return schema.DiscriminatedUnion(builder, "provider", true, acmeDNS01Variants(), nil)
})
}
2023-09-16 21:37:22 +08:00
type ACMEDNS01AliDNSOptions struct {
AccessKeyID string `json:"access_key_id,omitempty"`
AccessKeySecret string `json:"access_key_secret,omitempty"`
RegionID string `json:"region_id,omitempty"`
2025-12-21 23:11:00 +08:00
SecurityToken string `json:"security_token,omitempty"`
2023-09-16 21:37:22 +08:00
}
type ACMEDNS01CloudflareOptions struct {
2025-12-21 23:11:00 +08:00
APIToken string `json:"api_token,omitempty"`
ZoneToken string `json:"zone_token,omitempty"`
2023-09-16 21:37:22 +08:00
}
2026-01-17 06:52:43 -06:00
type ACMEDNS01ACMEDNSOptions struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
Subdomain string `json:"subdomain,omitempty"`
ServerURL string `json:"server_url,omitempty"`
}