85 lines
2.6 KiB
PHP
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;
|
|
}
|