tls_fingerprint_profile.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Package model 定义服务层使用的数据模型。
  2. package model
  3. import (
  4. "time"
  5. "github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint"
  6. )
  7. // TLSFingerprintProfile TLS 指纹配置模板
  8. // 包含完整的 ClientHello 参数,用于模拟特定客户端的 TLS 握手特征
  9. type TLSFingerprintProfile struct {
  10. ID int64 `json:"id"`
  11. Name string `json:"name"`
  12. Description *string `json:"description"`
  13. EnableGREASE bool `json:"enable_grease"`
  14. CipherSuites []uint16 `json:"cipher_suites"`
  15. Curves []uint16 `json:"curves"`
  16. PointFormats []uint16 `json:"point_formats"`
  17. SignatureAlgorithms []uint16 `json:"signature_algorithms"`
  18. ALPNProtocols []string `json:"alpn_protocols"`
  19. SupportedVersions []uint16 `json:"supported_versions"`
  20. KeyShareGroups []uint16 `json:"key_share_groups"`
  21. PSKModes []uint16 `json:"psk_modes"`
  22. Extensions []uint16 `json:"extensions"`
  23. CreatedAt time.Time `json:"created_at"`
  24. UpdatedAt time.Time `json:"updated_at"`
  25. }
  26. // Validate 验证模板配置的有效性
  27. func (p *TLSFingerprintProfile) Validate() error {
  28. if p.Name == "" {
  29. return &ValidationError{Field: "name", Message: "name is required"}
  30. }
  31. return nil
  32. }
  33. // ToTLSProfile 将领域模型转换为运行时使用的 tlsfingerprint.Profile
  34. // 空切片字段会在 dialer 中 fallback 到内置默认值
  35. func (p *TLSFingerprintProfile) ToTLSProfile() *tlsfingerprint.Profile {
  36. return &tlsfingerprint.Profile{
  37. Name: p.Name,
  38. EnableGREASE: p.EnableGREASE,
  39. CipherSuites: p.CipherSuites,
  40. Curves: p.Curves,
  41. PointFormats: p.PointFormats,
  42. SignatureAlgorithms: p.SignatureAlgorithms,
  43. ALPNProtocols: p.ALPNProtocols,
  44. SupportedVersions: p.SupportedVersions,
  45. KeyShareGroups: p.KeyShareGroups,
  46. PSKModes: p.PSKModes,
  47. Extensions: p.Extensions,
  48. }
  49. }