56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"syscall"
|
|
|
|
"golang.org/x/term"
|
|
)
|
|
|
|
// RunAuth performs interactive login and returns the session token.
|
|
func RunAuth(api *APIClient) (string, error) {
|
|
reader := bufio.NewReader(os.Stdin)
|
|
|
|
fmt.Println(TitleStyle.Render("🗑 Dumpster Chat TUI"))
|
|
fmt.Println(HelpStyle.Render(" Log in to continue\n"))
|
|
|
|
fmt.Print(" Email: ")
|
|
email, _ := reader.ReadString('\n')
|
|
email = strings.TrimSpace(email)
|
|
|
|
var password string
|
|
|
|
fmt.Print(" Password: ")
|
|
pwBytes, err := term.ReadPassword(int(syscall.Stdin))
|
|
if err != nil {
|
|
// Fallback to plain read
|
|
var pwLine string
|
|
fmt.Scanln(&pwLine)
|
|
password = strings.TrimSpace(pwLine)
|
|
fmt.Println()
|
|
if password == "" {
|
|
return "", fmt.Errorf("read password: %w", err)
|
|
}
|
|
} else {
|
|
fmt.Println() // newline after password
|
|
password = strings.TrimSpace(string(pwBytes))
|
|
}
|
|
|
|
if email == "" || password == "" {
|
|
return "", fmt.Errorf("email and password are required")
|
|
}
|
|
|
|
lr, err := api.Login(email, password)
|
|
if err != nil {
|
|
return "", fmt.Errorf("login failed: %w", err)
|
|
}
|
|
|
|
_ = lr // user ID available if needed
|
|
fmt.Println(SuccessStyle.Render(" ✓ Logged in successfully"))
|
|
|
|
return api.SessionToken, nil
|
|
}
|