Files
goclaw/cmd/auth.go
T
Duy /zuey/andGitHub 52aa110e1f feat(providers): default ChatGPT OAuth to GPT-5.5
Default ChatGPT Subscription (OAuth) provider model selection to GPT-5.5 and update model metadata, tests, and docs.
2026-05-18 20:33:40 +07:00

86 lines
2.4 KiB
Go

package cmd
import (
"fmt"
"net/url"
"strings"
"github.com/nextlevelbuilder/goclaw/internal/oauth"
"github.com/spf13/cobra"
)
func authCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "auth",
Short: "Authenticate named ChatGPT OAuth accounts",
Long: "Manage ChatGPT OAuth authentication via the running gateway. Requires the gateway to be running.",
}
cmd.AddCommand(authStatusCmd())
cmd.AddCommand(authLogoutCmd())
return cmd
}
// gatewayRequest sends an authenticated request to the running gateway.
// Delegates to the shared HTTP client in gateway_http_client.go.
func gatewayRequest(method, path string) (map[string]any, error) {
return gatewayHTTPDo(method, path, nil)
}
func authStatusCmd() *cobra.Command {
return &cobra.Command{
Use: "status [provider]",
Short: "Show OAuth authentication status",
Long: "Check if a named ChatGPT OAuth account is authenticated on the running gateway.",
Args: cobra.MaximumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
provider := resolveOAuthProviderArg(args)
result, err := gatewayRequest("GET", fmt.Sprintf("/v1/auth/chatgpt/%s/status", url.PathEscape(provider)))
if err != nil {
return err
}
if auth, _ := result["authenticated"].(bool); auth {
name, _ := result["provider_name"].(string)
if name == "" {
name = provider
}
fmt.Printf("ChatGPT OAuth account: active (alias: %s)\n", name)
fmt.Printf("Use model prefix '%s/' in agent config (e.g. %s/gpt-5.5).\n", name, name)
} else {
fmt.Printf("No ChatGPT OAuth tokens found for alias '%s'.\n", provider)
fmt.Println("Use the web UI to authenticate this ChatGPT OAuth account.")
}
return nil
},
}
}
func authLogoutCmd() *cobra.Command {
return &cobra.Command{
Use: "logout [provider]",
Short: "Disconnect stored ChatGPT OAuth tokens",
Args: cobra.MaximumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
provider := resolveOAuthProviderArg(args)
_, err := gatewayRequest("POST", fmt.Sprintf("/v1/auth/chatgpt/%s/logout", url.PathEscape(provider)))
if err != nil {
return err
}
fmt.Printf("ChatGPT OAuth account disconnected for alias '%s'.\n", provider)
return nil
},
}
}
func resolveOAuthProviderArg(args []string) string {
if len(args) == 0 {
return oauth.DefaultProviderName
}
provider := strings.TrimSpace(args[0])
if provider == "" || provider == "openai" {
return oauth.DefaultProviderName
}
return provider
}