package ui import ( "bufio" "fmt" "os" "strings" "syscall" "golang.org/x/term" ) var reader = bufio.NewReader(os.Stdin) /** * @brief Считывание логина и пароля с консоли * * Логин вводится обычным текстом, пароль — с маской. * * @return login введённый логин * @return password введённый пароль * @return err ошибка при вводе */ func ReadCredentials() (login string, password string, err error) { // Ввод логина fmt.Print("Логин: ") login, err = reader.ReadString('\n') if err != nil { return "", "", err } login = strings.TrimSpace(login) // Ввод пароля с маской fmt.Print("Пароль: ") bytePassword, err := term.ReadPassword(int(syscall.Stdin)) fmt.Println() if err != nil { return "", "", err } password = strings.TrimSpace(string(bytePassword)) return login, password, nil } /** * @brief Предложить пользователю очистку формы * * Пользователь может ввести "y" или "n". * * @return true если пользователь выбрал сброс */ func AskReset() bool { for { fmt.Print("Очистить форму и попробовать снова? (y/n): ") resp, err := reader.ReadString('\n') if err != nil { return false } resp = strings.ToLower(strings.TrimSpace(resp)) if resp == "y" || resp == "yes" { return true } else if resp == "n" || resp == "no" { return false } else { fmt.Println("Введите y или n.") } } }