mirror of https://github.com/XTLS/Xray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.4 KiB
70 lines
1.4 KiB
package log |
|
|
|
import ( |
|
"context" |
|
"strings" |
|
|
|
"github.com/xtls/xray-core/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("from") |
|
builder.WriteByte(' ') |
|
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 |
|
}
|
|
|