bindAPI/bindAPI/src/Controller/ApiUsers.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());
}
}
}