feat(v2): use Token authentication for InfluxDB v2

pull/5619/head
Pavel Zavora 2020-11-24 19:58:48 +01:00
parent f4db32d8a1
commit 6bb9afc296
1 changed files with 33 additions and 10 deletions

View File

@ -3,6 +3,7 @@ package influx
import (
"fmt"
"net/http"
"strings"
"time"
jwt "github.com/dgrijalva/jwt-go"
@ -21,18 +22,28 @@ type NoAuthorization struct{}
// Set does not add authorization
func (n *NoAuthorization) Set(req *http.Request) error { return nil }
// DefaultAuthorization creates either a shared JWT builder, basic auth or Noop
// DefaultAuthorization creates either a shared JWT builder, basic auth or Noop or Token authentication
func DefaultAuthorization(src *chronograf.Source) Authorizer {
// Optionally, add the shared secret JWT token creation
if src.Username != "" && src.SharedSecret != "" {
return &BearerJWT{
Username: src.Username,
SharedSecret: src.SharedSecret,
// Token authentication for InfluxDB v2
if (src.Version == "" || strings.HasPrefix(src.Version, "2.")) && src.Password != "" {
return &TokenAuth{
Token: src.Password,
}
} else if src.Username != "" && src.Password != "" {
return &BasicAuth{
Username: src.Username,
Password: src.Password,
}
if src.Username != "" {
// Optionally, add the shared secret JWT token creation
if src.SharedSecret != "" {
return &BearerJWT{
Username: src.Username,
SharedSecret: src.SharedSecret,
}
}
// use standard basic authentication
if src.Password != "" {
return &BasicAuth{
Username: src.Username,
Password: src.Password,
}
}
}
return &NoAuthorization{}
@ -50,6 +61,18 @@ func (b *BasicAuth) Set(r *http.Request) error {
return nil
}
// TokenAuth adds Authorization: Token to the request header
type TokenAuth struct {
Token string
}
// Set adds the token authentication to the request
func (a *TokenAuth) Set(r *http.Request) error {
fmt.Println("setting up token " + a.Token)
r.Header.Set("Authorization", "Token "+a.Token)
return nil
}
// BearerJWT is the default Bearer for InfluxDB
type BearerJWT struct {
Username string