Files
slim-blog/src/Auth/AuthServiceInterface.php
2026-03-16 16:58:54 +01:00

85 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Auth;
use App\Shared\Exception\NotFoundException;
use App\User\Exception\WeakPasswordException;
use App\User\User;
/**
* Contrat du service d'authentification.
*
* Permet de mocker le service dans les tests unitaires sans dépendre
* de la classe concrète finale AuthService.
*/
interface AuthServiceInterface
{
/**
* Vérifie si l'adresse IP est actuellement verrouillée par le rate limiter.
*
* @param string $ip Adresse IP du client
*
* @return int 0 si libre, nombre de minutes restantes si verrouillé
*/
public function checkRateLimit(string $ip): int;
/**
* Enregistre une tentative de connexion échouée pour une IP.
*
* @param string $ip Adresse IP du client
*/
public function recordFailure(string $ip): void;
/**
* Réinitialise le compteur de tentatives pour une IP.
*
* @param string $ip Adresse IP du client
* @return void
*/
public function resetRateLimit(string $ip): void;
/**
* Tente d'authentifier un utilisateur par ses identifiants.
*
* @param string $username Nom d'utilisateur (insensible à la casse)
* @param string $plainPassword Mot de passe en clair
*
* @return User|null L'utilisateur authentifié, ou null si les identifiants sont invalides
*/
public function authenticate(string $username, string $plainPassword): ?User;
/**
* Change le mot de passe d'un utilisateur après vérification de l'actuel.
*
* @param int $userId Identifiant de l'utilisateur
* @param string $currentPassword Mot de passe actuel en clair (pour vérification)
* @param string $newPassword Nouveau mot de passe en clair (min. 8 caractères)
*
* @throws NotFoundException Si l'utilisateur est introuvable
* @throws \InvalidArgumentException Si le mot de passe actuel est incorrect
* @throws WeakPasswordException Si le nouveau mot de passe est trop court
*/
public function changePassword(int $userId, string $currentPassword, string $newPassword): void;
/**
* Vérifie si une session utilisateur est active.
*
* @return bool True si une session utilisateur est active
*/
public function isLoggedIn(): bool;
/**
* Ouvre une session pour l'utilisateur donné.
*
* @param User $user L'utilisateur à connecter
*/
public function login(User $user): void;
/**
* Détruit la session utilisateur courante.
* @return void
*/
public function logout(): void;
}