Clash.Meta/listener/sing/context.go

32 lines
727 B
Go
Raw Normal View History

package sing
import (
"context"
"golang.org/x/exp/slices"
2023-11-03 21:01:45 +08:00
"github.com/metacubex/mihomo/adapter/inbound"
"github.com/sagernet/sing/common/auth"
)
type contextKey string
var ctxKeyAdditions = contextKey("Additions")
func WithAdditions(ctx context.Context, additions ...inbound.Addition) context.Context {
return context.WithValue(ctx, ctxKeyAdditions, additions)
}
2023-10-11 22:54:19 +08:00
func getAdditions(ctx context.Context) (additions []inbound.Addition) {
if v := ctx.Value(ctxKeyAdditions); v != nil {
if a, ok := v.([]inbound.Addition); ok {
2023-10-11 22:54:19 +08:00
additions = a
}
}
if user, ok := auth.UserFromContext[string](ctx); ok {
2023-10-11 22:54:19 +08:00
additions = slices.Clone(additions)
additions = append(additions, inbound.WithInUser(user))
}
2023-10-11 22:54:19 +08:00
return
}