access.go 1.3 KB

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