1
0

tls_acme.go 2.8 KB

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