Select Git revision
doc.go 19.31 KiB
<?php
namespace QuasselRestSearch;
use PDO;
require_once 'User.php';
require_once 'Config.php';
require_once 'helper/AuthHelper.php';
require_once 'backends/BackendFactory.php';
class Database
{
private $user;
private $backend;
private $enable_ranking;
private function __construct(string $database_connector, string $username, string $password, string $type, array $options, bool $enable_ranking)
{
$this->backend = BackendFactory::create($type, new \PDO($database_connector, $username, $password), $options, $enable_ranking);
$this->enable_ranking = $enable_ranking;
}
public static function createFromConfig(Config $config): Database
{
return Database::createFromOptions($config->database_connector, $config->username, $config->password, $config->backend, $config->database_options, $config->enable_ranking);
}
public static function createFromOptions(string $database_connector, string $username, string $password, string $type, array $options, bool $enable_ranking): Database
{
return new Database($database_connector, $username, $password, $type, $options, $enable_ranking);
}
public function authenticateFromHeader(string $header): bool
{
$parsedHeader = AuthHelper::parseAuthHeader($header);
return $this->authenticate($parsedHeader['username'], $parsedHeader['password']);
}
public function authenticate(string $username, string $password): bool
{
if (!isset($username) || !isset($password)) {
syslog(LOG_ERR, "Username or password not set");
return false;
}
$stmt = $this->backend->findUser();
$stmt->bindParam(":username", $username);
$stmt->execute();
$result = $stmt->fetch(\PDO::FETCH_ASSOC);
if ($result === FALSE) {
syslog(LOG_ERR, "Couldn’t find user " . $username);
return false;
}
$user = new User($result);
if (!AuthHelper::initialAuthenticateUser($password, $user->password, $user->hashversion)) {
syslog(LOG_ERR, "Password does not match for user " . $username);
return false;
}
$this->user = $user;
return true;
}
private function apply_config(\PDOStatement $stmt)