瀏覽代碼

Update federation logic

Daniel Supernault 2 年之前
父節點
當前提交
836f384fb8

+ 1 - 1
app/Jobs/InboxPipeline/InboxValidator.php

@@ -60,7 +60,7 @@ class InboxValidator implements ShouldQueue
         $payload = json_decode($this->payload, true, 8);
 
         if(isset($payload['id'])) {
-            $lockKey = 'ap:icid:' . hash('sha256', $payload['id']);
+            $lockKey = 'pf:ap:user-inbox:activity:' . hash('sha256', $payload['id']);
             if(Cache::get($lockKey) !== null) {
                 // Job processed already
                 return 1;

+ 1 - 1
app/Jobs/InboxPipeline/InboxWorker.php

@@ -57,7 +57,7 @@ class InboxWorker implements ShouldQueue
         $payload = json_decode($this->payload, true, 8);
 
         if(isset($payload['id'])) {
-            $lockKey = 'ap:icid:' . hash('sha256', $payload['id']);
+            $lockKey = 'pf:ap:user-inbox:activity:' . hash('sha256', $payload['id']);
             if(Cache::get($lockKey) !== null) {
                 // Job processed already
                 return 1;

+ 4 - 0
app/Util/ActivityPub/Helpers.php

@@ -373,6 +373,10 @@ class Helpers {
 			return;
 		}
 
+		if(!isset($activity['object']['attributedTo'])) {
+			return;
+		}
+
 		$attributedTo = is_string($activity['object']['attributedTo']) ?
 			$activity['object']['attributedTo'] :
 			(is_array($activity['object']['attributedTo']) ?

+ 15 - 4
app/Util/ActivityPub/Inbox.php

@@ -180,6 +180,8 @@ class Inbox
 				StoryFetch::dispatchNow($this->payload);
 			break;
 		}
+
+		return;
 	}
 
 	public function handleCreateActivity()
@@ -267,14 +269,23 @@ class Inbox
 			return;
 		}
 
-		if($actor->followers()->count() == 0) {
-			return;
+		if($actor->followers_count == 0) {
+			if(FollowerService::followerCount($actor->id, true) == 0) {
+				return;
+			}
 		}
 
+		$hasUrl = isset($activity['url']);
 		$url = isset($activity['url']) ? $activity['url'] : $activity['id'];
 
-		if(Status::whereUrl($url)->exists()) {
-			return;
+		if($hasUrl) {
+			if(Status::whereUri($url)->exists()) {
+				return;
+			}
+		} else {
+			if(Status::whereObjectUrl($url)->exists()) {
+				return;
+			}
 		}
 
 		Helpers::storeStatus(