Skip to content

Commit 19c5650

Browse files
address comments
1 parent 74a0b0d commit 19c5650

2 files changed

Lines changed: 19 additions & 15 deletions

File tree

internal/auth/login.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"bufio"
77
"context"
88
"fmt"
9+
"io"
910
"os"
1011
"strings"
1112

@@ -48,17 +49,32 @@ func (l *loginProvider) Login(ctx context.Context) (string, error) {
4849

4950
// Read Y/n response
5051
reader := bufio.NewReader(os.Stdin)
51-
response, _ := reader.ReadString('\n')
52+
response, err := reader.ReadString('\n')
53+
if err != nil {
54+
if err == io.EOF {
55+
// Non-interactive shell, treat as empty (yes)
56+
response = ""
57+
} else {
58+
output.EmitLog(l.sink, fmt.Sprintf("Failed to read input: %v (non-interactive shell?)", err))
59+
return "", fmt.Errorf("failed to read input: %w", err)
60+
}
61+
}
5262
response = strings.TrimSpace(strings.ToLower(response))
5363

5464
// Open browser if yes (default to yes on empty input)
5565
if response == "" || response == "y" || response == "yes" {
56-
_ = browser.OpenURL(authURL)
66+
if err := browser.OpenURL(authURL); err != nil {
67+
output.EmitLog(l.sink, fmt.Sprintf("Warning: Failed to open browser: %v", err))
68+
}
5769
}
5870

5971
// Wait for ENTER to check status
6072
output.EmitLog(l.sink, "Waiting for authentication (Press [ENTER] when complete)")
61-
_, _ = reader.ReadString('\n')
73+
_, err = reader.ReadString('\n')
74+
if err != nil && err != io.EOF {
75+
output.EmitLog(l.sink, fmt.Sprintf("Failed to read input: %v", err))
76+
return "", fmt.Errorf("failed to read input: %w", err)
77+
}
6278

6379
// Check authentication status once
6480
return l.completeAuth(ctx, authReq)

test/integration/login_test.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,10 @@ func TestLoginSuccess(t *testing.T) {
9696
outputCh <- out
9797
}()
9898

99-
// Wait for instructions
100-
time.Sleep(100 * time.Millisecond)
101-
10299
// Simulate answering "Y" to open browser
103100
_, err = stdinPipe.Write([]byte("Y\n"))
104101
require.NoError(t, err)
105102

106-
// Wait a bit for browser to open
107-
time.Sleep(100 * time.Millisecond)
108-
109103
// Simulate pressing ENTER after completing auth in browser
110104
_, err = stdinPipe.Write([]byte("\n"))
111105
require.NoError(t, err)
@@ -164,16 +158,10 @@ func TestLoginFailure_RequestNotConfirmed(t *testing.T) {
164158
outputCh <- out
165159
}()
166160

167-
// Wait for instructions to be printed
168-
time.Sleep(100 * time.Millisecond)
169-
170161
// Simulate answering "Y" to open browser
171162
_, err = stdinPipe.Write([]byte("Y\n"))
172163
require.NoError(t, err)
173164

174-
// Wait a bit for browser to open
175-
time.Sleep(100 * time.Millisecond)
176-
177165
// Simulate pressing ENTER after "completing" auth in browser
178166
_, err = stdinPipe.Write([]byte("\n"))
179167
require.NoError(t, err)

0 commit comments

Comments
 (0)