diff --git a/CHANGELOG.md b/CHANGELOG.md index ca899ed46..99003abc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Added ### Fixed +- Stories on postgres instances ([5ffa71da](https://github.com/pixelfed/pixelfed/commit/5ffa71da)) ### Updated - Updated StatusController, restrict edits to 24 hours ([ae24433b](https://github.com/pixelfed/pixelfed/commit/ae24433b)) diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index fd0b2fa88..ec7e15b7c 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -53,6 +53,11 @@ class RegisterController extends Controller */ protected function validator(array $data) { + if(config('database.default') == 'pgsql') { + $data['username'] = strtolower($data['username']); + $data['email'] = strtolower($data['email']); + } + $this->validateUsername($data['username']); $this->validateEmail($data['email']); @@ -105,6 +110,11 @@ class RegisterController extends Controller */ protected function create(array $data) { + if(config('database.default') == 'pgsql') { + $data['username'] = strtolower($data['username']); + $data['email'] = strtolower($data['email']); + } + return User::create([ 'name' => $data['name'], 'username' => $data['username'], diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 20e4d08ec..e5f90693a 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -22,6 +22,10 @@ class ProfileController extends Controller { public function show(Request $request, $username) { + if(config('database.default') == 'pgsql') { + $username = strtolower($username); + } + $user = Profile::whereNull('domain') ->whereNull('status') ->whereUsername($username) diff --git a/app/Http/Controllers/StoryController.php b/app/Http/Controllers/StoryController.php index a7cfb9717..68d93272b 100644 --- a/app/Http/Controllers/StoryController.php +++ b/app/Http/Controllers/StoryController.php @@ -108,16 +108,25 @@ class StoryController extends Controller $profile = $request->user()->profile; $following = $profile->following->pluck('id')->toArray(); - $groupBy = config('database.default') == 'pgsql' ? 'id' : 'profile_id'; - $stories = Story::with('profile') - ->groupBy($groupBy) - ->whereIn('profile_id', $following) - ->where('expires_at', '>', now()) - ->orderByDesc('expires_at') - ->take(9) - ->get() - ->map(function($s, $k) { + if(config('database.default') == 'pgsql') { + $db = Story::with('profile') + ->whereIn('profile_id', $following) + ->where('expires_at', '>', now()) + ->distinct('profile_id') + ->take(9) + ->get(); + } else { + $db = Story::with('profile') + ->whereIn('profile_id', $following) + ->where('expires_at', '>', now()) + ->orderByDesc('expires_at') + ->groupBy('profile_id') + ->take(9) + ->get(); + } + + $stories = $db->map(function($s, $k) { return [ 'id' => (string) $s->id, 'photo' => $s->profile->avatarUrl(), diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index da74a1cb2..af46fee5e 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -412,14 +412,14 @@ class Helpers { $profile = Profile::whereRemoteUrl($res['id'])->first(); if(!$profile) { $profile = new Profile(); - $profile->domain = $domain; - $profile->username = (string) Purify::clean($remoteUsername); + $profile->domain = strtolower($domain); + $profile->username = strtolower(Purify::clean($remoteUsername)); $profile->name = isset($res['name']) ? Purify::clean($res['name']) : 'user'; $profile->bio = isset($res['summary']) ? Purify::clean($res['summary']) : null; $profile->sharedInbox = isset($res['endpoints']) && isset($res['endpoints']['sharedInbox']) ? $res['endpoints']['sharedInbox'] : null; - $profile->inbox_url = $res['inbox']; - $profile->outbox_url = $res['outbox']; - $profile->remote_url = $res['id']; + $profile->inbox_url = strtolower($res['inbox']); + $profile->outbox_url = strtolower($res['outbox']); + $profile->remote_url = strtolower($res['id']); $profile->public_key = $res['publicKey']['publicKeyPem']; $profile->key_id = $res['publicKey']['id']; $profile->save();