43 lines
1002 B
Go
43 lines
1002 B
Go
package http
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
tokenScheme = "Token "
|
|
bearerScheme = "Bearer "
|
|
)
|
|
|
|
// errors
|
|
var (
|
|
ErrAuthHeaderMissing = errors.New("authorization Header is missing")
|
|
ErrAuthBadScheme = errors.New("authorization Header Scheme is invalid")
|
|
)
|
|
|
|
// GetToken will parse the token from http Authorization Header.
|
|
func GetToken(r *http.Request) (string, error) {
|
|
header := r.Header.Get("Authorization")
|
|
if header == "" {
|
|
return "", ErrAuthHeaderMissing
|
|
}
|
|
|
|
if len(header) >= len(tokenScheme) &&
|
|
strings.EqualFold(header[:len(tokenScheme)], tokenScheme) {
|
|
return header[len(tokenScheme):], nil
|
|
} else if len(header) > len(bearerScheme) &&
|
|
strings.EqualFold(header[:len(bearerScheme)], bearerScheme) {
|
|
return header[len(bearerScheme):], nil
|
|
}
|
|
|
|
return "", ErrAuthBadScheme
|
|
}
|
|
|
|
// SetToken adds the token to the request.
|
|
func SetToken(token string, req *http.Request) {
|
|
req.Header.Set("Authorization", fmt.Sprintf("%s%s", tokenScheme, token))
|
|
}
|