aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorwinter2024-12-24 14:15:02 +0000
committerwinter2024-12-24 14:15:02 +0000
commit503a49b7d7b4275fd09b4a7c06cbdbdf257fef79 (patch)
tree4611c864e1450a6e56a25f5ddda196ec41373e78
parentef16890f38bd4256da1b873a89dfadc5067d63a9 (diff)
breaking change: use id in actor uri instead of handle
-rw-r--r--Digitigrade/Model/Actor.php24
-rw-r--r--routes/actor.php41
2 files changed, 36 insertions, 29 deletions
diff --git a/Digitigrade/Model/Actor.php b/Digitigrade/Model/Actor.php
index 3ad0efe..46c6f9a 100644
--- a/Digitigrade/Model/Actor.php
+++ b/Digitigrade/Model/Actor.php
@@ -41,7 +41,7 @@ class Actor extends PushableModel implements RpcReceiver {
throw new \RuntimeException('an actor with that local handle already exists!');
}
$actor = new self();
- $actor->uri = path_to_uri("/actor/$handle");
+ $actor->uri = "UNKNOWN"; // need to know the id first
$actor->isLocal = true;
$date = new \DateTimeImmutable();
$actor->created = $date;
@@ -56,8 +56,12 @@ class Actor extends PushableModel implements RpcReceiver {
// don't actually need to set these either
// just need to set the basicFeed since it's a required field
$actor->endpoints = new ActorEndpoints();
- $actor->endpoints->basicFeed = path_to_uri("/actor/$handle/basicFeed");
+ $actor->endpoints->basicFeed = "UNKNOWN";
+
+ $actor->save();
+ $actor->uri = path_to_uri("/actor/$actor->id");
$actor->save();
+
return $actor;
}
@@ -212,13 +216,13 @@ class Actor extends PushableModel implements RpcReceiver {
if ($this->deleted) {
return [
'type' => 'tombstone',
- 'self' => path_to_uri("/actor/$this->handle"),
+ 'self' => path_to_uri("/actor/$this->id"),
'previousType' => 'actor'
];
}
return [
'type' => 'actor',
- 'self' => path_to_uri("/actor/$this->handle"),
+ 'self' => path_to_uri("/actor/$this->id"),
'created' => $this->created?->format('c'),
'modified' => $this->modified?->format('c'),
'homepage' => path_to_uri("/@/$this->handle"),
@@ -230,12 +234,12 @@ class Actor extends PushableModel implements RpcReceiver {
'automated' => $this->automated,
'requestToFollow' => $this->requestToFollow,
'endpoints' => [
- 'basicFeed' => path_to_uri("/actor/$this->handle/basicFeed"),
- 'fullFeed' => path_to_uri("/actor/$this->handle/fullFeed"),
- 'follow' => path_to_uri("/actor/$this->handle/follow"),
- 'unfollow' => path_to_uri("/actor/$this->handle/unfollow"),
- 'acceptedFollow' => path_to_uri("/actor/$this->handle/acceptedFollow"),
- 'rejectedFollow' => path_to_uri("/actor/$this->handle/rejectedFollow"),
+ 'basicFeed' => path_to_uri("/actor/$this->id/basicFeed"),
+ 'fullFeed' => path_to_uri("/actor/$this->id/fullFeed"),
+ 'follow' => path_to_uri("/actor/$this->id/follow"),
+ 'unfollow' => path_to_uri("/actor/$this->id/unfollow"),
+ 'acceptedFollow' => path_to_uri("/actor/$this->id/acceptedFollow"),
+ 'rejectedFollow' => path_to_uri("/actor/$this->id/rejectedFollow"),
]
];
}
diff --git a/routes/actor.php b/routes/actor.php
index d453a11..57bfbc5 100644
--- a/routes/actor.php
+++ b/routes/actor.php
@@ -7,10 +7,13 @@ use Digitigrade\Model\Actor;
use Digitigrade\Model\Note;
use Digitigrade\Router;
-Router::getInstance()->mount('/actor/:handle', function (array $args) {
- $actor = Actor::findLocalByHandle($args['handle']);
+Router::getInstance()->mount('/actor/:id', function (array $args) {
+ $actor = Actor::find($args['id']);
if ($actor == null || $actor->deleted) {
- throw new NotFound("i don't know any local actor called " . $args['handle']);
+ throw new NotFound("i don't know that actor");
+ }
+ if (!$actor->isLocal) {
+ throw new NotFound("that actor is not local!");
}
if (isset($_SERVER['HTTP_ACCEPT']) && str_contains($_SERVER['HTTP_ACCEPT'], 'text/html')) {
throw new TemporaryRedirect("/@/$actor->handle");
@@ -18,8 +21,8 @@ Router::getInstance()->mount('/actor/:handle', function (array $args) {
json_response($actor);
});
-Router::getInstance()->mount('/actor/:handle/basicFeed', function (array $args) {
- $actor = Actor::findLocalByHandle($args['handle']);
+Router::getInstance()->mount('/actor/:id/basicFeed', function (array $args) {
+ $actor = Actor::find($args['id']);
$notes = Note::findAllWithAuthor($actor);
// TODO: implement pagination
json_response([
@@ -33,8 +36,8 @@ Router::getInstance()->mount('/actor/:handle/basicFeed', function (array $args)
]);
});
-Router::getInstance()->mount('/actor/:handle/fullFeed', function (array $args) {
- $actor = Actor::findLocalByHandle($args['handle']);
+Router::getInstance()->mount('/actor/:id/fullFeed', function (array $args) {
+ $actor = Actor::find($args['id']);
$notes = Note::findAllWithAuthor($actor);
// TODO: implement pagination here as well
json_response([
@@ -46,9 +49,9 @@ Router::getInstance()->mount('/actor/:handle/fullFeed', function (array $args) {
]);
});
-Router::getInstance()->mount('/actor/:handle/follow', function (array $args) {
- $target = Actor::findLocalByHandle($args['handle']);
- if ($target == null) {
+Router::getInstance()->mount('/actor/:id/follow', function (array $args) {
+ $target = Actor::find($args['id']);
+ if ($target == null || !$target->isLocal || $target->deleted) {
throw new NotFound();
}
$initiator = Actor::findByRequestHeaders();
@@ -58,9 +61,9 @@ Router::getInstance()->mount('/actor/:handle/follow', function (array $args) {
$initiator->follow($target);
});
-Router::getInstance()->mount('/actor/:handle/unfollow', function (array $args) {
- $target = Actor::findLocalByHandle($args['handle']);
- if ($target == null) {
+Router::getInstance()->mount('/actor/:id/unfollow', function (array $args) {
+ $target = Actor::find($args['id']);
+ if ($target == null || !$target->isLocal || $target->deleted) {
throw new NotFound();
}
$initiator = Actor::findByRequestHeaders();
@@ -70,9 +73,9 @@ Router::getInstance()->mount('/actor/:handle/unfollow', function (array $args) {
$initiator->unfollow($target);
});
-Router::getInstance()->mount('/actor/:handle/acceptedFollow', function (array $args) {
- $initiator = Actor::findLocalByHandle($args['handle']);
- if ($initiator == null) {
+Router::getInstance()->mount('/actor/:id/acceptedFollow', function (array $args) {
+ $initiator = Actor::find($args['id']);
+ if ($initiator == null || !$initiator->isLocal || $initiator->deleted) {
throw new NotFound();
}
$target = Actor::findByRequestHeaders();
@@ -82,9 +85,9 @@ Router::getInstance()->mount('/actor/:handle/acceptedFollow', function (array $a
$target->acceptPendingFollowFrom($initiator);
});
-Router::getInstance()->mount('/actor/:handle/rejectedFollow', function (array $args) {
- $initiator = Actor::findLocalByHandle($args['handle']);
- if ($initiator == null) {
+Router::getInstance()->mount('/actor/:id/rejectedFollow', function (array $args) {
+ $initiator = Actor::find($args['id']);
+ if ($initiator == null || !$initiator->isLocal || $initiator->deleted) {
throw new NotFound();
}
$target = Actor::findByRequestHeaders();