Start work on endpoints - at this point just validating urls

This commit is contained in:
Lewis Dale 2023-03-09 16:56:54 +00:00
parent f85c48b4a9
commit 15d03799bf
2 changed files with 41 additions and 0 deletions

View File

@ -6,4 +6,29 @@ use Lewisdale\Webmentions\Gateways\WebmentionGatewayInterface;
class Endpoint {
private readonly WebmentionGatewayInterface $gateway;
public function validateUrl(string $url) : bool {
return !!filter_var($url, FILTER_VALIDATE_URL);
}
public function receiveWebmention(string $source, string $target) : void
{
// Validate that both source and target are actual domains
if (!$this->validateUrl($source) || !$this->validateUrl($target))
{
return;
}
// Validate that the webmention target is a domain I care about
if (!str_contains($target, "https://lewisdale.dev")) {
// Should throw a Bad Request error
return;
}
// Parse content from the source
// Store the webmention
// Send the appropriate response
}
}

16
tests/EndpointTest.php Normal file
View File

@ -0,0 +1,16 @@
<?php declare(strict_types=1);
use Lewisdale\Webmentions\Endpoint;
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\Attributes\TestWith;
class EndpointTest extends TestCase {
#[TestWith(["https://my.url.com", true])]
#[TestWith(["my.url.com", false])]
public function testValidatesUrls(string $url, bool $expected)
{
$endpoint = new Endpoint();
$this->assertEquals($expected, $endpoint->validateUrl($url), "Expected $url");
}
}
?>