linux-auth/cmd/authapp/main.go

88 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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("Работа приложения завершена.")
}