fix handling for empty email addresses

pull/861/head
Darien Raymond 2018-02-09 11:43:23 +01:00
parent 87ba7dd0d1
commit 05d93e5eb0
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
1 changed files with 7 additions and 8 deletions

View File

@ -32,13 +32,9 @@ type userByEmail struct {
defaultAlterIDs uint16 defaultAlterIDs uint16
} }
func newUserByEmail(users []*protocol.User, config *DefaultConfig) *userByEmail { func newUserByEmail(config *DefaultConfig) *userByEmail {
cache := make(map[string]*protocol.User)
for _, user := range users {
cache[strings.ToLower(user.Email)] = user
}
return &userByEmail{ return &userByEmail{
cache: cache, cache: make(map[string]*protocol.User),
defaultLevel: config.Level, defaultLevel: config.Level,
defaultAlterIDs: uint16(config.AlterId), defaultAlterIDs: uint16(config.AlterId),
} }
@ -119,7 +115,7 @@ func New(ctx context.Context, config *Config) (*Handler, error) {
inboundHandlerManager: v.InboundHandlerManager(), inboundHandlerManager: v.InboundHandlerManager(),
clients: vmess.NewTimedUserValidator(protocol.DefaultIDHash), clients: vmess.NewTimedUserValidator(protocol.DefaultIDHash),
detours: config.Detour, detours: config.Detour,
usersByEmail: newUserByEmail(config.User, config.GetDefaultValue()), usersByEmail: newUserByEmail(config.GetDefaultValue()),
sessionHistory: encoding.NewSessionHistory(), 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 { 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 newError("User ", user.Email, " already exists.")
} }
return h.clients.Add(user) return h.clients.Add(user)
} }
func (h *Handler) RemoveUser(ctx context.Context, email string) error { 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) { if !h.usersByEmail.Remove(email) {
return newError("User ", email, " not found.") return newError("User ", email, " not found.")
} }