From cfaa248c722700d845831968221a2c7c26990bde Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 15 May 2020 23:32:54 -0600 Subject: [PATCH] Update SiteController, add legacy profile/webfinger redirect --- app/Http/Controllers/SiteController.php | 24 ++++++++++++++++++++++++ routes/web.php | 1 + 2 files changed, 25 insertions(+) diff --git a/app/Http/Controllers/SiteController.php b/app/Http/Controllers/SiteController.php index 6e58999e5..f6344f371 100644 --- a/app/Http/Controllers/SiteController.php +++ b/app/Http/Controllers/SiteController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Support\Str; use App, Auth, Cache, View; use App\Util\Lexer\PrettyNumber; use App\{Follower, Page, Profile, Status, User, UserFilter}; @@ -129,4 +130,27 @@ class SiteController extends Controller $following = $user != null ? FollowerService::follows($user->profile_id, $profile->id) : false; return view('site.intents.follow', compact('profile', 'user', 'following')); } + + public function legacyProfileRedirect(Request $request, $username) + { + $username = Str::contains($username, '@') ? '@' . $username : $username; + if(str_contains($username, '@')) { + $profile = Profile::whereUsername($username) + ->firstOrFail(); + + if($profile->domain == null) { + $url = "/$profile->username"; + } else { + $url = "/i/web/profile/_/{$profile->id}"; + } + + } else { + $profile = Profile::whereUsername($username) + ->whereNull('domain') + ->firstOrFail(); + $url = "/$profile->username"; + } + + return redirect($url); + } } diff --git a/routes/web.php b/routes/web.php index 2799d10e7..5ecc43681 100644 --- a/routes/web.php +++ b/routes/web.php @@ -428,5 +428,6 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::get('p/{username}/{id}.json', 'StatusController@showObject'); Route::get('p/{username}/{id}', 'StatusController@show'); Route::get('{username}/embed', 'ProfileController@embed'); + Route::get('@{username}', 'SiteController@legacyProfileRedirect'); Route::get('{username}', 'ProfileController@show'); });