github.com/influxdata/influxdb/v2@v2.7.6/http/tokens.go (about) 1 package http 2 3 import ( 4 "errors" 5 "fmt" 6 "net/http" 7 "strings" 8 ) 9 10 const ( 11 tokenScheme = "Token " 12 bearerScheme = "Bearer " 13 ) 14 15 // errors 16 var ( 17 ErrAuthHeaderMissing = errors.New("authorization Header is missing") 18 ErrAuthBadScheme = errors.New("authorization Header Scheme is invalid") 19 ) 20 21 // GetToken will parse the token from http Authorization Header. 22 func GetToken(r *http.Request) (string, error) { 23 header := r.Header.Get("Authorization") 24 if header == "" { 25 return "", ErrAuthHeaderMissing 26 } 27 28 if len(header) >= len(tokenScheme) && 29 strings.EqualFold(header[:len(tokenScheme)], tokenScheme) { 30 return header[len(tokenScheme):], nil 31 } else if len(header) > len(bearerScheme) && 32 strings.EqualFold(header[:len(bearerScheme)], bearerScheme) { 33 return header[len(bearerScheme):], nil 34 } 35 36 return "", ErrAuthBadScheme 37 } 38 39 // SetToken adds the token to the request. 40 func SetToken(token string, req *http.Request) { 41 req.Header.Set("Authorization", fmt.Sprintf("%s%s", tokenScheme, token)) 42 }