gogcli/internal/authclient/authclient.go
Peter Steinberger 99d957581f
Some checks failed
ci / test (push) Has been cancelled
ci / worker (push) Has been cancelled
ci / darwin-cgo-build (push) Has been cancelled
feat(auth): add multi-org login
2026-01-22 04:04:14 +00:00

64 lines
1.2 KiB
Go

package authclient
import (
"context"
"fmt"
"strings"
"github.com/steipete/gogcli/internal/config"
)
type contextKey struct{}
func WithClient(ctx context.Context, client string) context.Context {
client = strings.TrimSpace(client)
if client == "" {
return ctx
}
return context.WithValue(ctx, contextKey{}, client)
}
func ClientOverrideFromContext(ctx context.Context) string {
if ctx == nil {
return ""
}
if v := ctx.Value(contextKey{}); v != nil {
if s, ok := v.(string); ok {
return s
}
}
return ""
}
func ResolveClient(ctx context.Context, email string) (string, error) {
cfg, err := config.ReadConfig()
if err != nil {
return "", fmt.Errorf("read config: %w", err)
}
override := ClientOverrideFromContext(ctx)
client, err := config.ResolveClientForAccount(cfg, email, override)
if err != nil {
return "", fmt.Errorf("resolve client: %w", err)
}
return client, nil
}
func ResolveClientWithOverride(email string, override string) (string, error) {
cfg, err := config.ReadConfig()
if err != nil {
return "", fmt.Errorf("read config: %w", err)
}
client, err := config.ResolveClientForAccount(cfg, email, override)
if err != nil {
return "", fmt.Errorf("resolve client: %w", err)
}
return client, nil
}