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

45
cmd/add_user/main.go Normal file
View file

@ -0,0 +1,45 @@
package main
import (
"flag"
"fmt"
"log"
"linux-auth/internal/db"
"linux-auth/internal/utils"
)
/**
* @brief CLI утилита для добавления нового пользователя в базу
*
* Позволяет добавлять пользователей интерактивно или через аргументы.
*/
func main() {
// ---------- Аргументы ----------
username := flag.String("username", "", "Логин нового пользователя")
password := flag.String("password", "", "Пароль нового пользователя")
dbPath := flag.String("db", "./data/users.db", "Путь к файлу базы данных")
flag.Parse()
// ---------- Проверка аргументов ----------
if *username == "" || *password == "" {
fmt.Println("Использование: go run cmd/add_user/main.go -username USER -password PASS [-db ./data/users.db]")
return
}
// ---------- Инициализация БД ----------
err := db.Init(*dbPath)
if err != nil {
log.Fatalf("Ошибка инициализации БД: %v\n", err)
}
defer db.Close()
// ---------- Создание пользователя ----------
hash := utils.HashPassword(*password)
err = db.CreateUser(*username, hash)
if err != nil {
log.Fatalf("Не удалось создать пользователя %s: %v\n", *username, err)
}
fmt.Printf("Пользователь %s успешно добавлен.\n", *username)
}

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

39
cmd/init_users/main.go Normal file
View file

@ -0,0 +1,39 @@
package main
import (
"fmt"
"log"
"linux-auth/internal/db"
"linux-auth/internal/utils"
)
func main() {
// Путь к файлу базы данных
dbPath := "./data/users.db"
// Инициализация БД
err := db.Init(dbPath)
if err != nil {
log.Fatalf("Ошибка инициализации БД: %v\n", err)
}
defer db.Close()
// Создаём пользователей
users := map[string]string{
"admin": "admin123",
"user1": "password1",
}
for username, password := range users {
hash := utils.HashPassword(password)
err := db.CreateUser(username, hash)
if err != nil {
fmt.Printf("Не удалось создать пользователя %s: %v\n", username, err)
} else {
fmt.Printf("Пользователь %s успешно создан.\n", username)
}
}
fmt.Println("Инициализация пользователей завершена.")
}