From e1f694b21ae54820e332ff3f31ad7c9f9ae55639 Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 24 Jan 2025 21:29:36 -0700 Subject: [PATCH 1/5] add kickstarter and monthly users badge (#5589) (#5591) Co-authored-by: Simon Laux --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 08568fc6d..477044ef1 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,11 @@

+

+Kickstarter Campaign +Monthly active users from FediDB +

+ ## Introduction A free and ethical photo sharing platform, powered by ActivityPub federation. From fa4474bc38d64b1d96272f9d45e90289020fcb11 Mon Sep 17 00:00:00 2001 From: daniel Date: Sat, 25 Jan 2025 08:45:42 -0700 Subject: [PATCH 2/5] Staging (#5594) * add kickstarter and monthly users badge (#5589) Co-authored-by: daniel * DM --------- Co-authored-by: Simon Laux --- app/Http/Controllers/Api/ApiV1Controller.php | 2 ++ app/Http/Controllers/DirectMessageController.php | 1 + 2 files changed, 3 insertions(+) diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 156c44a6b..0de794a4c 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -3006,6 +3006,8 @@ class ApiV1Controller extends Controller 'scope' => 'nullable|in:inbox,sent,requests', ]); + return []; + $limit = $request->input('limit', 20); $scope = $request->input('scope', 'inbox'); $user = $request->user(); diff --git a/app/Http/Controllers/DirectMessageController.php b/app/Http/Controllers/DirectMessageController.php index b2e0df3a2..b29680058 100644 --- a/app/Http/Controllers/DirectMessageController.php +++ b/app/Http/Controllers/DirectMessageController.php @@ -30,6 +30,7 @@ class DirectMessageController extends Controller { public function __construct() { + abort(404); $this->middleware('auth'); } From bd82bba9f822c94fc90dadfbb62164258438cd41 Mon Sep 17 00:00:00 2001 From: daniel Date: Sat, 25 Jan 2025 21:45:26 -0700 Subject: [PATCH 3/5] Staging (#5603) * add kickstarter and monthly users badge (#5589) Co-authored-by: daniel * DM * Fix the local column for statuses to not include remote shares (#5513) * Fix the local column for statuses to not include remote shares * Chunk the migration * Refactor migration --------- Co-authored-by: Simon Laux Co-authored-by: Anil Kulkarni <6687139+intentionally-left-nil@users.noreply.github.com> --- app/Util/ActivityPub/Inbox.php | 1 + .../2025_01_18_061532_fix_local_statuses.php | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 database/migrations/2025_01_18_061532_fix_local_statuses.php diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index e98b48c49..ddd377a70 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -645,6 +645,7 @@ class Inbox 'profile_id' => $actor->id, 'reblog_of_id' => $parent->id, 'type' => 'share', + 'local' => false, ]); Notification::firstOrCreate( diff --git a/database/migrations/2025_01_18_061532_fix_local_statuses.php b/database/migrations/2025_01_18_061532_fix_local_statuses.php new file mode 100644 index 000000000..06b3b9fb1 --- /dev/null +++ b/database/migrations/2025_01_18_061532_fix_local_statuses.php @@ -0,0 +1,25 @@ +join('profiles', 'profiles.id', '=', 'statuses.profile_id') + ->leftJoin('users', 'users.id', '=', 'profiles.user_id') + ->where('statuses.local', true) + ->where('statuses.type', 'share') + ->whereNull('users.id') + ->update(['statuses.local' => false]); + } + + public function down(): void + { + // No down migration needed since this is a data fix + } +}; From 552901cc0e218a3ca37711b577c8b375d5bf81fd Mon Sep 17 00:00:00 2001 From: daniel Date: Sun, 26 Jan 2025 00:05:22 -0700 Subject: [PATCH 4/5] Staging (#5604) * add kickstarter and monthly users badge (#5589) Co-authored-by: daniel * DM * Fix the local column for statuses to not include remote shares (#5513) * Fix the local column for statuses to not include remote shares * Chunk the migration * Refactor migration * Fix GroupController, move groups enabled check to each method to fix route:list * Update changelog --------- Co-authored-by: Simon Laux Co-authored-by: Anil Kulkarni <6687139+intentionally-left-nil@users.noreply.github.com> --- CHANGELOG.md | 1 + app/Http/Controllers/GroupController.php | 29 ++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99d2d2065..abed4f19d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ - Update SearchApiV2Service, fix hashtag search ([83c1a7fd](https://github.com/pixelfed/pixelfed/commit/83c1a7fd)) - Update AP Helpers, fix comment bug ([22eae69f](https://github.com/pixelfed/pixelfed/commit/22eae69f)) - Update ComposeController, add max_media_attachments attribute ([17918cbe](https://github.com/pixelfed/pixelfed/commit/17918cbe)) +- Fix GroupController, move groups enabled check to each method to fix route:list ([f260572e](https://github.com/pixelfed/pixelfed/commit/f260572e)) - ([](https://github.com/pixelfed/pixelfed/commit/)) ## [v0.12.4 (2024-11-08)](https://github.com/pixelfed/pixelfed/compare/v0.12.4...dev) diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php index 881d31f01..68aadcb89 100644 --- a/app/Http/Controllers/GroupController.php +++ b/app/Http/Controllers/GroupController.php @@ -27,11 +27,11 @@ class GroupController extends GroupFederationController public function __construct() { $this->middleware('auth'); - abort_unless(config('groups.enabled'), 404); } public function index(Request $request) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); return view('layouts.spa'); @@ -39,6 +39,7 @@ class GroupController extends GroupFederationController public function home(Request $request) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); return view('layouts.spa'); @@ -46,6 +47,7 @@ class GroupController extends GroupFederationController public function show(Request $request, $id, $path = false) { + abort_unless(config('groups.enabled'), 404); $group = Group::find($id); if (! $group || $group->status) { @@ -61,6 +63,7 @@ class GroupController extends GroupFederationController public function showStatus(Request $request, $gid, $sid) { + abort_unless(config('groups.enabled'), 404); $group = Group::find($gid); $pid = optional($request->user())->profile_id ?? false; @@ -81,6 +84,7 @@ class GroupController extends GroupFederationController public function getGroup(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); $group = Group::whereNull('status')->findOrFail($id); $pid = optional($request->user())->profile_id ?? false; @@ -91,6 +95,7 @@ class GroupController extends GroupFederationController public function showStatusLikes(Request $request, $id, $sid) { + abort_unless(config('groups.enabled'), 404); $group = Group::findOrFail($id); $user = $request->user(); $pid = $user->profile_id; @@ -114,6 +119,7 @@ class GroupController extends GroupFederationController public function groupSettings(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $group = Group::findOrFail($id); $pid = $request->user()->profile_id; @@ -125,6 +131,7 @@ class GroupController extends GroupFederationController public function joinGroup(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); $group = Group::findOrFail($id); $pid = $request->user()->profile_id; abort_if($group->isMember($pid), 404); @@ -159,6 +166,7 @@ class GroupController extends GroupFederationController public function updateGroup(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); $this->validate($request, [ 'description' => 'nullable|max:500', 'membership' => 'required|in:all,local,private', @@ -257,11 +265,14 @@ class GroupController extends GroupFederationController protected function toJson($group, $pid = false) { + abort_unless(config('groups.enabled'), 404); + return GroupService::get($group->id, $pid); } public function groupLeave(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $pid = $request->user()->profile_id; @@ -281,6 +292,7 @@ class GroupController extends GroupFederationController public function cancelJoinRequest(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $pid = $request->user()->profile_id; @@ -299,6 +311,7 @@ class GroupController extends GroupFederationController public function metaBlockSearch(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $group = Group::findOrFail($id); $pid = $request->user()->profile_id; @@ -332,6 +345,7 @@ class GroupController extends GroupFederationController public function reportCreate(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $group = Group::findOrFail($id); $pid = $request->user()->profile_id; @@ -368,7 +382,7 @@ class GroupController extends GroupFederationController 'You already reported this' ); - $report = new GroupReport(); + $report = new GroupReport; $report->group_id = $group->id; $report->profile_id = $pid; $report->type = $type; @@ -399,6 +413,7 @@ class GroupController extends GroupFederationController public function reportAction(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $group = Group::findOrFail($id); $pid = $request->user()->profile_id; @@ -477,6 +492,7 @@ class GroupController extends GroupFederationController public function getMemberInteractionLimits(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $group = Group::findOrFail($id); $pid = $request->user()->profile_id; @@ -492,6 +508,7 @@ class GroupController extends GroupFederationController public function updateMemberInteractionLimits(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $group = Group::findOrFail($id); $pid = $request->user()->profile_id; @@ -553,6 +570,7 @@ class GroupController extends GroupFederationController public function showProfile(Request $request, $id, $pid) { + abort_unless(config('groups.enabled'), 404); $group = Group::find($id); if (! $group || $group->status) { @@ -564,6 +582,7 @@ class GroupController extends GroupFederationController public function showProfileByUsername(Request $request, $id, $pid) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); if (! $request->user()) { return redirect("/{$pid}"); @@ -597,6 +616,7 @@ class GroupController extends GroupFederationController public function groupInviteLanding(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort(404, 'Not yet implemented'); $group = Group::findOrFail($id); @@ -605,6 +625,7 @@ class GroupController extends GroupFederationController public function groupShortLinkRedirect(Request $request, $hid) { + abort_unless(config('groups.enabled'), 404); $gid = HashidService::decode($hid); $group = Group::findOrFail($gid); @@ -613,6 +634,7 @@ class GroupController extends GroupFederationController public function groupInviteClaim(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); $group = GroupService::get($id); abort_if(! $group || empty($group), 404); @@ -621,6 +643,7 @@ class GroupController extends GroupFederationController public function groupMemberInviteCheck(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $pid = $request->user()->profile_id; $group = Group::findOrFail($id); @@ -636,6 +659,7 @@ class GroupController extends GroupFederationController public function groupMemberInviteAccept(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $pid = $request->user()->profile_id; $group = Group::findOrFail($id); @@ -661,6 +685,7 @@ class GroupController extends GroupFederationController public function groupMemberInviteDecline(Request $request, $id) { + abort_unless(config('groups.enabled'), 404); abort_if(! $request->user(), 404); $pid = $request->user()->profile_id; $group = Group::findOrFail($id); From 3eb9257def00e9d5831a72b3d7f6ca4ff7a9d002 Mon Sep 17 00:00:00 2001 From: tercean Date: Mon, 3 Feb 2025 00:46:26 +0100 Subject: [PATCH 5/5] Skip thumbnail cloud upload if no thumbnail exists migrate2cloud fails on media without thumbnail. fix check for existing thumbnail, skip upload if none exists. --- app/Services/MediaStorageService.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Services/MediaStorageService.php b/app/Services/MediaStorageService.php index 87bb9a586..4a6964ad1 100644 --- a/app/Services/MediaStorageService.php +++ b/app/Services/MediaStorageService.php @@ -85,7 +85,9 @@ class MediaStorageService protected function localToCloud($media) { $path = storage_path('app/'.$media->media_path); - $thumb = storage_path('app/'.$media->thumbnail_path); + if ($media->thumbnail_path) { + $thumb = storage_path('app/'.$media->thumbnail_path); + } $p = explode('/', $media->media_path); $name = array_pop($p); @@ -94,7 +96,7 @@ class MediaStorageService $storagePath = implode('/', $p); $url = ResilientMediaStorageService::store($storagePath, $path, $name); - if ($thumb) { + if ($media->thumbnail_path) { $thumbUrl = ResilientMediaStorageService::store($storagePath, $thumb, $thumbname); $media->thumbnail_url = $thumbUrl; }