auth.go 802 B

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