67 lines
2.3 KiB
Go
67 lines
2.3 KiB
Go
package service
|
|
|
|
import "log/slog"
|
|
|
|
// AuthUserRepository — интерфейс репозитория пользователей для AuthService.
|
|
type AuthUserRepository interface {
|
|
// методы, которые AuthService использует из репозитория пользователей
|
|
}
|
|
|
|
// AuthSessionRepository — интерфейс репозитория сессий для AuthService.
|
|
type AuthSessionRepository interface {
|
|
// методы, которые AuthService использует из репозитория сессий
|
|
}
|
|
|
|
// AuthCache — интерфейс кэша для AuthService (хранит токены).
|
|
type AuthCache interface {
|
|
Get(key string) (string, error)
|
|
Set(key, value string) error
|
|
}
|
|
|
|
// AuthEventPublisher — интерфейс для публикации событий авторизации.
|
|
type AuthEventPublisher interface {
|
|
Publish(event string)
|
|
}
|
|
|
|
// AuthService — интерфейс сервиса авторизации.
|
|
// Структура неэкспортируемая — создать объект можно только через NewAuthService.
|
|
type AuthService interface {
|
|
ValidateToken(token string) bool
|
|
}
|
|
|
|
// authService — сервис авторизации.
|
|
type authService struct {
|
|
userRepo AuthUserRepository
|
|
sessionRepo AuthSessionRepository
|
|
cache AuthCache
|
|
events AuthEventPublisher
|
|
}
|
|
|
|
// NewAuthService создаёт сервис авторизации.
|
|
func NewAuthService(
|
|
userRepo AuthUserRepository,
|
|
sessionRepo AuthSessionRepository,
|
|
cache AuthCache,
|
|
events AuthEventPublisher,
|
|
) AuthService {
|
|
slog.Info("сервис авторизации создан")
|
|
return &authService{
|
|
userRepo: userRepo,
|
|
sessionRepo: sessionRepo,
|
|
cache: cache,
|
|
events: events,
|
|
}
|
|
}
|
|
|
|
// ValidateToken проверяет токен авторизации.
|
|
// Проверяет наличие токена в кэше — именно тут взорвётся nil,
|
|
// если кэш не был правильно инициализирован (как в antipattern-broken).
|
|
func (s *authService) ValidateToken(token string) bool {
|
|
slog.Info("проверяем токен", "token", token)
|
|
|
|
// Проверяем токен в кэше. Если cache == nil — паника.
|
|
_, err := s.cache.Get(token)
|
|
|
|
return err == nil
|
|
}
|