From 07784442bd120541303bbd064aaf107e8940ba50 Mon Sep 17 00:00:00 2001 From: Stefan Majer Date: Tue, 16 Jun 2026 16:02:44 +0200 Subject: [PATCH] Add ability to configure client from env variables --- go/client/conn.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/go/client/conn.go b/go/client/conn.go index 3c5aecb4..30676829 100644 --- a/go/client/conn.go +++ b/go/client/conn.go @@ -5,13 +5,19 @@ import ( "fmt" "log/slog" "net/http" + "net/url" + "os" "time" "connectrpc.com/connect" "github.com/golang-jwt/jwt/v5" ) -const tokenRenewChecksDuringLifetime = 4 +const ( + tokenRenewChecksDuringLifetime = 4 + TokenEnvName = "METAL_APIV2_TOKEN" + BaseURLEnvName = "METAL_APIV2_URL" +) type ( // DialConfig is the configuration to create a api-server connection @@ -55,9 +61,23 @@ func (d *DialConfig) HttpClient() *http.Client { } func (dc *DialConfig) parse() error { + if dc.BaseURL == "" { + dc.BaseURL = os.Getenv(BaseURLEnvName) + if dc.BaseURL == "" { + return fmt.Errorf("neither BaseURL nor %s were given", BaseURLEnvName) + } + if _, err := url.Parse(dc.BaseURL); err != nil { + return err + } + } + if dc.Token == "" { - return nil + dc.Token = os.Getenv(TokenEnvName) + if dc.Token == "" { + return nil + } } + parsed, err := jwt.Parse(dc.Token, nil) if err != nil && !errors.Is(err, jwt.ErrTokenUnverifiable) { return fmt.Errorf("unable to parse token:%w", err) @@ -80,5 +100,6 @@ func (dc *DialConfig) parse() error { if dc.issuedAt.IsZero() { dc.issuedAt = time.Now() } + return nil }