diff --git a/app/Http/Controllers/FederationController.php b/app/Http/Controllers/FederationController.php index 245298d29..f498c7317 100644 --- a/app/Http/Controllers/FederationController.php +++ b/app/Http/Controllers/FederationController.php @@ -154,23 +154,27 @@ class FederationController extends Controller } if(isset($obj['type']) && $obj['type'] === 'Delete') { - $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) { + if(isset($obj['object']) && isset($obj['object']['type']) && isset($obj['object']['id'])) { + if($obj['object']['type'] === 'Person') { + if(Profile::whereRemoteUrl($obj['object']['id'])->exists()) { + dispatch(new DeleteWorker($headers, $payload))->onQueue('delete'); + return; + } + } + + if($obj['object']['type'] === 'Tombstone') { + if(Status::whereObjectUrl($obj['object']['id'])->exists()) { + dispatch(new DeleteWorker($headers, $payload))->onQueue('delete'); + return; + } + } + + if($obj['object']['type'] === 'Story') { + dispatch(new DeleteWorker($headers, $payload))->onQueue('delete'); return; - } else { - Cache::put($lockKey, 1, 43200); - usleep(5000); } } - dispatch(new DeleteWorker($headers, $payload))->onQueue('delete'); + return; } else if( isset($obj['type']) && in_array($obj['type'], ['Follow', 'Accept'])) { dispatch(new InboxValidator($username, $headers, $payload))->onQueue('follow'); } else { @@ -208,21 +212,27 @@ class FederationController extends Controller } if(isset($obj['type']) && $obj['type'] === 'Delete') { - $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) { + if(isset($obj['object']) && isset($obj['object']['type']) && isset($obj['object']['id'])) { + if($obj['object']['type'] === 'Person') { + if(Profile::whereRemoteUrl($obj['object']['id'])->exists()) { + dispatch(new DeleteWorker($headers, $payload))->onQueue('delete'); + return; + } + } + + if($obj['object']['type'] === 'Tombstone') { + if(Status::whereObjectUrl($obj['object']['id'])->exists()) { + dispatch(new DeleteWorker($headers, $payload))->onQueue('delete'); + return; + } + } + + if($obj['object']['type'] === 'Story') { + dispatch(new DeleteWorker($headers, $payload))->onQueue('delete'); return; } } - Cache::put($lockKey, 1, 43200); - dispatch(new DeleteWorker($headers, $payload))->onQueue('delete'); + return; } else if( isset($obj['type']) && in_array($obj['type'], ['Follow', 'Accept'])) { dispatch(new InboxWorker($headers, $payload))->onQueue('follow'); } else {