123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- <?php
- namespace App\Http\Controllers;
- use App\Http\Requests\ProfileMigrationStoreRequest;
- use App\Jobs\ProfilePipeline\ProfileMigrationDeliverMoveActivityPipeline;
- use App\Jobs\ProfilePipeline\ProfileMigrationMoveFollowersPipeline;
- use App\Models\ProfileAlias;
- use App\Models\ProfileMigration;
- use App\Services\AccountService;
- use App\Services\WebfingerService;
- use App\Util\ActivityPub\Helpers;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Bus;
- class ProfileMigrationController extends Controller
- {
- public function __construct()
- {
- $this->middleware('auth');
- }
- public function index(Request $request)
- {
- abort_if((bool) config_cache('federation.activitypub.enabled') === false, 404);
- if ((bool) config_cache('federation.migration') === false) {
- return redirect(route('help.account-migration'));
- }
- $hasExistingMigration = ProfileMigration::whereProfileId($request->user()->profile_id)
- ->where('created_at', '>', now()->subDays(30))
- ->exists();
- return view('settings.migration.index', compact('hasExistingMigration'));
- }
- public function store(ProfileMigrationStoreRequest $request)
- {
- abort_if((bool) config_cache('federation.activitypub.enabled') === false, 404);
- $acct = WebfingerService::rawGet($request->safe()->acct);
- if (! $acct) {
- return redirect()->back()->withErrors(['acct' => 'The new account you provided is not responding to our requests.']);
- }
- $newAccount = Helpers::profileFetch($acct);
- if (! $newAccount) {
- return redirect()->back()->withErrors(['acct' => 'An error occured, please try again later. Code: res-failed-account-fetch']);
- }
- $user = $request->user();
- ProfileAlias::updateOrCreate([
- 'profile_id' => $user->profile_id,
- 'acct' => $request->safe()->acct,
- 'uri' => $acct,
- ]);
- $migration = ProfileMigration::create([
- 'profile_id' => $request->user()->profile_id,
- 'acct' => $request->safe()->acct,
- 'followers_count' => $request->user()->profile->followers_count,
- 'target_profile_id' => $newAccount['id'],
- ]);
- $user->profile->update([
- 'moved_to_profile_id' => $newAccount->id,
- 'indexable' => false,
- ]);
- AccountService::del($user->profile_id);
- Bus::batch([
- new ProfileMigrationDeliverMoveActivityPipeline($migration, $user->profile, $newAccount),
- new ProfileMigrationMoveFollowersPipeline($user->profile_id, $newAccount->id),
- ])->onQueue('follow')->dispatch();
- return redirect()->back()->with(['status' => 'Succesfully migrated account!']);
- }
- }
|