user_json.go 892 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // +build json
  2. package vmess
  3. import (
  4. "encoding/json"
  5. "github.com/v2ray/v2ray-core/common/uuid"
  6. )
  7. func (u *User) UnmarshalJSON(data []byte) error {
  8. type rawUser struct {
  9. IdString string `json:"id"`
  10. EmailString string `json:"email"`
  11. LevelInt int `json:"level"`
  12. AlterIdCount uint16 `json:"alterId"`
  13. }
  14. var rawUserValue rawUser
  15. if err := json.Unmarshal(data, &rawUserValue); err != nil {
  16. return err
  17. }
  18. id, err := uuid.ParseString(rawUserValue.IdString)
  19. if err != nil {
  20. return err
  21. }
  22. u.ID = NewID(id)
  23. //u.Email = rawUserValue.EmailString
  24. u.Level = UserLevel(rawUserValue.LevelInt)
  25. if rawUserValue.AlterIdCount > 0 {
  26. prevId := u.ID.UUID()
  27. // TODO: check duplicate
  28. u.AlterIDs = make([]*ID, rawUserValue.AlterIdCount)
  29. for idx, _ := range u.AlterIDs {
  30. newid := prevId.Next()
  31. u.AlterIDs[idx] = NewID(newid)
  32. prevId = newid
  33. }
  34. }
  35. return nil
  36. }