origin_ca.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package option
  2. import (
  3. "strings"
  4. E "github.com/sagernet/sing/common/exceptions"
  5. "github.com/sagernet/sing/common/json"
  6. "github.com/sagernet/sing/common/json/badoption"
  7. )
  8. type CloudflareOriginCACertificateProviderOptions struct {
  9. Domain badoption.Listable[string] `json:"domain,omitempty"`
  10. DataDirectory string `json:"data_directory,omitempty"`
  11. APIToken string `json:"api_token,omitempty"`
  12. OriginCAKey string `json:"origin_ca_key,omitempty"`
  13. RequestType CloudflareOriginCARequestType `json:"request_type,omitempty"`
  14. RequestedValidity CloudflareOriginCARequestValidity `json:"requested_validity,omitempty"`
  15. HTTPClient *HTTPClientOptions `json:"http_client,omitempty"`
  16. }
  17. type CloudflareOriginCARequestType string
  18. const (
  19. CloudflareOriginCARequestTypeOriginRSA = CloudflareOriginCARequestType("origin-rsa")
  20. CloudflareOriginCARequestTypeOriginECC = CloudflareOriginCARequestType("origin-ecc")
  21. )
  22. func (t *CloudflareOriginCARequestType) UnmarshalJSON(data []byte) error {
  23. var value string
  24. err := json.Unmarshal(data, &value)
  25. if err != nil {
  26. return err
  27. }
  28. value = strings.ToLower(value)
  29. switch CloudflareOriginCARequestType(value) {
  30. case "", CloudflareOriginCARequestTypeOriginRSA, CloudflareOriginCARequestTypeOriginECC:
  31. *t = CloudflareOriginCARequestType(value)
  32. default:
  33. return E.New("unsupported Cloudflare Origin CA request type: ", value)
  34. }
  35. return nil
  36. }
  37. type CloudflareOriginCARequestValidity uint16
  38. const (
  39. CloudflareOriginCARequestValidity7 = CloudflareOriginCARequestValidity(7)
  40. CloudflareOriginCARequestValidity30 = CloudflareOriginCARequestValidity(30)
  41. CloudflareOriginCARequestValidity90 = CloudflareOriginCARequestValidity(90)
  42. CloudflareOriginCARequestValidity365 = CloudflareOriginCARequestValidity(365)
  43. CloudflareOriginCARequestValidity730 = CloudflareOriginCARequestValidity(730)
  44. CloudflareOriginCARequestValidity1095 = CloudflareOriginCARequestValidity(1095)
  45. CloudflareOriginCARequestValidity5475 = CloudflareOriginCARequestValidity(5475)
  46. )
  47. func (v *CloudflareOriginCARequestValidity) UnmarshalJSON(data []byte) error {
  48. var value uint16
  49. err := json.Unmarshal(data, &value)
  50. if err != nil {
  51. return err
  52. }
  53. switch CloudflareOriginCARequestValidity(value) {
  54. case 0,
  55. CloudflareOriginCARequestValidity7,
  56. CloudflareOriginCARequestValidity30,
  57. CloudflareOriginCARequestValidity90,
  58. CloudflareOriginCARequestValidity365,
  59. CloudflareOriginCARequestValidity730,
  60. CloudflareOriginCARequestValidity1095,
  61. CloudflareOriginCARequestValidity5475:
  62. *v = CloudflareOriginCARequestValidity(value)
  63. default:
  64. return E.New("unsupported Cloudflare Origin CA requested validity: ", value)
  65. }
  66. return nil
  67. }