linux-auth/internal/auth/auth.go

54 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}