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