135 lines
2.6 KiB
PHP
135 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use PDO;
|
|
use PDOException;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class ApiUsers
|
|
{
|
|
private PDO $dbConnection;
|
|
|
|
public function __construct(PDO $dbConnection)
|
|
{
|
|
$this->dbConnection = $dbConnection;
|
|
}
|
|
|
|
/**
|
|
* @return array|false
|
|
*/
|
|
public function findAll(): bool|array
|
|
{
|
|
$statement = "
|
|
SELECT id, api_token_prefix, api_token
|
|
FROM user";
|
|
|
|
try {
|
|
$statement = $this->dbConnection->query($statement);
|
|
return $statement->fetchAll(PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
exit($e->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @param Int $id
|
|
*
|
|
* @return array|false
|
|
*/
|
|
public function findByID(Int $id): bool|array
|
|
{
|
|
$statement = "
|
|
SELECT api_token_prefix, api_token
|
|
FROM user
|
|
WHERE id = :id;
|
|
";
|
|
|
|
try {
|
|
$statement = $this->dbConnection->prepare($statement);
|
|
$statement->bindParam(':id', $id);
|
|
$statement->execute();
|
|
return $statement->fetchAll(PDO::FETCH_ASSOC);
|
|
} catch (\PDOException $e) {
|
|
exit($e->getMessage());
|
|
}
|
|
}
|
|
|
|
public function findByPrefix(String $prefix): bool|array
|
|
{
|
|
$statement = "
|
|
SELECT api_token
|
|
FROM user
|
|
WHERE api_token_prefix = :prefix;
|
|
";
|
|
|
|
try {
|
|
$statement = $this->dbConnection->prepare($statement);
|
|
$statement->bindParam(':prefix', $prefix);
|
|
$statement->execute();
|
|
return $statement->fetch(PDO::FETCH_ASSOC);
|
|
} catch (\PDOException $e) {
|
|
exit($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return array|void
|
|
*/
|
|
public function create()
|
|
{
|
|
$tokenPrefix = uniqid();
|
|
$result['tokenPrefix'] = $tokenPrefix;
|
|
try {
|
|
$key = bin2hex(random_bytes(24));
|
|
$result['key'] = $key;
|
|
} catch (\Exception $e) {
|
|
echo $e->getMessage() . PHP_EOL;
|
|
exit(1);
|
|
}
|
|
$token = password_hash($tokenPrefix . '.' . $key, PASSWORD_ARGON2ID);
|
|
|
|
//print()
|
|
$statement = "
|
|
INSERT INTO user (api_token_prefix, api_token)
|
|
VALUES (:token_prefix, :token)";
|
|
|
|
try {
|
|
$statement = $this->dbConnection->prepare($statement);
|
|
$statement->bindParam(':token_prefix', $tokenPrefix);
|
|
$statement->bindParam(':token', $token);
|
|
$statement->execute();
|
|
$result['row'] = $this->dbConnection->lastInsertId();
|
|
return $result;
|
|
} catch (\PDOException $e) {
|
|
exit($e->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @param $id
|
|
*
|
|
* @return void
|
|
*/
|
|
public function delete($id)
|
|
{
|
|
$statement = "
|
|
DELETE FROM user
|
|
WHERE id = :id";
|
|
|
|
try {
|
|
$statement = $this->dbConnection->prepare($statement);
|
|
$statement->bindParam('id', $id);
|
|
$statement->execute();
|
|
return $statement->rowCount();
|
|
} catch (\PDOException $e) {
|
|
exit($e->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
} |