瀏覽代碼

Update FederationController

Daniel Supernault 3 年之前
父節點
當前提交
cb2392f351
共有 2 個文件被更改,包括 34 次插入9 次删除
  1. 34 0
      app/Http/Controllers/FederationController.php
  2. 0 9
      app/Jobs/InboxPipeline/DeleteWorker.php

+ 34 - 0
app/Http/Controllers/FederationController.php

@@ -121,6 +121,23 @@ class FederationController extends Controller
 		$obj = json_decode($payload, true, 8);
 
 		if(isset($obj['type']) && $obj['type'] === 'Delete') {
+			if(!isset($obj['id'])) {
+				return;
+			}
+			$lockKey = 'pf:ap:del-lock:' . hash('sha256', $obj['id']);
+			if( isset($obj['actor']) &&
+				isset($obj['object']) &&
+				isset($obj['id']) &&
+				is_string($obj['id']) &&
+				is_string($obj['actor']) &&
+				is_string($obj['object']) &&
+				$obj['actor'] == $obj['object']
+			) {
+				if(Cache::get($lockKey) !== null) {
+					return;
+				}
+			}
+			Cache::put($lockKey, 1, 3600);
 			dispatch(new DeleteWorker($headers, $payload))->onQueue('delete');
 		} else {
 			dispatch(new InboxValidator($username, $headers, $payload))->onQueue('high');
@@ -138,6 +155,23 @@ class FederationController extends Controller
 		$obj = json_decode($payload, true, 8);
 
 		if(isset($obj['type']) && $obj['type'] === 'Delete') {
+			if(!isset($obj['id'])) {
+				return;
+			}
+			$lockKey = 'pf:ap:del-lock:' . hash('sha256', $obj['id']);
+			if( isset($obj['actor']) &&
+				isset($obj['object']) &&
+				isset($obj['id']) &&
+				is_string($obj['id']) &&
+				is_string($obj['actor']) &&
+				is_string($obj['object']) &&
+				$obj['actor'] == $obj['object']
+			) {
+				if(Cache::get($lockKey) !== null) {
+					return;
+				}
+			}
+			Cache::put($lockKey, 1, 3600);
 			dispatch(new DeleteWorker($headers, $payload))->onQueue('delete');
 		} else {
 			dispatch(new InboxWorker($headers, $payload))->onQueue('high');

+ 0 - 9
app/Jobs/InboxPipeline/DeleteWorker.php

@@ -49,15 +49,6 @@ class DeleteWorker implements ShouldQueue
 		$headers = $this->headers;
 		$payload = json_decode($this->payload, true, 8);
 
-		if(isset($payload['id'])) {
-			$lockKey = 'pf:ap:del-lock:' . hash('sha256', $payload['id']);
-			if(Cache::get($lockKey) !== null) {
-				// Job processed already
-				return 1;
-			}
-			Cache::put($lockKey, 1, 300);
-		}
-
 		if(!isset($headers['signature']) || !isset($headers['date'])) {
 			return;
 		}