| 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" | |
| ) | |
| // DoIFlowLogin performs the iFlow OAuth login via the shared authentication manager. | |
| func DoIFlowLogin(cfg *config.Config, options *LoginOptions) { | |
| if options == nil { | |
| options = &LoginOptions{} | |
| } | |
| manager := newAuthManager() | |
| promptFn := options.Prompt | |
| if promptFn == nil { | |
| promptFn = defaultProjectPrompt() | |
| } | |
| authOpts := &sdkAuth.LoginOptions{ | |
| NoBrowser: options.NoBrowser, | |
| Metadata: map[string]string{}, | |
| Prompt: promptFn, | |
| } | |
| _, savedPath, err := manager.Login(context.Background(), "iflow", cfg, authOpts) | |
| if err != nil { | |
| var emailErr *sdkAuth.EmailRequiredError | |
| if errors.As(err, &emailErr) { | |
| log.Error(emailErr.Error()) | |
| return | |
| } | |
| fmt.Printf("iFlow authentication failed: %v\n", err) | |
| return | |
| } | |
| if savedPath != "" { | |
| fmt.Printf("Authentication saved to %s\n", savedPath) | |
| } | |
| fmt.Println("iFlow authentication successful!") | |
| } | |