kops/vendor/github.com/scaleway/scaleway-sdk-go/internal/auth/jwt.go

56 lines
1.2 KiB
Go

package auth
import (
"net/http"
"strings"
)
// JWT is the session token used in browser.
type JWT struct {
Token string
}
// XSessionTokenHeader is Scaleway auth header for browser
const XSessionTokenHeader = "x-session-token" // #nosec G101
// NewJWT create a token authentication from a jwt
func NewJWT(token string) *JWT {
return &JWT{Token: token}
}
// Headers returns headers that must be added to the http request
func (j *JWT) Headers() http.Header {
headers := http.Header{}
headers.Set(XSessionTokenHeader, j.Token)
return headers
}
func AnonymizeJWTHeaders(headers http.Header) http.Header {
token := headers.Get(XSessionTokenHeader)
if token != "" {
headers.Set(XSessionTokenHeader, HideJWT(token))
}
return headers
}
// AnonymizedHeaders returns an anonymized version of Headers()
// This method could be used for logging purpose.
func (j *JWT) AnonymizedHeaders() http.Header {
return AnonymizeJWTHeaders(j.Headers())
}
func HideJWT(token string) string {
if len(token) == 0 {
return ""
}
// token should be (header).(payload).(signature)
lastDot := strings.LastIndex(token, ".")
if lastDot != -1 {
token = token[:lastDot]
}
return token
}