1
0

inbound_settings_clients.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package service
  2. import (
  3. "encoding/json"
  4. "strings"
  5. "github.com/mhsanaei/3x-ui/v3/internal/database/model"
  6. "github.com/mhsanaei/3x-ui/v3/internal/util/common"
  7. )
  8. func ParseInboundSettingsClients(settings string) ([]model.Client, error) {
  9. trimmed := strings.TrimSpace(settings)
  10. if trimmed == "" || trimmed == "null" {
  11. return nil, common.NewError("inbound settings is empty")
  12. }
  13. var payload struct {
  14. Clients json.RawMessage `json:"clients"`
  15. }
  16. if err := json.Unmarshal([]byte(trimmed), &payload); err != nil {
  17. return nil, err
  18. }
  19. if len(payload.Clients) == 0 || string(payload.Clients) == "null" {
  20. return nil, nil
  21. }
  22. var clients []model.Client
  23. if err := json.Unmarshal(payload.Clients, &clients); err != nil {
  24. return nil, err
  25. }
  26. return clients, nil
  27. }
  28. // settingsEntriesToClients decodes the wire entries a caller has already
  29. // stamped, so a delta carries the persisted created_at / updated_at / subId
  30. // rather than the pre-stamp values the request was parsed into.
  31. func settingsEntriesToClients(entries []any) ([]model.Client, error) {
  32. if len(entries) == 0 {
  33. return nil, nil
  34. }
  35. raw, err := json.Marshal(entries)
  36. if err != nil {
  37. return nil, err
  38. }
  39. var clients []model.Client
  40. if err := json.Unmarshal(raw, &clients); err != nil {
  41. return nil, err
  42. }
  43. return clients, nil
  44. }