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