github.com/kelleygo/clashcore@v1.0.2/component/auth/auth.go (about)

     1  package auth
     2  
     3  type Authenticator interface {
     4  	Verify(user string, pass string) bool
     5  	Users() []string
     6  }
     7  
     8  type AuthUser struct {
     9  	User string
    10  	Pass string
    11  }
    12  
    13  type inMemoryAuthenticator struct {
    14  	storage   map[string]string
    15  	usernames []string
    16  }
    17  
    18  func (au *inMemoryAuthenticator) Verify(user string, pass string) bool {
    19  	realPass, ok := au.storage[user]
    20  	return ok && realPass == pass
    21  }
    22  
    23  func (au *inMemoryAuthenticator) Users() []string { return au.usernames }
    24  
    25  func NewAuthenticator(users []AuthUser) Authenticator {
    26  	if len(users) == 0 {
    27  		return nil
    28  	}
    29  	au := &inMemoryAuthenticator{
    30  		storage:   make(map[string]string),
    31  		usernames: make([]string, 0, len(users)),
    32  	}
    33  	for _, user := range users {
    34  		au.storage[user.User] = user.Pass
    35  		au.usernames = append(au.usernames, user.User)
    36  	}
    37  	return au
    38  }