2021-09-14 22:53:31 +00:00
|
|
|
package utils
|
|
|
|
|
|
|
|
import (
|
2022-03-10 11:09:12 +00:00
|
|
|
"strings"
|
|
|
|
|
2021-09-14 22:53:31 +00:00
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promauth"
|
|
|
|
)
|
|
|
|
|
2022-03-10 11:09:12 +00:00
|
|
|
// AuthConfigOptions options which helps build promauth.Config
|
|
|
|
type AuthConfigOptions func(config *promauth.HTTPClientConfig)
|
|
|
|
|
2021-09-14 22:53:31 +00:00
|
|
|
// AuthConfig returns promauth.Config based on the given params
|
2022-03-10 11:09:12 +00:00
|
|
|
func AuthConfig(filterOptions ...AuthConfigOptions) (*promauth.Config, error) {
|
|
|
|
authCfg := &promauth.HTTPClientConfig{}
|
|
|
|
for _, option := range filterOptions {
|
|
|
|
option(authCfg)
|
|
|
|
}
|
|
|
|
|
|
|
|
return authCfg.NewConfig(".")
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithBasicAuth returns AuthConfigOptions and initialized promauth.BasicAuthConfig based on given params
|
|
|
|
func WithBasicAuth(username, password, passwordFile string) AuthConfigOptions {
|
|
|
|
return func(config *promauth.HTTPClientConfig) {
|
|
|
|
if username != "" || password != "" || passwordFile != "" {
|
|
|
|
config.BasicAuth = &promauth.BasicAuthConfig{
|
|
|
|
Username: username,
|
|
|
|
Password: promauth.NewSecret(password),
|
|
|
|
PasswordFile: passwordFile,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithBearer returns AuthConfigOptions and set BearerToken or BearerTokenFile based on given params
|
|
|
|
func WithBearer(token, tokenFile string) AuthConfigOptions {
|
|
|
|
return func(config *promauth.HTTPClientConfig) {
|
|
|
|
if token != "" {
|
|
|
|
config.BearerToken = promauth.NewSecret(token)
|
|
|
|
}
|
|
|
|
if tokenFile != "" {
|
|
|
|
config.BearerTokenFile = tokenFile
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithOAuth returns AuthConfigOptions and set OAuth params based on given params
|
|
|
|
func WithOAuth(clientID, clientSecret, clientSecretFile, tokenURL, scopes string) AuthConfigOptions {
|
|
|
|
return func(config *promauth.HTTPClientConfig) {
|
|
|
|
if clientSecretFile != "" || clientSecret != "" {
|
|
|
|
config.OAuth2 = &promauth.OAuth2Config{
|
|
|
|
ClientID: clientID,
|
|
|
|
ClientSecret: promauth.NewSecret(clientSecret),
|
|
|
|
ClientSecretFile: clientSecretFile,
|
|
|
|
TokenURL: tokenURL,
|
|
|
|
Scopes: strings.Split(scopes, ";"),
|
|
|
|
}
|
2021-09-14 22:53:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-07-21 11:57:53 +00:00
|
|
|
|
2022-07-21 17:39:52 +00:00
|
|
|
// WithHeaders returns AuthConfigOptions and set Headers based on the given params
|
2022-07-21 11:57:53 +00:00
|
|
|
func WithHeaders(headers string) AuthConfigOptions {
|
|
|
|
return func(config *promauth.HTTPClientConfig) {
|
|
|
|
if headers != "" {
|
|
|
|
config.Headers = strings.Split(headers, "^^")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|