access.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package log
  2. import (
  3. "context"
  4. "strings"
  5. "context"
  6. "v2ray.com/core/common/serial"
  7. )
  8. type logKey int
  9. const (
  10. accessMessageKey logKey = iota
  11. )
  12. type AccessStatus string
  13. const (
  14. AccessAccepted = AccessStatus("accepted")
  15. AccessRejected = AccessStatus("rejected")
  16. )
  17. type AccessMessage struct {
  18. From interface{}
  19. To interface{}
  20. Status AccessStatus
  21. Reason interface{}
  22. Email string
  23. Detour string
  24. }
  25. func (m *AccessMessage) String() string {
  26. builder := strings.Builder{}
  27. builder.WriteString(serial.ToString(m.From))
  28. builder.WriteByte(' ')
  29. builder.WriteString(string(m.Status))
  30. builder.WriteByte(' ')
  31. builder.WriteString(serial.ToString(m.To))
  32. builder.WriteByte(' ')
  33. if len(m.Detour) > 0 {
  34. builder.WriteByte('[')
  35. builder.WriteString(m.Detour)
  36. builder.WriteString("] ")
  37. }
  38. builder.WriteString(serial.ToString(m.Reason))
  39. if len(m.Email) > 0 {
  40. builder.WriteString("email:")
  41. builder.WriteString(m.Email)
  42. builder.WriteByte(' ')
  43. }
  44. return builder.String()
  45. }
  46. func ContextWithAccessMessage(ctx context.Context, accessMessage *AccessMessage) context.Context {
  47. return context.WithValue(ctx, accessMessageKey, accessMessage)
  48. }
  49. func AccessMessageFromContext(ctx context.Context) *AccessMessage {
  50. if accessMessage, ok := ctx.Value(accessMessageKey).(*AccessMessage); ok {
  51. return accessMessage
  52. }
  53. return nil
  54. }