aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/Policy/BlockInstance.php
diff options
context:
space:
mode:
Diffstat (limited to 'Digitigrade/Policy/BlockInstance.php')
-rw-r--r--Digitigrade/Policy/BlockInstance.php37
1 files changed, 37 insertions, 0 deletions
diff --git a/Digitigrade/Policy/BlockInstance.php b/Digitigrade/Policy/BlockInstance.php
new file mode 100644
index 0000000..5f902f2
--- /dev/null
+++ b/Digitigrade/Policy/BlockInstance.php
@@ -0,0 +1,37 @@
+<?php
+namespace Digitigrade\Policy;
+
+use Digitigrade\Model\Actor;
+use Digitigrade\Model\Interaction;
+use Digitigrade\Model\Note;
+use Digitigrade\Model\PushableModel;
+use Digitigrade\Policy;
+
+class BlockInstance extends Policy {
+ /** @var string[] */
+ private array $blockedHosts;
+
+ public function __construct(string ...$hosts) {
+ $this->blockedHosts = $hosts;
+ }
+
+ private function isBlocked(PushableModel $obj): bool {
+ $objHost = hostname_from_uri($obj->uri);
+ foreach ($this->blockedHosts as $host) {
+ if (str_ends_with($objHost, $host)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public function checkActor(Actor $actor): bool {
+ return !$this->isBlocked($actor);
+ }
+ public function checkInteraction(Interaction $interaction): bool {
+ return !$this->isBlocked($interaction);
+ }
+ public function checkNote(Note $note): bool {
+ return !$this->isBlocked($note);
+ }
+} \ No newline at end of file