Bicycle/Services/Auth/AuthDriver.php
2026-08-11 22:35:26 +03:00

80 lines
3.0 KiB
PHP

<?php
/**
* @package Bicycle
* @author Egor Isaev
* @description AuthDriver.php
* @copyright (c) 06/08/2026
*/
namespace Services\Auth;
/**
* Общий интерфейс драйвера авторизации. Реализации: {@see FileAuthDriver}
* (по умолчанию), позже — БД/LDAP/Keycloak — без изменения кода, который
* работает через этот интерфейс.
*/
interface AuthDriver
{
/**
* Проверяет логин/пароль и, если верны, авторизует пользователя
* (сохраняет состояние в сессии).
*
* @param string $login
* @param string $password
* @return bool
*/
public function login(string $login, string $password): bool;
/**
* Проверяет логин/пароль, не авторизуя (не трогает сессию) — первый шаг
* двухфакторной авторизации: логин/пароль верны, но сессия ещё не
* выставляется, пока не пройдёт второй фактор (см. forceLogin()).
*
* @param string $login
* @param string $password
* @return bool
*/
public function verifyCredentials(string $login, string $password): bool;
/**
* Авторизует пользователя без проверки пароля — второй шаг двухфакторной
* авторизации (после verifyCredentials() и успешной проверки кода).
*
* @param string $login
* @param bool $remember «Запомнить меня» — не спрашивать логин повторно
* до явного logout() (см. logout())
* @return void
*/
public function forceLogin(string $login, bool $remember = false): void;
/**
* Разлогинивает пользователя (очищает состояние сессии).
*
* @return void
*/
public function logout(): void;
/**
* Авторизован ли пользователь в текущей сессии.
*
* @return bool
*/
public function loggedIn(): bool;
/**
* Данные текущего авторизованного пользователя.
*
* @return array|null null, если не авторизован
*/
public function getUser(): ?array;
/**
* Проверяет пароль против сохранённого хэша текущего авторизованного
* пользователя (например, для подтверждения перед сменой настроек).
*
* @param string $password
* @return bool false, если пользователь не авторизован или пароль не совпал
*/
public function checkPassword(string $password): bool;
}