mirror of https://github.com/pixelfed/pixelfed
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
<?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);
 | 
						|
	}
 | 
						|
 | 
						|
} |