فهرست منبع

Add AP Delivery Service

Daniel Supernault 5 سال پیش
والد
کامیت
764ab76e90
1فایلهای تغییر یافته به همراه61 افزوده شده و 0 حذف شده
  1. 61 0
      app/Services/ActivityPubDeliveryService.php

+ 61 - 0
app/Services/ActivityPubDeliveryService.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace App\Services;
+
+use App\Profile;
+use App\Util\ActivityPub\Helpers;
+use App\Util\ActivityPub\HttpSignature;
+
+class ActivityPubDeliveryService {
+
+	public $sender;
+	public $to;
+	public $payload;
+
+	public static function queue()
+	{
+		return new self;
+	}
+
+	public function from($profile)
+	{
+		$this->sender = $profile;
+		return $this;
+	}
+
+	public function to(string $url)
+	{
+		$this->to = $url;
+		return $this;
+	}
+
+	public function payload($payload)
+	{
+		$this->payload = $payload;
+		return $this;
+	}
+
+	public function send()
+	{
+		return $this->queueDelivery();
+	}
+
+	protected function queueDelivery()
+	{
+		abort_if(!$this->sender || !$this->to || !$this->payload, 400);
+		abort_if(!Helpers::validateUrl($this->to), 400);
+		abort_if($this->sender->domain != null || $this->sender->status != null, 400);
+
+		$body = $this->payload;
+		$payload = json_encode($body);
+		$headers = HttpSignature::sign($this->sender, $this->to, $body);
+
+		$ch = curl_init($this->to);
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+		curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
+		curl_setopt($ch, CURLOPT_HEADER, true);
+		curl_exec($ch);
+	}
+
+}