target = $target; $this->activity = $activity; } /** * Get the middleware the job should pass through. * * @return array */ public function middleware(): array { return [ new WithoutOverlapping('process-move-cleanup-legacy-followers:'.$this->target), (new ThrottlesExceptions(2, 5 * 60))->backoff(5), ]; } /** * Determine the time at which the job should timeout. */ public function retryUntil(): DateTime { return now()->addMinutes(5); } /** * Execute the job. */ public function handle(): void { if (config('app.env') !== 'production' || (bool) config_cache('federation.activitypub.enabled') == false) { throw new Exception('Activitypub not enabled'); } $target = $this->target; $actor = $this->activity; $targetAccount = Helpers::profileFetch($target); $actorAccount = Helpers::profileFetch($actor); if (! $targetAccount || ! $actorAccount) { throw new Exception('Invalid move accounts'); } UserFilter::where('filterable_type', 'App\Profile') ->where('filterable_id', $actorAccount['id']) ->update(['filterable_id' => $targetAccount['id']]); Follower::whereFollowingId($actorAccount['id'])->delete(); $oldProfile = Profile::find($actorAccount['id']); if ($oldProfile) { $oldProfile->moved_to_profile_id = $targetAccount['id']; $oldProfile->save(); AccountService::del($oldProfile->id); AccountService::del($targetAccount['id']); } } }