feat: first working version
This commit is contained in:
parent
a67e208d6e
commit
1029563cb1
11 changed files with 585 additions and 0 deletions
88
cmd/authapp/main.go
Normal file
88
cmd/authapp/main.go
Normal 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("Работа приложения завершена.")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue