package cmd import ( "context" "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" ) // DoGitHubCopilotLogin triggers the OAuth device flow for GitHub Copilot and saves tokens. // It initiates the device flow authentication, displays the user code for the user to enter // at GitHub's verification URL, and waits for authorization before saving the tokens. // // Parameters: // - cfg: The application configuration containing proxy and auth directory settings // - options: Login options including browser behavior settings func DoGitHubCopilotLogin(cfg *config.Config, options *LoginOptions) { if options == nil { options = &LoginOptions{} } manager := newAuthManager() authOpts := &sdkAuth.LoginOptions{ NoBrowser: options.NoBrowser, Metadata: map[string]string{}, Prompt: options.Prompt, } record, savedPath, err := manager.Login(context.Background(), "github-copilot", cfg, authOpts) if err != nil { log.Errorf("GitHub Copilot authentication failed: %v", err) return } if savedPath != "" { fmt.Printf("Authentication saved to %s\n", savedPath) } if record != nil && record.Label != "" { fmt.Printf("Authenticated as %s\n", record.Label) } fmt.Println("GitHub Copilot authentication successful!") }