2022-02-09 17:46:27 +00:00
|
|
|
package cmd
|
|
|
|
|
|
|
|
import (
|
2022-02-11 23:53:36 +00:00
|
|
|
"bufio"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"syscall"
|
|
|
|
|
2022-02-09 17:46:27 +00:00
|
|
|
"git.iamthefij.com/iamthefij/slog"
|
|
|
|
"github.com/spf13/cobra"
|
2022-02-11 23:53:36 +00:00
|
|
|
"github.com/spf13/viper"
|
|
|
|
|
|
|
|
"golang.org/x/term"
|
2022-02-09 17:46:27 +00:00
|
|
|
)
|
|
|
|
|
2022-02-11 23:53:36 +00:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2022-02-09 17:46:27 +00:00
|
|
|
var loginCmd = &cobra.Command{
|
|
|
|
Use: "login",
|
|
|
|
Short: "Login to an imap server",
|
|
|
|
Long: `Login to an imap server and store configuration`,
|
2022-02-11 23:53:36 +00:00
|
|
|
Args: cobra.NoArgs,
|
2022-02-09 17:46:27 +00:00
|
|
|
Run: func(cmd *cobra.Command, args []string) {
|
2022-02-11 23:53:36 +00:00
|
|
|
reader := bufio.NewReader(os.Stdin)
|
|
|
|
promptConfig("hostname", reader, false)
|
|
|
|
promptConfig("username", reader, false)
|
|
|
|
promptConfig("password", reader, true)
|
2022-02-09 17:46:27 +00:00
|
|
|
},
|
|
|
|
}
|