aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/Policy
diff options
context:
space:
mode:
authorwinter2025-02-24 18:29:51 +0000
committerwinter2025-02-24 18:29:51 +0000
commita88283c526a779389efa2b819201a2331de0f2b2 (patch)
tree684e6aa432d6062373941e3018dfc744adc03ff5 /Digitigrade/Policy
parent261ab1364aa40384b0315be60e78cd89ea7fe661 (diff)
implement federation policies and instance info substitution policy
Diffstat (limited to 'Digitigrade/Policy')
-rw-r--r--Digitigrade/Policy/BlockInstance.php18
-rw-r--r--Digitigrade/Policy/RemoteInstanceInfoSubstitution.php33
2 files changed, 49 insertions, 2 deletions
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 @@
+<?php
+namespace Digitigrade\Policy;
+
+use Digitigrade\Model\Instance;
+use Digitigrade\Model\Note;
+use Digitigrade\Policy;
+
+class RemoteInstanceInfoSubstitution extends Policy {
+ public function checkNoteFederation(Note $note, ?Instance $instance): bool {
+ if ($instance == null) {
+ return true;
+ }
+
+ $infos = [
+ '%Instance.domain' => $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