tls_acme.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package option
  2. import (
  3. C "github.com/sagernet/sing-box/constant"
  4. E "github.com/sagernet/sing/common/exceptions"
  5. "github.com/sagernet/sing/common/json"
  6. )
  7. type InboundACMEOptions struct {
  8. Domain Listable[string] `json:"domain,omitempty"`
  9. DataDirectory string `json:"data_directory,omitempty"`
  10. DefaultServerName string `json:"default_server_name,omitempty"`
  11. Email string `json:"email,omitempty"`
  12. Provider string `json:"provider,omitempty"`
  13. DisableHTTPChallenge bool `json:"disable_http_challenge,omitempty"`
  14. DisableTLSALPNChallenge bool `json:"disable_tls_alpn_challenge,omitempty"`
  15. AlternativeHTTPPort uint16 `json:"alternative_http_port,omitempty"`
  16. AlternativeTLSPort uint16 `json:"alternative_tls_port,omitempty"`
  17. ExternalAccount *ACMEExternalAccountOptions `json:"external_account,omitempty"`
  18. DNS01Challenge *ACMEDNS01ChallengeOptions `json:"dns01_challenge,omitempty"`
  19. }
  20. type ACMEExternalAccountOptions struct {
  21. KeyID string `json:"key_id,omitempty"`
  22. MACKey string `json:"mac_key,omitempty"`
  23. }
  24. type _ACMEDNS01ChallengeOptions struct {
  25. Provider string `json:"provider,omitempty"`
  26. AliDNSOptions ACMEDNS01AliDNSOptions `json:"-"`
  27. CloudflareOptions ACMEDNS01CloudflareOptions `json:"-"`
  28. }
  29. type ACMEDNS01ChallengeOptions _ACMEDNS01ChallengeOptions
  30. func (o ACMEDNS01ChallengeOptions) MarshalJSON() ([]byte, error) {
  31. var v any
  32. switch o.Provider {
  33. case C.DNSProviderAliDNS:
  34. v = o.AliDNSOptions
  35. case C.DNSProviderCloudflare:
  36. v = o.CloudflareOptions
  37. case "":
  38. return nil, E.New("missing provider type")
  39. default:
  40. return nil, E.New("unknown provider type: " + o.Provider)
  41. }
  42. return MarshallObjects((_ACMEDNS01ChallengeOptions)(o), v)
  43. }
  44. func (o *ACMEDNS01ChallengeOptions) UnmarshalJSON(bytes []byte) error {
  45. err := json.Unmarshal(bytes, (*_ACMEDNS01ChallengeOptions)(o))
  46. if err != nil {
  47. return err
  48. }
  49. var v any
  50. switch o.Provider {
  51. case C.DNSProviderAliDNS:
  52. v = &o.AliDNSOptions
  53. case C.DNSProviderCloudflare:
  54. v = &o.CloudflareOptions
  55. default:
  56. return E.New("unknown provider type: " + o.Provider)
  57. }
  58. err = UnmarshallExcluded(bytes, (*_ACMEDNS01ChallengeOptions)(o), v)
  59. if err != nil {
  60. return err
  61. }
  62. return nil
  63. }
  64. type ACMEDNS01AliDNSOptions struct {
  65. AccessKeyID string `json:"access_key_id,omitempty"`
  66. AccessKeySecret string `json:"access_key_secret,omitempty"`
  67. RegionID string `json:"region_id,omitempty"`
  68. }
  69. type ACMEDNS01CloudflareOptions struct {
  70. APIToken string `json:"api_token,omitempty"`
  71. }