From a88283c526a779389efa2b819201a2331de0f2b2 Mon Sep 17 00:00:00 2001 From: winter Date: Mon, 24 Feb 2025 18:29:51 +0000 Subject: implement federation policies and instance info substitution policy --- Digitigrade/Policy/BlockInstance.php | 18 ++++++++++-- .../Policy/RemoteInstanceInfoSubstitution.php | 33 ++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 Digitigrade/Policy/RemoteInstanceInfoSubstitution.php (limited to 'Digitigrade/Policy') diff --git a/Digitigrade/Policy/BlockInstance.php b/Digitigrade/Policy/BlockInstance.php index 5f902f2..053418c 100644 --- a/Digitigrade/Policy/BlockInstance.php +++ b/Digitigrade/Policy/BlockInstance.php @@ -2,6 +2,7 @@ namespace Digitigrade\Policy; use Digitigrade\Model\Actor; +use Digitigrade\Model\Instance; use Digitigrade\Model\Interaction; use Digitigrade\Model\Note; use Digitigrade\Model\PushableModel; @@ -15,8 +16,11 @@ class BlockInstance extends Policy { $this->blockedHosts = $hosts; } - private function isBlocked(PushableModel $obj): bool { - $objHost = hostname_from_uri($obj->uri); + private function isBlocked(PushableModel|Instance|null $obj): bool { + if ($obj == null) { + return false; + } + $objHost = hostname_from_uri($obj instanceof Instance ? $obj->domain : $obj->uri); foreach ($this->blockedHosts as $host) { if (str_ends_with($objHost, $host)) { return true; @@ -34,4 +38,14 @@ class BlockInstance extends Policy { public function checkNote(Note $note): bool { return !$this->isBlocked($note); } + + public function checkActorFederation(Actor $actor, ?Instance $instance): bool { + return !$this->isBlocked($instance); + } + public function checkInteractionFederation(Interaction $interaction, ?Instance $instance): bool { + return !$this->isBlocked($instance); + } + public function checkNoteFederation(Note $note, ?Instance $instance): bool { + return !$this->isBlocked($instance); + } } \ No newline at end of file diff --git a/Digitigrade/Policy/RemoteInstanceInfoSubstitution.php b/Digitigrade/Policy/RemoteInstanceInfoSubstitution.php new file mode 100644 index 0000000..cbcecfc --- /dev/null +++ b/Digitigrade/Policy/RemoteInstanceInfoSubstitution.php @@ -0,0 +1,33 @@ + $instance->domain, + '%Instance.name' => $instance->name, + '%Instance.description' => $instance->description ?? '', + '%Instance.softwareName' => $instance->softwareName, + '%Instance.softwareDescription' => $instance->softwareDescription ?? '', + '%Instance.softwareHomepage' => $instance->softwareHomepage ?? '', + '%Instance.softwareVersion' => $instance->softwareVersion ?? '' + ]; + + foreach ($infos as $needle => $replacement) { + $note->plainContent = str_replace($needle, $replacement, $note->plainContent); + foreach ($note->formattedContent as $type => $content) { + $note->formattedContent[$type] = str_replace($needle, $replacement, $content); + } + } + + return true; + } +} \ No newline at end of file -- cgit v1.3