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

88
cmd/authapp/main.go Normal file
View file

@ -0,0 +1,88 @@
package main
import (
"flag"
"fmt"
"log"
"os"
"linux-auth/internal/auth"
"linux-auth/internal/config"
"linux-auth/internal/db"
"linux-auth/internal/ui"
)
/**
* @brief Точка входа в приложение аутентификации
*
* Программа загружает конфигурацию, инициализирует БД
* и запускает цикл аутентификации пользователя.
*/
func main() {
// ---------- Работа с аргументами ----------
configPath := flag.String(
"config",
"configs/config.toml",
"Путь к конфигурационному файлу",
)
flag.Parse()
// ---------- Загрузка конфигурации ----------
cfg, err := config.Load(*configPath)
if err != nil {
log.Fatalf("Ошибка загрузки конфигурации: %v\n", err)
}
if cfg.App.Name != "" {
fmt.Println("=== ", cfg.App.Name, " ===")
}
// ---------- Инициализация БД ----------
err = db.Init(cfg.Database.Path)
if err != nil {
log.Fatalf("Ошибка инициализации БД: %v\n", err)
}
defer db.Close()
// ---------- Основной цикл аутентификации ----------
attempts := 0
for {
// Проверка лимита попыток
if attempts >= cfg.App.MaxLoginAttempts {
fmt.Println("Превышено количество попыток входа.")
os.Exit(1)
}
// Ввод логина и пароля
username, password, err := ui.ReadCredentials()
if err != nil {
fmt.Println("Ошибка ввода данных.")
attempts++
continue
}
// Проверка аутентификации
ok, err := auth.Authenticate(username, password)
if err != nil {
fmt.Printf("Ошибка аутентификации: %v\n", err)
attempts++
continue
}
if ok {
fmt.Printf("Доступ разрешён. Добро пожаловать, %s!\n", username)
break
} else {
fmt.Println("Неверный логин или пароль.")
attempts++
}
// Предложение очистки формы (логическое)
if ui.AskReset() {
continue
}
}
fmt.Println("Работа приложения завершена.")
}