. */ namespace SP\Providers\Auth; use SP\Core\Application; use SP\DataModel\UserLoginData; use SP\Domain\Auth\Services\AuthException; use SP\Domain\Core\Exceptions\SPException; use SP\Providers\Provider; use SplObjectStorage; use function SP\__u; defined('APP_ROOT') || die(); /** * Class Auth * * Esta clase es la encargada de realizar la autentificación de usuarios de sysPass. * * @package SP\Providers\Auth */ class AuthProvider extends Provider implements AuthProviderInterface { /** * @var SplObjectStorage */ protected readonly SplObjectStorage $auths; public function __construct(Application $application) { parent::__construct($application); $this->auths = new SplObjectStorage(); } /** * Auth initializer * */ public function initialize(): void { } /** * Register authentication methods * * @param AuthInterface $auth * @param AuthTypeEnum $authTypeEnum * @throws AuthException */ public function registerAuth(AuthInterface $auth, AuthTypeEnum $authTypeEnum): void { if ($this->auths->contains($auth)) { throw new AuthException( __u('Authentication already initialized'), SPException::ERROR, $auth::class ); } $this->auths->attach($auth, $authTypeEnum->value); } /** * Probar los métodos de autentificación * * @param UserLoginData $userLoginData * * @return false|AuthResult[] */ public function doAuth(UserLoginData $userLoginData): array|bool { $authsResult = []; $this->auths->rewind(); while ($this->auths->valid()) { $auth = $this->auths->current(); $authName = $this->auths->getInfo(); $authsResult[] = new AuthResult($authName, $auth->authenticate($userLoginData)); $this->auths->next(); } return count($authsResult) > 0 ? $authsResult : false; } }