hydra-sql/src/SQLLogin/SQLLoginRequest.php

99 lines
2.7 KiB
PHP

<?php
namespace App\SQLLogin;
use App\SQLLogin\Exception\NullDataToFetchException;
class SQLLoginRequest
{
public const DATA_TO_FETCH = 'data_to_fetch';
public const LOGIN_COLUMN_NAME = 'login_column_name';
public const SALT_COLUMN_NAME = 'salt_column_name';
public const PASSWORD_COLUMN_NAME = 'password_column_name';
public const PASSWORD_NEED_UPGRADE = 'password_need_upgrade';
public const TABLE_NAME = 'table_name';
protected array $config;
protected string $dsn;
protected string $user;
protected string $password;
public function __construct(string $dsn, string $user, string $password, array $config = [])
{
$this->config = $config;
$this->dsn = $dsn;
$this->user = $user;
$this->password = $password;
}
public function getDatabaseDsn(): string
{
return $this->dsn;
}
public function getDbUser(): string
{
return $this->user;
}
public function getDbPassword(): string
{
return $this->password;
}
public function getLoginColumnName(): string
{
return $this->config[self::LOGIN_COLUMN_NAME];
}
public function getPasswordColumnName(): string
{
return $this->config[self::PASSWORD_COLUMN_NAME];
}
public function getSaltColumnName(): ?string
{
return $this->config[self::SALT_COLUMN_NAME];
}
public function getTableName(): string
{
return $this->config[self::TABLE_NAME];
}
public function getDataToFetch(): array
{
return $this->config[self::DATA_TO_FETCH];
}
public function getRequestScope()
{
$scope = '';
if (!$this->config[self::DATA_TO_FETCH]) {
throw new NullDataToFetchException();
}
foreach ($this->config[self::DATA_TO_FETCH] as $data) {
$scope .= $data . ',';
}
// On enlève la dernière virgule
$scope = substr($scope, 0, -1);
return 'SELECT ' . $scope . ' FROM ' . $this->getTableName() . ' WHERE ' . $this->getLoginColumnName() . ' = :' . $this->getLoginColumnName() . ';';
}
/**
* Construction de la string pour la requête préparée selon la configuration yaml
* intègre la récupération du mot de passe hashé, du salt et de besoin d'upgrade de la méthode de hashage
*/
public function getRequestPassword(): string
{
$fields = $this->getPasswordColumnName();
if (!empty($this->getSaltColumnName())) {
$fields .= ', ' . $this->getSaltColumnName();
}
return 'SELECT ' . $fields . ' FROM ' . $this->getTableName() . ' WHERE ' . $this->getLoginColumnName() . ' = :' . $this->getLoginColumnName() . ';';
}
}