Something went wrong. Try again.
A barebones implementation of an atproto PDS in PHP and Slim Framework 4.
pds php atproto
Something went wrong. Try again.
2.5 kB · 85 lines
PHP
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586<?php
declare(strict_types=1);
namespace App\Infrastructure\Persistence\Account\EmailToken;
use App\Domain\Account\EmailToken\EmailToken;use App\Domain\Account\EmailToken\EmailTokenNotFoundException;use App\Domain\Account\EmailToken\EmailTokenRepository;use App\Infrastructure\Database\Database;use App\Infrastructure\Database\Row;use DateTimeImmutable;
class SqliteEmailTokenRepository implements EmailTokenRepository{ public function __construct(private readonly Database $db) { }
public function findByPurposeAndDid(string $purpose, string $did): EmailToken { $row = $this->db->fetchOne( 'SELECT * FROM email_token WHERE purpose = ? AND did = ?', [$purpose, $did] );
if ($row === null) { throw new EmailTokenNotFoundException(); }
return $this->hydrate($row); }
public function findByPurposeAndToken(string $purpose, string $token): EmailToken { $row = $this->db->fetchOne( 'SELECT * FROM email_token WHERE purpose = ? AND token = ?', [$purpose, $token] );
if ($row === null) { throw new EmailTokenNotFoundException(); }
return $this->hydrate($row); }
public function save(EmailToken $token): void { $this->db->execute( 'INSERT INTO email_token (purpose, did, token, requested_at) VALUES (:purpose, :did, :token, :requested_at) ON CONFLICT(purpose, did) DO UPDATE SET token = excluded.token, requested_at = excluded.requested_at', [ 'purpose' => $token->getPurpose(), 'did' => $token->getDid(), 'token' => $token->getToken(), 'requested_at' => $token->getRequestedAt()->format(DATE_ATOM), ] ); }
public function deleteByPurposeAndDid(string $purpose, string $did): void { $this->db->execute( 'DELETE FROM email_token WHERE purpose = ? AND did = ?', [$purpose, $did] ); }
/** * @param array<string, mixed> $row */ private function hydrate(array $row): EmailToken { return new EmailToken( purpose: Row::str($row, 'purpose'), did: Row::str($row, 'did'), token: Row::str($row, 'token'), requestedAt: new DateTimeImmutable(Row::str($row, 'requested_at')), ); }}