66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
|
package auth
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// UserParser Parses a string and return a userName/userHash. An error if the format of the string is incorrect.
|
||
|
type UserParser func(user string) (string, string, error)
|
||
|
|
||
|
const (
|
||
|
defaultRealm = "traefik"
|
||
|
authorizationHeader = "Authorization"
|
||
|
)
|
||
|
|
||
|
func getUsers(fileName string, appendUsers []string, parser UserParser) (map[string]string, error) {
|
||
|
users, err := loadUsers(fileName, appendUsers)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
userMap := make(map[string]string)
|
||
|
for _, user := range users {
|
||
|
userName, userHash, err := parser(user)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
userMap[userName] = userHash
|
||
|
}
|
||
|
|
||
|
return userMap, nil
|
||
|
}
|
||
|
|
||
|
func loadUsers(fileName string, appendUsers []string) ([]string, error) {
|
||
|
var users []string
|
||
|
var err error
|
||
|
|
||
|
if fileName != "" {
|
||
|
users, err = getLinesFromFile(fileName)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return append(users, appendUsers...), nil
|
||
|
}
|
||
|
|
||
|
func getLinesFromFile(filename string) ([]string, error) {
|
||
|
dat, err := ioutil.ReadFile(filename)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
// Trim lines and filter out blanks
|
||
|
rawLines := strings.Split(string(dat), "\n")
|
||
|
var filteredLines []string
|
||
|
for _, rawLine := range rawLines {
|
||
|
line := strings.TrimSpace(rawLine)
|
||
|
if line != "" {
|
||
|
filteredLines = append(filteredLines, line)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return filteredLines, nil
|
||
|
}
|