feat: first working version

This commit is contained in:
nihonium 2026-01-14 12:55:21 +03:00
parent a67e208d6e
commit 1029563cb1
11 changed files with 585 additions and 0 deletions

70
internal/ui/console.go Normal file
View file

@ -0,0 +1,70 @@
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.")
}
}
}