48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package auxhttp
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"errors"
|
|
"strings"
|
|
)
|
|
|
|
func ParseAuthBasicHeader(header string) (string, string, error) {
|
|
var err error
|
|
var username string
|
|
var password string
|
|
|
|
authData := strings.SplitN(header, " ", 2)
|
|
if len(authData) < 2 {
|
|
err = errors.New("Wrong authentification header")
|
|
return username, password, err
|
|
}
|
|
authType := strings.TrimSpace(authData[0])
|
|
if authType != "Basic" {
|
|
err = errors.New("Authentification type is different from basic")
|
|
return username, password, err
|
|
}
|
|
authPair := strings.TrimSpace(authData[1])
|
|
|
|
pairEncoded, err := base64.StdEncoding.DecodeString(authPair)
|
|
if err != nil {
|
|
return username, password, err
|
|
}
|
|
pair := strings.SplitN(string(pairEncoded), ":", 2)
|
|
if len(pair) < 2 {
|
|
err = errors.New("Wrong authentification pair")
|
|
return username, password, err
|
|
}
|
|
username = strings.TrimSpace(pair[0])
|
|
password = strings.TrimSpace(pair[1])
|
|
|
|
if username == "" {
|
|
err = errors.New("autentification username is null")
|
|
return username, password, err
|
|
}
|
|
if password == "" {
|
|
err = errors.New("autentification password is null")
|
|
return username, password, err
|
|
}
|
|
return username, password, err
|
|
}
|