mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-02 04:20:50 +08:00
70 lines
2.1 KiB
Go
70 lines
2.1 KiB
Go
// Package cmd provides command-line interface functionality for the CLI Proxy API server.
|
|
// It includes authentication flows for various AI service providers, service startup,
|
|
// and other command-line operations.
|
|
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/router-for-me/CLIProxyAPI/v6/internal/config"
|
|
sdkAuth "github.com/router-for-me/CLIProxyAPI/v6/sdk/auth"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// DoLogin handles Google Gemini authentication using the shared authentication manager.
|
|
// It initiates the OAuth flow for Google Gemini services and saves the authentication
|
|
// tokens to the configured auth directory.
|
|
//
|
|
// Parameters:
|
|
// - cfg: The application configuration
|
|
// - projectID: Optional Google Cloud project ID for Gemini services
|
|
// - options: Login options including browser behavior and prompts
|
|
func DoLogin(cfg *config.Config, projectID string, options *LoginOptions) {
|
|
if options == nil {
|
|
options = &LoginOptions{}
|
|
}
|
|
|
|
manager := newAuthManager()
|
|
|
|
metadata := map[string]string{}
|
|
if projectID != "" {
|
|
metadata["project_id"] = projectID
|
|
}
|
|
|
|
authOpts := &sdkAuth.LoginOptions{
|
|
NoBrowser: options.NoBrowser,
|
|
ProjectID: projectID,
|
|
Metadata: metadata,
|
|
Prompt: options.Prompt,
|
|
}
|
|
|
|
_, savedPath, err := manager.Login(context.Background(), "gemini", cfg, authOpts)
|
|
if err != nil {
|
|
var selectionErr *sdkAuth.ProjectSelectionError
|
|
if errors.As(err, &selectionErr) {
|
|
fmt.Println(selectionErr.Error())
|
|
projects := selectionErr.ProjectsDisplay()
|
|
if len(projects) > 0 {
|
|
fmt.Println("========================================================================")
|
|
for _, p := range projects {
|
|
fmt.Printf("Project ID: %s\n", p.ProjectID)
|
|
fmt.Printf("Project Name: %s\n", p.Name)
|
|
fmt.Println("------------------------------------------------------------------------")
|
|
}
|
|
fmt.Println("Please rerun the login command with --project_id <project_id>.")
|
|
}
|
|
return
|
|
}
|
|
log.Fatalf("Gemini authentication failed: %v", err)
|
|
return
|
|
}
|
|
|
|
if savedPath != "" {
|
|
log.Infof("Authentication saved to %s", savedPath)
|
|
}
|
|
|
|
log.Info("Gemini authentication successful!")
|
|
}
|