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

54
internal/auth/auth.go Normal file
View file

@ -0,0 +1,54 @@
package auth
import (
"errors"
"linux-auth/internal/db"
"linux-auth/internal/utils"
)
/**
* @brief Проверка аутентификации пользователя
*
* Сравнивает введённый пароль с хешем из БД.
* Учитывает блокировку пользователя и количество неудачных попыток.
*
* @param username Логин пользователя
* @param password Введённый пароль
* @return true если доступ разрешён, false если логин/пароль неверны
* @return ошибка если произошла системная ошибка (например, БД)
*/
func Authenticate(username, password string) (bool, error) {
user, err := db.GetUser(username)
if err != nil {
// Пользователь не найден
return false, nil
}
// Проверка блокировки
if user.Locked {
return false, errors.New("пользователь заблокирован")
}
// Проверка пароля
if !utils.CheckPassword(password, user.PasswordHash) {
// Инкрементируем счётчик неудачных попыток
err := db.IncrementFail(username)
if err != nil {
return false, err
}
// Если достигнут максимум — блокируем
const MaxAttempts = 3 // Можно передавать через config.toml
user.FailedAttempts++
if user.FailedAttempts >= MaxAttempts {
_ = db.LockUser(username)
}
return false, nil
}
// Успешный вход — сбрасываем счётчик неудачных попыток
_ = db.ResetFails(username)
return true, nil
}