mirror of
https://github.com/empayre/fleet.git
synced 2024-11-06 17:05:18 +00:00
42 lines
1011 B
Go
42 lines
1011 B
Go
// Package token enables setting and reading
|
|
// authentication token contexts
|
|
package token
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
type key int
|
|
|
|
const tokenKey key = 0
|
|
|
|
// Token is the concrete type that represents Fleet session tokens
|
|
type Token string
|
|
|
|
// FromHTTPRequest extracts an Authorization
|
|
// from an HTTP header if present.
|
|
func FromHTTPRequest(r *http.Request) Token {
|
|
headers := r.Header.Get("Authorization")
|
|
headerParts := strings.Split(headers, " ")
|
|
if len(headerParts) != 2 || strings.ToUpper(headerParts[0]) != "BEARER" {
|
|
return ""
|
|
}
|
|
return Token(headerParts[1])
|
|
}
|
|
|
|
// NewContext returns a new context carrying the Authorization Bearer token.
|
|
func NewContext(ctx context.Context, token Token) context.Context {
|
|
if token == "" {
|
|
return ctx
|
|
}
|
|
return context.WithValue(ctx, tokenKey, token)
|
|
}
|
|
|
|
// FromContext extracts the Authorization Bearer token if present.
|
|
func FromContext(ctx context.Context) (Token, bool) {
|
|
token, ok := ctx.Value(tokenKey).(Token)
|
|
return token, ok
|
|
}
|