user.go 987 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package protocol
  2. import (
  3. "github.com/v2ray/v2ray-core/common/dice"
  4. )
  5. type UserLevel byte
  6. const (
  7. UserLevelAdmin = UserLevel(255)
  8. UserLevelUntrusted = UserLevel(0)
  9. )
  10. type User struct {
  11. ID *ID
  12. AlterIDs []*ID
  13. Level UserLevel
  14. }
  15. func NewUser(id *ID, level UserLevel, alterIdCount uint16) *User {
  16. u := &User{
  17. ID: id,
  18. Level: level,
  19. }
  20. if alterIdCount > 0 {
  21. u.AlterIDs = make([]*ID, alterIdCount)
  22. prevId := id.UUID()
  23. for idx, _ := range u.AlterIDs {
  24. newid := prevId.Next()
  25. // TODO: check duplicate
  26. u.AlterIDs[idx] = NewID(newid)
  27. prevId = newid
  28. }
  29. }
  30. return u
  31. }
  32. func (this *User) AnyValidID() *ID {
  33. if len(this.AlterIDs) == 0 {
  34. return this.ID
  35. }
  36. return this.AlterIDs[dice.Roll(len(this.AlterIDs))]
  37. }
  38. type UserSettings struct {
  39. PayloadReadTimeout int
  40. }
  41. func GetUserSettings(level UserLevel) UserSettings {
  42. settings := UserSettings{
  43. PayloadReadTimeout: 120,
  44. }
  45. if level > 0 {
  46. settings.PayloadReadTimeout = 0
  47. }
  48. return settings
  49. }