diff --git a/proxy/vmess/inbound/inbound.go b/proxy/vmess/inbound/inbound.go index 5f32b1231..68a3c93dd 100644 --- a/proxy/vmess/inbound/inbound.go +++ b/proxy/vmess/inbound/inbound.go @@ -32,13 +32,9 @@ type userByEmail struct { defaultAlterIDs uint16 } -func newUserByEmail(users []*protocol.User, config *DefaultConfig) *userByEmail { - cache := make(map[string]*protocol.User) - for _, user := range users { - cache[strings.ToLower(user.Email)] = user - } +func newUserByEmail(config *DefaultConfig) *userByEmail { return &userByEmail{ - cache: cache, + cache: make(map[string]*protocol.User), defaultLevel: config.Level, defaultAlterIDs: uint16(config.AlterId), } @@ -119,7 +115,7 @@ func New(ctx context.Context, config *Config) (*Handler, error) { inboundHandlerManager: v.InboundHandlerManager(), clients: vmess.NewTimedUserValidator(protocol.DefaultIDHash), detours: config.Detour, - usersByEmail: newUserByEmail(config.User, config.GetDefaultValue()), + usersByEmail: newUserByEmail(config.GetDefaultValue()), sessionHistory: encoding.NewSessionHistory(), } @@ -156,13 +152,16 @@ func (h *Handler) GetUser(email string) *protocol.User { } func (h *Handler) AddUser(ctx context.Context, user *protocol.User) error { - if !h.usersByEmail.Add(user) { + if len(user.Email) > 0 && !h.usersByEmail.Add(user) { return newError("User ", user.Email, " already exists.") } return h.clients.Add(user) } func (h *Handler) RemoveUser(ctx context.Context, email string) error { + if len(email) == 0 { + return newError("Email must not be empty.") + } if !h.usersByEmail.Remove(email) { return newError("User ", email, " not found.") }