imap-notes/cmd/login.go

54 lines
1.1 KiB
Go

package cmd
import (
"bufio"
"fmt"
"os"
"syscall"
"git.iamthefij.com/iamthefij/slog"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"golang.org/x/term"
)
func readPrompt(prompt string, reader *bufio.Reader, secret bool) string {
fmt.Printf("%s? ", prompt)
var value string
var err error
if secret {
byteValue, err := term.ReadPassword(syscall.Stdin)
if err == nil {
value = string(byteValue)
}
} else {
value, err = reader.ReadString('\n')
}
slog.OnErrFatalf(err, "failed reading %s from input", prompt)
return value
}
func promptConfig(configKey string, reader *bufio.Reader, secret bool) {
hostname := readPrompt(configKey, reader, secret)
viper.Set(configKey, hostname)
}
var loginCmd = &cobra.Command{
Use: "login",
Short: "Login to an imap server",
Long: `Login to an imap server and store configuration`,
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
reader := bufio.NewReader(os.Stdin)
promptConfig("hostname", reader, false)
promptConfig("username", reader, false)
promptConfig("password", reader, true)
},
}