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  }