user.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. Email string
  15. }
  16. func NewUser(id *ID, level UserLevel, alterIdCount uint16, email string) *User {
  17. u := &User{
  18. ID: id,
  19. Level: level,
  20. Email: email,
  21. }
  22. if alterIdCount > 0 {
  23. u.AlterIDs = make([]*ID, alterIdCount)
  24. prevId := id.UUID()
  25. for idx := range u.AlterIDs {
  26. newid := prevId.Next()
  27. // TODO: check duplicate
  28. u.AlterIDs[idx] = NewID(newid)
  29. prevId = newid
  30. }
  31. }
  32. return u
  33. }
  34. func (this *User) AnyValidID() *ID {
  35. if len(this.AlterIDs) == 0 {
  36. return this.ID
  37. }
  38. return this.AlterIDs[dice.Roll(len(this.AlterIDs))]
  39. }
  40. type UserSettings struct {
  41. PayloadReadTimeout int
  42. }
  43. func GetUserSettings(level UserLevel) UserSettings {
  44. settings := UserSettings{
  45. PayloadReadTimeout: 120,
  46. }
  47. if level > 0 {
  48. settings.PayloadReadTimeout = 0
  49. }
  50. return settings
  51. }
  52. type Account interface {
  53. CryptionKey() []byte
  54. }