2022-08-24 09:04:15 +00:00
|
|
|
package option
|
|
|
|
|
2023-09-16 13:37:22 +00:00
|
|
|
import (
|
|
|
|
C "github.com/sagernet/sing-box/constant"
|
|
|
|
E "github.com/sagernet/sing/common/exceptions"
|
2023-12-01 12:15:11 +00:00
|
|
|
"github.com/sagernet/sing/common/json"
|
2023-09-16 13:37:22 +00:00
|
|
|
)
|
|
|
|
|
2022-08-24 09:04:15 +00:00
|
|
|
type InboundACMEOptions struct {
|
|
|
|
Domain Listable[string] `json:"domain,omitempty"`
|
|
|
|
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 13:37:22 +00:00
|
|
|
DNS01Challenge *ACMEDNS01ChallengeOptions `json:"dns01_challenge,omitempty"`
|
2022-08-24 09:04:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type ACMEExternalAccountOptions struct {
|
|
|
|
KeyID string `json:"key_id,omitempty"`
|
|
|
|
MACKey string `json:"mac_key,omitempty"`
|
|
|
|
}
|
2023-09-16 13:37:22 +00:00
|
|
|
|
|
|
|
type _ACMEDNS01ChallengeOptions struct {
|
|
|
|
Provider string `json:"provider,omitempty"`
|
|
|
|
AliDNSOptions ACMEDNS01AliDNSOptions `json:"-"`
|
|
|
|
CloudflareOptions ACMEDNS01CloudflareOptions `json:"-"`
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
2023-12-05 11:09:13 +00:00
|
|
|
case "":
|
|
|
|
return nil, E.New("missing provider type")
|
2023-09-16 13:37:22 +00:00
|
|
|
default:
|
|
|
|
return nil, E.New("unknown provider type: " + o.Provider)
|
|
|
|
}
|
|
|
|
return MarshallObjects((_ACMEDNS01ChallengeOptions)(o), v)
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
default:
|
|
|
|
return E.New("unknown provider type: " + o.Provider)
|
|
|
|
}
|
|
|
|
err = UnmarshallExcluded(bytes, (*_ACMEDNS01ChallengeOptions)(o), v)
|
|
|
|
if err != nil {
|
2023-12-01 12:15:11 +00:00
|
|
|
return err
|
2023-09-16 13:37:22 +00:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type ACMEDNS01AliDNSOptions struct {
|
|
|
|
AccessKeyID string `json:"access_key_id,omitempty"`
|
|
|
|
AccessKeySecret string `json:"access_key_secret,omitempty"`
|
|
|
|
RegionID string `json:"region_id,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type ACMEDNS01CloudflareOptions struct {
|
|
|
|
APIToken string `json:"api_token,omitempty"`
|
|
|
|
}
|