talos/pkg/machinery/client/basic_auth.go
Philipp Sauter f37da96ef3
feat: enable talos client to connect to Talos through an auth proxy
Talos client can connect to Talos API via a proxy with basic auth.
Additionally it is now optional to specify a TLS CA,key or crt. Optionally
Developers can build talosctl with WITH_DEBUG=1 to allow insecure
connections when http:// endpoints are specified.

Fixes #5980

Signed-off-by: Philipp Sauter <philipp.sauter@siderolabs.com>
2022-08-15 18:05:26 +02:00

34 lines
951 B
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package client
import (
"context"
"encoding/base64"
"google.golang.org/grpc"
)
// BasicAuth implements the credentials.PerRPCCredentials interface and holds credentials for Basic Auth.
type BasicAuth struct {
auth string
}
// GetRequestMetadata implements credentials.PerGRPCCredentials.
func (c BasicAuth) GetRequestMetadata(ctx context.Context, url ...string) (map[string]string, error) {
enc := base64.StdEncoding.EncodeToString([]byte(c.auth))
return map[string]string{
"Authorization": "Basic " + enc,
}, nil
}
// WithGRPCBasicAuth returns gRPC credentials for basic auth.
func WithGRPCBasicAuth(username, password string) grpc.DialOption {
return grpc.WithPerRPCCredentials(BasicAuth{
auth: username + ":" + password,
})
}