70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
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.")
|
||
}
|
||
}
|
||
}
|