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