feat (auth): CLI OAuth supports pasting callback URLs to complete login
- Added callback URL resolution and terminal prompt logic - Codex/Claude/iFlow/Antigravity/Gemini login supports callback URL or local callback completion - Update Gemini login option signature and manager call - CLI default prompt function is compatible with null input to continue waiting
This commit is contained in:
+25
-2
@@ -84,9 +84,32 @@ func (a *IFlowAuthenticator) Login(ctx context.Context, cfg *config.Config, opts
|
||||
|
||||
fmt.Println("Waiting for iFlow authentication callback...")
|
||||
|
||||
result, err := oauthServer.WaitForCallback(5 * time.Minute)
|
||||
if err != nil {
|
||||
callbackCh := make(chan *iflow.OAuthResult, 1)
|
||||
callbackErrCh := make(chan error, 1)
|
||||
manualCh, manualErrCh := promptForOAuthCallback(opts.Prompt, "iFlow")
|
||||
|
||||
go func() {
|
||||
result, errWait := oauthServer.WaitForCallback(5 * time.Minute)
|
||||
if errWait != nil {
|
||||
callbackErrCh <- errWait
|
||||
return
|
||||
}
|
||||
callbackCh <- result
|
||||
}()
|
||||
|
||||
var result *iflow.OAuthResult
|
||||
select {
|
||||
case result = <-callbackCh:
|
||||
case err = <-callbackErrCh:
|
||||
return nil, fmt.Errorf("iflow auth: callback wait failed: %w", err)
|
||||
case manual := <-manualCh:
|
||||
result = &iflow.OAuthResult{
|
||||
Code: manual.Code,
|
||||
State: manual.State,
|
||||
Error: manual.Error,
|
||||
}
|
||||
case err = <-manualErrCh:
|
||||
return nil, err
|
||||
}
|
||||
if result.Error != "" {
|
||||
return nil, fmt.Errorf("iflow auth: provider returned error %s", result.Error)
|
||||
|
||||
Reference in New Issue
Block a user