From 2e4e8bdf0aad96b715a387ec8834a9759ed87ad8 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Thu, 20 Jun 2019 03:06:34 +0000
Subject: [PATCH] Don't send activities to "null" endpoints

---
 src/Model/APContact.php                  | 16 +++++++++++-----
 src/Protocol/ActivityPub/Transmitter.php | 20 ++++++++++++++++++++
 2 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/src/Model/APContact.php b/src/Model/APContact.php
index cfbfa683cf..b027d6c478 100644
--- a/src/Model/APContact.php
+++ b/src/Model/APContact.php
@@ -87,6 +87,8 @@ class APContact extends BaseObject
 			return false;
 		}
 
+		$fetched_contact = false;
+
 		if (empty($update)) {
 			if (is_null($update)) {
 				$ref_update = DateTimeFormat::utc('now - 1 month');
@@ -110,24 +112,28 @@ class APContact extends BaseObject
 			if (!is_null($update)) {
 				return DBA::isResult($apcontact) ? $apcontact : false;
 			}
+
+			if (DBA::isResult($apcontact)) {
+				$fetched_contact = $apcontact;
+			}
 		}
 
 		if (empty(parse_url($url, PHP_URL_SCHEME))) {
 			$url = self::addrToUrl($url);
 			if (empty($url)) {
-				return false;
+				return $fetched_contact;
 			}
 		}
 
 		$data = ActivityPub::fetchContent($url);
 		if (empty($data)) {
-			return false;
+			return $fetched_contact;
 		}
 
 		$compacted = JsonLD::compact($data);
 
 		if (empty($compacted['@id'])) {
-			return false;
+			return $fetched_contact;
 		}
 
 		$apcontact = [];
@@ -168,12 +174,12 @@ class APContact extends BaseObject
 
 		// Quit if none of the basic values are set
 		if (empty($apcontact['url']) || empty($apcontact['inbox']) || empty($apcontact['type'])) {
-			return false;
+			return $fetched_contact;
 		}
 
 		// Quit if this doesn't seem to be an account at all
 		if (!in_array($apcontact['type'], ActivityPub::ACCOUNT_TYPES)) {
-			return false;
+			return $fetched_contact;
 		}
 
 		$parts = parse_url($apcontact['url']);
diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php
index 81b8bc1de3..7256806329 100644
--- a/src/Protocol/ActivityPub/Transmitter.php
+++ b/src/Protocol/ActivityPub/Transmitter.php
@@ -1479,6 +1479,10 @@ class Transmitter
 	public static function sendActivity($activity, $target, $uid, $id = '')
 	{
 		$profile = APContact::getByURL($target);
+		if (empty($profile['inbox'])) {
+			Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]);
+			return;
+		}
 
 		$owner = User::getOwnerDataById($uid);
 
@@ -1515,6 +1519,10 @@ class Transmitter
 	public static function sendFollowObject($object, $target, $uid = 0)
 	{
 		$profile = APContact::getByURL($target);
+		if (empty($profile['inbox'])) {
+			Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]);
+			return;
+		}
 
 		if (empty($uid)) {
 			// Fetch the list of administrators
@@ -1561,6 +1569,10 @@ class Transmitter
 	public static function sendContactAccept($target, $id, $uid)
 	{
 		$profile = APContact::getByURL($target);
+		if (empty($profile['inbox'])) {
+			Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]);
+			return;
+		}
 
 		$owner = User::getOwnerDataById($uid);
 		$data = ['@context' => ActivityPub::CONTEXT,
@@ -1594,6 +1606,10 @@ class Transmitter
 	public static function sendContactReject($target, $id, $uid)
 	{
 		$profile = APContact::getByURL($target);
+		if (empty($profile['inbox'])) {
+			Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]);
+			return;
+		}
 
 		$owner = User::getOwnerDataById($uid);
 		$data = ['@context' => ActivityPub::CONTEXT,
@@ -1627,6 +1643,10 @@ class Transmitter
 	public static function sendContactUndo($target, $cid, $uid)
 	{
 		$profile = APContact::getByURL($target);
+		if (empty($profile['inbox'])) {
+			Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]);
+			return;
+		}
 
 		$object_id = self::activityIDFromContact($cid);
 		if (empty($object_id)) {