access.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package log
  2. import (
  3. "context"
  4. "strings"
  5. "github.com/xtls/xray-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 string
  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. if len(m.Detour) > 0 {
  32. builder.WriteString(" [")
  33. builder.WriteString(m.Detour)
  34. builder.WriteByte(']')
  35. }
  36. if reason := serial.ToString(m.Reason); len(reason) > 0 {
  37. builder.WriteString(" ")
  38. builder.WriteString(reason)
  39. }
  40. if len(m.Email) > 0 {
  41. builder.WriteString(" email: ")
  42. builder.WriteString(m.Email)
  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. }