From 00770c6002e2d664ac850f6aab8220646ccd8776 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Wed, 1 Jun 2022 00:13:44 -0600 Subject: [PATCH 01/27] Update livestream config --- app/Http/Controllers/LiveStreamController.php | 16 ++++++++++++++++ config/livestreaming.php | 17 +++++++++++------ routes/api.php | 1 + 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/LiveStreamController.php b/app/Http/Controllers/LiveStreamController.php index a25cc3f12..51cc160f9 100644 --- a/app/Http/Controllers/LiveStreamController.php +++ b/app/Http/Controllers/LiveStreamController.php @@ -217,4 +217,20 @@ class LiveStreamController extends Controller return; } + + public function getConfig(Request $request) + { + abort_if(!config('livestreaming.enabled'), 400); + abort_if(!$request->user(), 403); + + $res = [ + 'enabled' => config('livestreaming.enabled'), + 'broadcast' => [ + 'sources' => config('livestreaming.broadcast.sources'), + 'limits' => config('livestreaming.broadcast.limits') + ], + ]; + + return response()->json($res, 200, [], JSON_UNESCAPED_SLASHES); + } } diff --git a/config/livestreaming.php b/config/livestreaming.php index 00ad13fd4..a5c08ba20 100644 --- a/config/livestreaming.php +++ b/config/livestreaming.php @@ -10,14 +10,19 @@ return [ ], 'broadcast' => [ - 'max_duration' => env('HLS_LIVE_BROADCAST_MAX_DURATION', 60), - 'max_active' => env('HLS_LIVE_BROADCAST_MAX_ACTIVE', 10), + 'max_duration' => (int) env('HLS_LIVE_BROADCAST_MAX_DURATION', 60), + 'max_active' => (int) env('HLS_LIVE_BROADCAST_MAX_ACTIVE', 10), 'limits' => [ - 'enabled' => env('HLS_LIVE_BROADCAST_LIMITS', true), - 'min_follower_count' => env('HLS_LIVE_BROADCAST_LIMITS_MIN_FOLLOWERS', 100), - 'min_account_age' => env('HLS_LIVE_BROADCAST_LIMITS_MIN_ACCOUNT_AGE', 14), - 'admins_only' => env('HLS_LIVE_BROADCAST_LIMITS_ADMINS_ONLY', true) + 'enabled' => (bool) env('HLS_LIVE_BROADCAST_LIMITS', true), + 'min_follower_count' => (int) env('HLS_LIVE_BROADCAST_LIMITS_MIN_FOLLOWERS', 100), + 'min_account_age' => (int) env('HLS_LIVE_BROADCAST_LIMITS_MIN_ACCOUNT_AGE', 14), + 'admins_only' => (bool) env('HLS_LIVE_BROADCAST_LIMITS_ADMINS_ONLY', true) + ], + + 'sources' => [ + 'app' => (bool) env('HLS_LIVE_BROADCAST_SOURCE_APP', false), + 'web' => (bool) env('HLS_LIVE_BROADCAST_SOURCE_WEB', false) ] ], diff --git a/routes/api.php b/routes/api.php index 982e6f81d..844942c36 100644 --- a/routes/api.php +++ b/routes/api.php @@ -105,5 +105,6 @@ Route::group(['prefix' => 'api'], function() use($middleware) { Route::get('chat/latest', 'LiveStreamController@getLatestChat')->middleware($middleware); Route::post('chat/message', 'LiveStreamController@addChatComment')->middleware($middleware); Route::post('chat/delete', 'LiveStreamController@deleteChatComment')->middleware($middleware); + Route::get('config', 'LiveStreamController@getConfig')->middleware($middleware); }); }); From 3c3e0bef6458cdfbb28f289db6a59ec05a1c593e Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 2 Jun 2022 23:44:28 -0600 Subject: [PATCH 02/27] Add migration --- ...object_column_to_follow_requests_table.php | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 database/migrations/2022_06_03_051308_add_object_column_to_follow_requests_table.php diff --git a/database/migrations/2022_06_03_051308_add_object_column_to_follow_requests_table.php b/database/migrations/2022_06_03_051308_add_object_column_to_follow_requests_table.php new file mode 100644 index 000000000..64f46151d --- /dev/null +++ b/database/migrations/2022_06_03_051308_add_object_column_to_follow_requests_table.php @@ -0,0 +1,34 @@ +json('activity')->nullable()->after('following_id'); + $table->timestamp('handled_at')->nullable()->after('is_local'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('follow_requests', function (Blueprint $table) { + $table->dropColumn('activity'); + $table->dropColumn('handled_at'); + }); + } +} From c82f208517845344d5f360656f73318882eda176 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 2 Jun 2022 23:47:43 -0600 Subject: [PATCH 03/27] Update Inbox, store follow request activity --- app/Util/ActivityPub/Inbox.php | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index 331fd52c1..a874a39fe 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -473,17 +473,12 @@ class Inbox return; } if($target->is_private == true) { - FollowRequest::firstOrCreate([ + FollowRequest::updateOrCreate([ 'follower_id' => $actor->id, - 'following_id' => $target->id + 'following_id' => $target->id, + ],[ + 'activity' => collect($this->payload)->only(['id','actor','object'])->toArray() ]); - - Cache::forget('profile:follower_count:'.$target->id); - Cache::forget('profile:follower_count:'.$actor->id); - Cache::forget('profile:following_count:'.$target->id); - Cache::forget('profile:following_count:'.$actor->id); - FollowerService::add($actor->id, $target->id); - } else { $follower = new Follower; $follower->profile_id = $actor->id; From 4f99039c15a5fb13e1dcc602a001550b9ac59a72 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 2 Jun 2022 23:48:08 -0600 Subject: [PATCH 04/27] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab894d35b..b2a2a3c63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ - Add ffmpeg config, disable logging by default ([108e3803](https://github.com/pixelfed/pixelfed/commit/108e3803)) - Refactor AP profileFetch logic to fix race conditions and improve updating fields and avatars ([505261da](https://github.com/pixelfed/pixelfed/commit/505261da)) - Update network timeline api, limit falloff to 2 days ([13a66303](https://github.com/pixelfed/pixelfed/commit/13a66303)) +- Update Inbox, store follow request activity ([c82f2085](https://github.com/pixelfed/pixelfed/commit/c82f2085)) - ([](https://github.com/pixelfed/pixelfed/commit/)) ## [v0.11.3 (2022-05-09)](https://github.com/pixelfed/pixelfed/compare/v0.11.2...v0.11.3) From 85fb46668c421d8c27c4fcbf1a84b26a5c90450a Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 3 Jun 2022 01:29:50 -0600 Subject: [PATCH 05/27] Update FollowRequest model --- app/FollowRequest.php | 12 ++++++++- app/Jobs/FollowPipeline/FollowPipeline.php | 5 ---- .../ActivityPub/Verb/AcceptFollow.php | 25 +++++++++++++++++++ app/Util/ActivityPub/Inbox.php | 2 +- 4 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 app/Transformer/ActivityPub/Verb/AcceptFollow.php diff --git a/app/FollowRequest.php b/app/FollowRequest.php index 89bd26e9a..7852e2688 100644 --- a/app/FollowRequest.php +++ b/app/FollowRequest.php @@ -6,7 +6,11 @@ use Illuminate\Database\Eloquent\Model; class FollowRequest extends Model { - protected $fillable = ['follower_id', 'following_id']; + protected $fillable = ['follower_id', 'following_id', 'activity', 'handled_at']; + + protected $casts = [ + 'activity' => 'array', + ]; public function follower() { @@ -27,4 +31,10 @@ class FollowRequest extends Model { return $this->belongsTo(Profile::class, 'following_id', 'id'); } + + public function permalink($append = null) + { + $path = $this->target->permalink("#accepts/follows/{$this->id}{$append}"); + return url($path); + } } diff --git a/app/Jobs/FollowPipeline/FollowPipeline.php b/app/Jobs/FollowPipeline/FollowPipeline.php index 986f22425..f2bab5a96 100644 --- a/app/Jobs/FollowPipeline/FollowPipeline.php +++ b/app/Jobs/FollowPipeline/FollowPipeline.php @@ -63,11 +63,6 @@ class FollowPipeline implements ShouldQueue $notification->item_id = $target->id; $notification->item_type = "App\Profile"; $notification->save(); - - $redis = Redis::connection(); - - $nkey = config('cache.prefix').':user.'.$target->id.'.notifications'; - $redis->lpush($nkey, $notification->id); } catch (Exception $e) { Log::error($e); } diff --git a/app/Transformer/ActivityPub/Verb/AcceptFollow.php b/app/Transformer/ActivityPub/Verb/AcceptFollow.php new file mode 100644 index 000000000..cb5b54a41 --- /dev/null +++ b/app/Transformer/ActivityPub/Verb/AcceptFollow.php @@ -0,0 +1,25 @@ + 'https://www.w3.org/ns/activitystreams', + 'type' => 'Accept', + 'id' => $follow->permalink(), + 'actor' => $follow->target->permalink(), + 'object' => [ + 'type' => 'Follow', + 'id' => $follow->activity ? $follow->activity['id'] : null, + 'actor' => $follow->actor->permalink(), + 'object' => $follow->target->permalink() + ] + ]; + } +} diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index a874a39fe..2d48cb97f 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -477,7 +477,7 @@ class Inbox 'follower_id' => $actor->id, 'following_id' => $target->id, ],[ - 'activity' => collect($this->payload)->only(['id','actor','object'])->toArray() + 'activity' => collect($this->payload)->only(['id','actor','object','type'])->toArray() ]); } else { $follower = new Follower; From 4dc9365acb86ba47697da81ed867453b3123a424 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 3 Jun 2022 04:18:06 -0600 Subject: [PATCH 06/27] Update AccountController, dispatch Accept Follow activity if applicable --- app/FollowRequest.php | 10 +-- app/Http/Controllers/AccountController.php | 10 ++- .../FollowPipeline/FollowAcceptPipeline.php | 69 +++++++++++++++++++ .../ActivityPub/Verb/AcceptFollow.php | 2 +- 4 files changed, 83 insertions(+), 8 deletions(-) create mode 100644 app/Jobs/FollowPipeline/FollowAcceptPipeline.php diff --git a/app/FollowRequest.php b/app/FollowRequest.php index 7852e2688..c1b0ac755 100644 --- a/app/FollowRequest.php +++ b/app/FollowRequest.php @@ -11,6 +11,11 @@ class FollowRequest extends Model protected $casts = [ 'activity' => 'array', ]; + + public function actor() + { + return $this->belongsTo(Profile::class, 'follower_id', 'id'); + } public function follower() { @@ -22,11 +27,6 @@ class FollowRequest extends Model return $this->belongsTo(Profile::class, 'following_id', 'id'); } - public function actor() - { - return $this->belongsTo(Profile::class, 'follower_id', 'id'); - } - public function target() { return $this->belongsTo(Profile::class, 'following_id', 'id'); diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index fc3ff69d3..66e8655e9 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -29,6 +29,7 @@ use App\Transformer\Api\Mastodon\v1\AccountTransformer; use App\Services\AccountService; use App\Services\UserFilterService; use App\Services\RelationshipService; +use App\Jobs\FollowPipeline\FollowAcceptPipeline; class AccountController extends Controller { @@ -394,8 +395,13 @@ class AccountController extends Controller $follow->profile_id = $follower->id; $follow->following_id = $pid; $follow->save(); - FollowPipeline::dispatch($follow); - $followRequest->delete(); + + if($follower->domain != null && $follower->private_key === null) { + FollowAcceptPipeline::dispatch($followRequest); + } else { + FollowPipeline::dispatch($follow); + $followRequest->delete(); + } break; case 'reject': diff --git a/app/Jobs/FollowPipeline/FollowAcceptPipeline.php b/app/Jobs/FollowPipeline/FollowAcceptPipeline.php new file mode 100644 index 000000000..b1c13e2ad --- /dev/null +++ b/app/Jobs/FollowPipeline/FollowAcceptPipeline.php @@ -0,0 +1,69 @@ +followRequest = $followRequest; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $follow = $this->followRequest; + $actor = $follow->actor; + $target = $follow->target; + + if($actor->domain == null || $actor->inbox_url == null || !$target->private_key) { + return; + } + + $fractal = new Fractal\Manager(); + $fractal->setSerializer(new ArraySerializer()); + $resource = new Fractal\Resource\Item($follow, new AcceptFollow()); + $activity = $fractal->createData($resource)->toArray(); + $url = $actor->sharedInbox ?? $actor->inbox_url; + + Helpers::sendSignedObject($target, $url, $activity); + + $follow->delete(); + + return; + } +} diff --git a/app/Transformer/ActivityPub/Verb/AcceptFollow.php b/app/Transformer/ActivityPub/Verb/AcceptFollow.php index cb5b54a41..014e3cfae 100644 --- a/app/Transformer/ActivityPub/Verb/AcceptFollow.php +++ b/app/Transformer/ActivityPub/Verb/AcceptFollow.php @@ -16,7 +16,7 @@ class AcceptFollow extends Fractal\TransformerAbstract 'actor' => $follow->target->permalink(), 'object' => [ 'type' => 'Follow', - 'id' => $follow->activity ? $follow->activity['id'] : null, + 'id' => $follow->activity && isset($follow->activity['id']) ? $follow->activity['id'] : null, 'actor' => $follow->actor->permalink(), 'object' => $follow->target->permalink() ] From 68300c426cbb258a1b0c2386add35c0cc9a274a6 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 3 Jun 2022 04:28:58 -0600 Subject: [PATCH 07/27] Update AccountController --- app/Http/Controllers/AccountController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 66e8655e9..a4e86aee3 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -364,7 +364,8 @@ class AccountController extends Controller 'accounts' => $followers->take(10)->map(function($a) { $actor = $a->actor; return [ - 'id' => $actor->id, + 'rid' => (string) $a->id, + 'id' => (string) $actor->id, 'username' => $actor->username, 'avatar' => $actor->avatarUrl(), 'url' => $actor->url(), From 28a2eb87e7e6fe7f255817a2428c11c2a7ca9820 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 5 Jun 2022 02:09:18 -0600 Subject: [PATCH 08/27] Update livestream config --- config/livestreaming.php | 1 + 1 file changed, 1 insertion(+) diff --git a/config/livestreaming.php b/config/livestreaming.php index a5c08ba20..8a3be4f99 100644 --- a/config/livestreaming.php +++ b/config/livestreaming.php @@ -10,6 +10,7 @@ return [ ], 'broadcast' => [ + 'delete_token_after_finished' => (bool) env('HLS_LIVE_BROADCAST_DELETE_TOKEN_AFTER', true), 'max_duration' => (int) env('HLS_LIVE_BROADCAST_MAX_DURATION', 60), 'max_active' => (int) env('HLS_LIVE_BROADCAST_MAX_ACTIVE', 10), From 4ecbd7cbe4fdd25f878b4527e1463ac4290c6e14 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 5 Jun 2022 02:35:14 -0600 Subject: [PATCH 09/27] Update FollowerService --- app/Services/FollowerService.php | 2 +- app/Services/RelationshipService.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Services/FollowerService.php b/app/Services/FollowerService.php index 3ea3d8ddc..cbf176ef0 100644 --- a/app/Services/FollowerService.php +++ b/app/Services/FollowerService.php @@ -78,11 +78,11 @@ class FollowerService } return $profile ->followers() - ->whereLocalProfile(false) ->get() ->map(function($follow) { return $follow->sharedInbox ?? $follow->inbox_url; }) + ->filter() ->unique() ->values() ->toArray(); diff --git a/app/Services/RelationshipService.php b/app/Services/RelationshipService.php index 1237c0eb8..7c4091f0b 100644 --- a/app/Services/RelationshipService.php +++ b/app/Services/RelationshipService.php @@ -57,6 +57,8 @@ class RelationshipService public static function refresh($aid, $tid) { + Cache::forget('pf:services:follow:audience:' . $aid); + Cache::forget('pf:services:follow:audience:' . $tid); self::delete($tid, $aid); self::delete($aid, $tid); self::get($tid, $aid); From a73b2f0002429f741e064fc55e2edad5677f4a6c Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 5 Jun 2022 02:49:29 -0600 Subject: [PATCH 10/27] Update Profile model --- app/Profile.php | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/Profile.php b/app/Profile.php index 85eeae01f..dedc2739f 100644 --- a/app/Profile.php +++ b/app/Profile.php @@ -271,7 +271,28 @@ class Profile extends Model $this->permalink('/followers') ] ]; - break; + break; + + case 'unlisted': + $audience = [ + 'to' => [ + ], + 'cc' => [ + 'https://www.w3.org/ns/activitystreams#Public', + $this->permalink('/followers') + ] + ]; + break; + + case 'private': + $audience = [ + 'to' => [ + $this->permalink('/followers') + ], + 'cc' => [ + ] + ]; + break; } return $audience; } From 5bcc02ecac199927f8a1580dd305729ab73e3a49 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 5 Jun 2022 03:23:41 -0600 Subject: [PATCH 11/27] Update PublicApiController, fix non-public visibility inclusion on home timeline --- app/Http/Controllers/PublicApiController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index a32f67ed3..e27c39226 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -521,7 +521,7 @@ class PublicApiController extends Controller ->limit($limit) ->get() ->map(function($s) use ($user) { - $status = StatusService::get($s->id); + $status = StatusService::get($s->id, false); if(!$status) { return false; } @@ -567,7 +567,7 @@ class PublicApiController extends Controller ->limit($limit) ->get() ->map(function($s) use ($user) { - $status = StatusService::get($s->id); + $status = StatusService::get($s->id, false); if(!$status) { return false; } From 98c2397bf087f45402de13c688b141c3ebaed783 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 5 Jun 2022 03:24:44 -0600 Subject: [PATCH 12/27] Update ApiV1Controller, fix non-public visibility inclusion on home timeline --- app/Http/Controllers/Api/ApiV1Controller.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 61dc05d42..bf4a17575 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -1811,7 +1811,7 @@ class ApiV1Controller extends Controller ->take(($limit * 2)) ->get() ->map(function($s) use($pid) { - $status = StatusService::getMastodon($s['id']); + $status = StatusService::getMastodon($s['id'], false); if(!$status || !isset($status['account']) || !isset($status['account']['id'])) { return false; } @@ -1842,7 +1842,7 @@ class ApiV1Controller extends Controller ->take(($limit * 2)) ->get() ->map(function($s) use($pid) { - $status = StatusService::getMastodon($s['id']); + $status = StatusService::getMastodon($s['id'], false); if(!$status || !isset($status['account']) || !isset($status['account']['id'])) { return false; } From 2b7c8dd1e5ea513e43d6edd801fa69e40eeb4068 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 6 Jun 2022 22:29:33 -0600 Subject: [PATCH 13/27] Update GenerateInstanceActor command --- app/Console/Commands/GenerateInstanceActor.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/Console/Commands/GenerateInstanceActor.php b/app/Console/Commands/GenerateInstanceActor.php index c70b13a12..a30403dc0 100644 --- a/app/Console/Commands/GenerateInstanceActor.php +++ b/app/Console/Commands/GenerateInstanceActor.php @@ -29,9 +29,6 @@ class GenerateInstanceActor extends Command } if(InstanceActor::exists()) { - $this->line(' '); - $this->error('Instance actor already exists!'); - $this->line(' '); $actor = InstanceActor::whereNotNull('public_key') ->whereNotNull('private_key') ->firstOrFail(); @@ -42,7 +39,8 @@ class GenerateInstanceActor extends Command Cache::rememberForever(InstanceActor::PKI_PRIVATE, function() use($actor) { return $actor->private_key; }); - exit; + $this->info('Instance actor succesfully generated. You do not need to run this command again.'); + return; } $pkiConfig = [ From feecc06c2a4576a8d3c8e7a601be0795418fa53c Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 9 Jun 2022 00:09:01 -0600 Subject: [PATCH 14/27] Update installer command --- app/Console/Commands/Installer.php | 289 ++++++++++++++++++++--------- 1 file changed, 202 insertions(+), 87 deletions(-) diff --git a/app/Console/Commands/Installer.php b/app/Console/Commands/Installer.php index d4839dfc1..c71f2e02f 100644 --- a/app/Console/Commands/Installer.php +++ b/app/Console/Commands/Installer.php @@ -4,6 +4,7 @@ namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Redis; +use \PDO; class Installer extends Command { @@ -12,7 +13,7 @@ class Installer extends Command * * @var string */ - protected $signature = 'install'; + protected $signature = 'install {--dangerously-overwrite-env : Re-run installation and overwrite current .env }'; /** * The console command description. @@ -21,6 +22,8 @@ class Installer extends Command */ protected $description = 'CLI Installer'; + public $installType = 'Simple'; + /** * Create a new command instance. * @@ -54,23 +57,48 @@ class Installer extends Command $this->info(' '); $this->info('Pixelfed version: ' . config('pixelfed.version')); $this->line(' '); - $this->info('Scanning system...'); - $this->preflightCheck(); + $this->envCheck(); } - protected function preflightCheck() + + protected function envCheck() { - $this->line(' '); - $this->info('Checking for installed dependencies...'); - $redis = Redis::connection(); - if($redis->ping()) { - $this->info('- Found redis!'); - } else { - $this->error('- Redis not found, aborting installation'); + if( file_exists(base_path('.env')) && + filesize(base_path('.env')) !== 0 && + !$this->option('dangerously-overwrite-env') + ) { + $this->line(''); + $this->error('Installation aborted, found existing .env file'); + $this->line('Run the following command to re-run the installer:'); + $this->line(''); + $this->info('php artisan install --dangerously-overwrite-env'); + $this->line(''); exit; } + $this->installType(); + } + + protected function installType() + { + $type = $this->choice('Select installation type', ['Simple', 'Advanced'], 0); + $this->installType = $type; + $this->preflightCheck(); + } + + protected function preflightCheck() + { + if($this->installType === 'Advanced') { + $this->info('Scanning system...'); + $this->line(' '); + $this->info('Checking for installed dependencies...'); + $redis = Redis::connection(); + if($redis->ping()) { + $this->info('- Found redis!'); + } else { + $this->error('- Redis not found, aborting installation'); + exit; + } + } $this->checkPhpDependencies(); - $this->checkPermissions(); - $this->envCheck(); } protected function checkPhpDependencies() @@ -81,31 +109,39 @@ class Installer extends Command 'curl', 'json', 'mbstring', - 'openssl' + 'openssl', ]; - $ffmpeg = exec('which ffmpeg'); - if(empty($ffmpeg)) { - $this->error('FFmpeg not found, please install it.'); - $this->error('Cancelling installation.'); - exit; - } else { - $this->info('- Found FFmpeg!'); - } - $this->line(''); - $this->info('Checking for required php extensions...'); + if($this->installType === 'Advanced') { + $ffmpeg = exec('which ffmpeg'); + if(empty($ffmpeg)) { + $this->error('FFmpeg not found, please install it.'); + $this->error('Cancelling installation.'); + exit; + } else { + $this->info('- Found FFmpeg!'); + } + $this->line(''); + $this->info('Checking for required php extensions...'); + } foreach($extensions as $ext) { if(extension_loaded($ext) == false) { - $this->error("- {$ext} extension not found, aborting installation"); + $this->error("\"{$ext}\" PHP extension not found, aborting installation"); exit; } } - $this->info("- Required PHP extensions found!"); + if($this->installType === 'Advanced') { + $this->info("- Required PHP extensions found!"); + } + + $this->checkPermissions(); } protected function checkPermissions() { - $this->line(''); - $this->info('Checking for proper filesystem permissions...'); + if($this->installType === 'Advanced') { + $this->line(''); + $this->info('Checking for proper filesystem permissions...'); + } $paths = [ base_path('bootstrap'), @@ -119,100 +155,152 @@ class Installer extends Command $this->error(" $path"); exit; } else { - $this->info("- Found valid permissions for {$path}"); + if($this->installType === 'Advanced') { + $this->info("- Found valid permissions for {$path}"); + } } } - } - protected function envCheck() - { - if(!file_exists(base_path('.env')) || filesize(base_path('.env')) == 0) { - $this->line(''); - $this->info('No .env configuration file found. We will create one now!'); - $this->createEnv(); - } else { - $confirm = $this->confirm('Found .env file, do you want to overwrite it?'); - if(!$confirm) { - $this->info('Cancelling installation.'); - exit; - } - $confirm = $this->confirm('Are you really sure you want to overwrite it?'); - if(!$confirm) { - $this->info('Cancelling installation.'); - exit; - } - $this->error('Warning ... if you did not backup your .env before its overwritten it will be permanently deleted.'); - $confirm = $this->confirm('The application may be installed already, are you really sure you want to overwrite it?'); - if(!$confirm) { - $this->info('Cancelling installation.'); - exit; - } - } - $this->postInstall(); + $this->createEnv(); } protected function createEnv() { $this->line(''); - // copy env if(!file_exists(app()->environmentFilePath())) { exec('cp .env.example .env'); - $this->call('key:generate'); + $this->updateEnvFile('APP_ENV', 'setup'); + $this->call('key:generate'); } $name = $this->ask('Site name [ex: Pixelfed]'); $this->updateEnvFile('APP_NAME', $name ?? 'pixelfed'); $domain = $this->ask('Site Domain [ex: pixelfed.com]'); + if(empty($domain)) { + $this->error('You must set the site domain'); + exit; + } + if(starts_with($domain, 'http')) { + $this->error('The site domain cannot start with https://, you must use the FQDN (eg: example.org)'); + exit; + } + if(strpos($domain, '.') == false) { + $this->error('You must enter a valid site domain'); + exit; + } $this->updateEnvFile('APP_DOMAIN', $domain ?? 'example.org'); $this->updateEnvFile('ADMIN_DOMAIN', $domain ?? 'example.org'); $this->updateEnvFile('SESSION_DOMAIN', $domain ?? 'example.org'); - $this->updateEnvFile('APP_URL', 'https://' . $domain ?? 'https://example.org'); + $this->updateEnvFile('APP_URL', 'https://' . $domain); $database = $this->choice('Select database driver', ['mysql', 'pgsql'], 0); $this->updateEnvFile('DB_CONNECTION', $database ?? 'mysql'); - switch ($database) { - case 'mysql': - $database_host = $this->ask('Select database host', '127.0.0.1'); - $this->updateEnvFile('DB_HOST', $database_host ?? 'mysql'); - $database_port = $this->ask('Select database port', 3306); - $this->updateEnvFile('DB_PORT', $database_port ?? 3306); + $database_host = $this->ask('Select database host', '127.0.0.1'); + $this->updateEnvFile('DB_HOST', $database_host ?? 'mysql'); - $database_db = $this->ask('Select database', 'pixelfed'); - $this->updateEnvFile('DB_DATABASE', $database_db ?? 'pixelfed'); + $database_port_default = $database === 'mysql' ? 3306 : 5432; + $database_port = $this->ask('Select database port', $database_port_default); + $this->updateEnvFile('DB_PORT', $database_port ?? $database_port_default); - $database_username = $this->ask('Select database username', 'pixelfed'); - $this->updateEnvFile('DB_USERNAME', $database_username ?? 'pixelfed'); + $database_db = $this->ask('Select database', 'pixelfed'); + $this->updateEnvFile('DB_DATABASE', $database_db ?? 'pixelfed'); - $db_pass = str_random(64); - $database_password = $this->secret('Select database password', $db_pass); - $this->updateEnvFile('DB_PASSWORD', $database_password); - break; - + $database_username = $this->ask('Select database username', 'pixelfed'); + $this->updateEnvFile('DB_USERNAME', $database_username ?? 'pixelfed'); + + $db_pass = str_random(64); + $database_password = $this->secret('Select database password', $db_pass); + $this->updateEnvFile('DB_PASSWORD', $database_password); + + $dsn = "{$database}:dbname={$database_db};host={$database_host};port={$database_port};"; + try { + $dbh = new PDO($dsn, $database_username, $database_password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); + } catch (\PDOException $e) { + $this->error('Cannot connect to database, check your credentials and try again'); + exit; } - $cache = $this->choice('Select cache driver', ["redis", "apc", "array", "database", "file", "memcached"], 0); - $this->updateEnvFile('CACHE_DRIVER', $cache ?? 'redis'); + if($this->installType === 'Advanced') { + $cache = $this->choice('Select cache driver', ["redis", "apc", "array", "database", "file", "memcached"], 0); + $this->updateEnvFile('CACHE_DRIVER', $cache ?? 'redis'); - $session = $this->choice('Select session driver', ["redis", "file", "cookie", "database", "apc", "memcached", "array"], 0); - $this->updateEnvFile('SESSION_DRIVER', $session ?? 'redis'); + $session = $this->choice('Select session driver', ["redis", "file", "cookie", "database", "apc", "memcached", "array"], 0); + $this->updateEnvFile('SESSION_DRIVER', $session ?? 'redis'); - $redis_host = $this->ask('Set redis host', 'localhost'); - $this->updateEnvFile('REDIS_HOST', $redis_host); + $redis_host = $this->ask('Set redis host', 'localhost'); + $this->updateEnvFile('REDIS_HOST', $redis_host); - $redis_password = $this->ask('Set redis password', 'null'); - $this->updateEnvFile('REDIS_PASSWORD', $redis_password); + $redis_password = $this->ask('Set redis password', 'null'); + $this->updateEnvFile('REDIS_PASSWORD', $redis_password); - $redis_port = $this->ask('Set redis port', 6379); - $this->updateEnvFile('REDIS_PORT', $redis_port); + $redis_port = $this->ask('Set redis port', 6379); + $this->updateEnvFile('REDIS_PORT', $redis_port); + } - $open_registration = $this->choice('Allow new registrations?', ['true', 'false'], 1); + $open_registration = $this->choice('Allow new registrations?', ['false', 'true'], 0); $this->updateEnvFile('OPEN_REGISTRATION', $open_registration); - $enforce_email_verification = $this->choice('Enforce email verification?', ['true', 'false'], 0); + $activitypub_federation = $this->choice('Enable ActivityPub federation?', ['false', 'true'], 1); + $this->updateEnvFile('ACTIVITY_PUB', $activitypub_federation); + $this->updateEnvFile('AP_INBOX', $activitypub_federation); + $this->updateEnvFile('AP_SHAREDINBOX', $activitypub_federation); + $this->updateEnvFile('AP_REMOTE_FOLLOW', $activitypub_federation); + + $enforce_email_verification = $this->choice('Enforce email verification?', ['false', 'true'], 1); $this->updateEnvFile('ENFORCE_EMAIL_VERIFICATION', $enforce_email_verification); + $enable_mobile_apis = $this->choice('Enable mobile app/apis support?', ['false', 'true'], 1); + $this->updateEnvFile('OAUTH_ENABLED', $enable_mobile_apis); + $this->updateEnvFile('EXP_EMC', $enable_mobile_apis); + + $optimize_media = $this->choice('Optimize media uploads? Requires jpegoptim and other dependencies!', ['false', 'true'], 0); + $this->updateEnvFile('PF_OPTIMIZE_IMAGES', $optimize_media); + + if($this->installType === 'Advanced') { + + if($optimize_media === 'true') { + $image_quality = $this->ask('Set image optimization quality between 1-100. Default is 80%, lower values use less disk space at the expense of image quality.', '80'); + if($image_quality < 1) { + $this->error('Min image quality is 1. You should avoid such a low value, 60 at minimum is recommended.'); + exit; + } + if($image_quality > 100) { + $this->error('Max image quality is 100'); + exit; + } + $this->updateEnvFile('IMAGE_QUALITY', $image_quality); + } + + $max_photo_size = $this->ask('Max photo upload size in kilobytes. Default 15000 which is equal to 15MB', '15000'); + if($max_photo_size * 1024 > $this->parseSize(ini_get('post_max_size'))) { + $this->error('Max photo size (' . (round($max_photo_size / 1000)) . 'M) cannot exceed php.ini `post_max_size` of ' . ini_get('post_max_size')); + exit; + } + $this->updateEnvFile('MAX_PHOTO_SIZE', $max_photo_size); + + $max_caption_length = $this->ask('Max caption limit. Default to 500, max 5000.', '500'); + if($max_caption_length > 5000) { + $this->error('Max caption length is 5000 characters.'); + exit; + } + $this->updateEnvFile('MAX_CAPTION_LENGTH', $max_caption_length); + + $max_album_length = $this->ask('Max photos allowed per album. Choose a value between 1 and 10.', '4'); + if($max_album_length < 1) { + $this->error('Min album length is 1 photos per album.'); + exit; + } + if($max_album_length > 10) { + $this->error('Max album length is 10 photos per album.'); + exit; + } + $this->updateEnvFile('MAX_ALBUM_LENGTH', $max_album_length); + } + + $this->updateEnvFile('APP_ENV', 'production'); + $this->postInstall(); } protected function updateEnvFile($key, $value) @@ -247,8 +335,35 @@ class Installer extends Command protected function postInstall() { - $this->callSilent('config:cache'); - //$this->callSilent('route:cache'); + $this->line(''); + $this->info('We recommend running database migrations now, or you can do it manually later.'); + $confirm = $this->choice('Do you want to run the database migrations?', ['No', 'Yes'], 0); + if($confirm === 'Yes') { + $this->callSilently('config:clear'); + sleep(3); + $this->call('migrate', ['--force' => true]); + $this->callSilently('instance:actor'); + $this->callSilently('passport:install'); + + $confirm = $this->choice('Do you want to create an admin account?', ['No', 'Yes'], 0); + if($confirm === 'Yes') { + $this->call('user:create'); + } + } else { + $this->callSilently('config:cache'); + } + $this->info('Pixelfed has been successfully installed!'); } + + protected function parseSize($size) { + $unit = preg_replace('/[^bkmgtpezy]/i', '', $size); + $size = preg_replace('/[^0-9\.]/', '', $size); + if ($unit) { + return round($size * pow(1024, stripos('bkmgtpezy', $unit[0]))); + } + else { + return round($size); + } + } } From 7c8f76438bcb9b78b172ab33c5500d53de9e1852 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 9 Jun 2022 00:14:40 -0600 Subject: [PATCH 15/27] Update LiveStream model --- app/Models/LiveStream.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/Models/LiveStream.php b/app/Models/LiveStream.php index 3336f3ce0..197bd70ad 100644 --- a/app/Models/LiveStream.php +++ b/app/Models/LiveStream.php @@ -22,6 +22,21 @@ class LiveStream extends Model $host = config('livestreaming.server.host'); $port = ':' . config('livestreaming.server.port'); $path = '/' . config('livestreaming.server.path') . '?'; + $query = http_build_query([ + 'name' => $this->stream_id, + 'key' => $this->stream_key, + 'ts' => time() + ]); + + return $proto . $host . $port . $path . $query; + } + + public function getStreamRtmpUrl() + { + $proto = 'rtmp://'; + $host = config('livestreaming.server.host'); + $port = ':' . config('livestreaming.server.port'); + $path = '/' . config('livestreaming.server.path') . '/'. $this->stream_id . '?'; $query = http_build_query([ 'key' => $this->stream_key, 'ts' => time() From 97f3bc571e7bda18da7bfb9aa9a8add3cadd7cd6 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 9 Jun 2022 02:28:59 -0600 Subject: [PATCH 16/27] Update TrustProxies middleware --- app/Http/Middleware/TrustProxies.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php index c661475cd..5517da4b7 100644 --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -19,5 +19,9 @@ class TrustProxies extends Middleware * * @var int */ - protected $headers = Request::HEADER_X_FORWARDED_ALL; + protected $headers = Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; } From 9c17def4a0cba4033b4c36d4639464835362dc42 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 9 Jun 2022 04:09:05 -0600 Subject: [PATCH 17/27] Update UserFilterService, improve cache strategy by using in-memory state via UserFilterObserver for empty lists with a ttl of 90 days. --- app/Services/UserFilterService.php | 39 ++++++++++++++++-------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/app/Services/UserFilterService.php b/app/Services/UserFilterService.php index 49118b579..01e2e4053 100644 --- a/app/Services/UserFilterService.php +++ b/app/Services/UserFilterService.php @@ -3,26 +3,24 @@ namespace App\Services; use Cache; +use App\UserFilter; use Illuminate\Support\Facades\Redis; -use App\{ - Follower, - Profile, - UserFilter -}; - -class UserFilterService { - +class UserFilterService +{ const USER_MUTES_KEY = 'pf:services:mutes:ids:'; const USER_BLOCKS_KEY = 'pf:services:blocks:ids:'; - public static function mutes(int $profile_id) : array + public static function mutes(int $profile_id) { $key = self::USER_MUTES_KEY . $profile_id; - $cached = Redis::zrevrange($key, 0, -1); - if($cached) { - return $cached; + $warm = Cache::has($key . ':cached'); + if($warm) { + return Redis::zrevrange($key, 0, -1) ?? []; } else { + if(Redis::zrevrange($key, 0, -1)) { + return Redis::zrevrange($key, 0, -1); + } $ids = UserFilter::whereFilterType('mute') ->whereUserId($profile_id) ->pluck('filterable_id') @@ -30,29 +28,34 @@ class UserFilterService { foreach ($ids as $muted_id) { Redis::zadd($key, (int) $muted_id, (int) $muted_id); } + Cache::set($key . ':cached', 1, 7776000); return $ids; } } - public static function blocks(int $profile_id) : array + public static function blocks(int $profile_id) { $key = self::USER_BLOCKS_KEY . $profile_id; - $cached = Redis::zrevrange($key, 0, -1); - if($cached) { - return $cached; + $warm = Cache::has($key . ':cached'); + if($warm) { + return Redis::zrevrange($key, 0, -1) ?? []; } else { + if(Redis::zrevrange($key, 0, -1)) { + return Redis::zrevrange($key, 0, -1); + } $ids = UserFilter::whereFilterType('block') ->whereUserId($profile_id) ->pluck('filterable_id') ->toArray(); foreach ($ids as $blocked_id) { - Redis::zadd($key, $blocked_id, $blocked_id); + Redis::zadd($key, (int) $blocked_id, (int) $blocked_id); } + Cache::set($key . ':cached', 1, 7776000); return $ids; } } - public static function filters(int $profile_id) : array + public static function filters(int $profile_id) { return array_unique(array_merge(self::mutes($profile_id), self::blocks($profile_id))); } From 1310d95cdb8cb8b9dde4e5bf459bd746a0620d6a Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 9 Jun 2022 04:15:23 -0600 Subject: [PATCH 18/27] Add NetworkTimelineService cache --- app/Http/Controllers/PublicApiController.php | 140 ++++++++++++------- app/Services/NetworkTimelineService.php | 95 +++++++++++++ app/Util/ActivityPub/Helpers.php | 11 ++ config/instance.php | 6 + 4 files changed, 199 insertions(+), 53 deletions(-) create mode 100644 app/Services/NetworkTimelineService.php diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index e27c39226..e6f3bf428 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -32,6 +32,7 @@ use App\Services\{ LikeService, PublicTimelineService, ProfileService, + NetworkTimelineService, ReblogService, RelationshipService, StatusService, @@ -608,59 +609,92 @@ class PublicApiController extends Controller $filtered = $user ? UserFilterService::filters($user->profile_id) : []; - if($min || $max) { - $dir = $min ? '>' : '<'; - $id = $min ?? $max; - $timeline = Status::select( - 'id', - 'uri', - 'type', - 'scope', - 'created_at', - ) - ->where('id', $dir, $id) - ->whereNull(['in_reply_to_id', 'reblog_of_id']) - ->whereNotIn('profile_id', $filtered) - ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) - ->whereNotNull('uri') - ->whereScope('public') - ->where('id', '>', $amin) - ->orderBy('created_at', 'desc') - ->limit($limit) - ->get() - ->map(function($s) use ($user) { - $status = StatusService::get($s->id); - $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); - $status['bookmarked'] = (bool) BookmarkService::get($user->profile_id, $s->id); - $status['reblogged'] = (bool) ReblogService::get($user->profile_id, $s->id); - return $status; - }); - $res = $timeline->toArray(); - } else { - $timeline = Status::select( - 'id', - 'uri', - 'type', - 'scope', - 'created_at', - ) - ->whereNull(['in_reply_to_id', 'reblog_of_id']) - ->whereNotIn('profile_id', $filtered) - ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) - ->whereNotNull('uri') - ->whereScope('public') - ->where('id', '>', $amin) - ->orderBy('created_at', 'desc') - ->limit($limit) - ->get() - ->map(function($s) use ($user) { - $status = StatusService::get($s->id); - $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); - $status['bookmarked'] = (bool) BookmarkService::get($user->profile_id, $s->id); - $status['reblogged'] = (bool) ReblogService::get($user->profile_id, $s->id); - return $status; - }); - $res = $timeline->toArray(); + if(config('instance.timeline.network.cached') == false) { + if($min || $max) { + $dir = $min ? '>' : '<'; + $id = $min ?? $max; + $timeline = Status::select( + 'id', + 'uri', + 'type', + 'scope', + 'created_at', + ) + ->where('id', $dir, $id) + ->whereNull(['in_reply_to_id', 'reblog_of_id']) + ->whereNotIn('profile_id', $filtered) + ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) + ->whereNotNull('uri') + ->whereScope('public') + ->where('id', '>', $amin) + ->orderBy('created_at', 'desc') + ->limit($limit) + ->get() + ->map(function($s) use ($user) { + $status = StatusService::get($s->id); + $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); + $status['bookmarked'] = (bool) BookmarkService::get($user->profile_id, $s->id); + $status['reblogged'] = (bool) ReblogService::get($user->profile_id, $s->id); + return $status; + }); + $res = $timeline->toArray(); + } else { + $timeline = Status::select( + 'id', + 'uri', + 'type', + 'scope', + 'created_at', + ) + ->whereNull(['in_reply_to_id', 'reblog_of_id']) + ->whereNotIn('profile_id', $filtered) + ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) + ->whereNotNull('uri') + ->whereScope('public') + ->where('id', '>', $amin) + ->orderBy('created_at', 'desc') + ->limit($limit) + ->get() + ->map(function($s) use ($user) { + $status = StatusService::get($s->id); + $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); + $status['bookmarked'] = (bool) BookmarkService::get($user->profile_id, $s->id); + $status['reblogged'] = (bool) ReblogService::get($user->profile_id, $s->id); + return $status; + }); + $res = $timeline->toArray(); + } + } else { + Cache::remember('api:v1:timelines:network:cache_check', 10368000, function() { + if(NetworkTimelineService::count() == 0) { + NetworkTimelineService::warmCache(true, 400); + } + }); + + if ($max) { + $feed = NetworkTimelineService::getRankedMaxId($max, $limit); + } else if ($min) { + $feed = NetworkTimelineService::getRankedMinId($min, $limit); + } else { + $feed = NetworkTimelineService::get(0, $limit); + } + + $res = collect($feed) + ->map(function($k) use($user) { + $status = StatusService::get($k); + if($status && isset($status['account']) && $user) { + $status['favourited'] = (bool) LikeService::liked($user->profile_id, $k); + $status['bookmarked'] = (bool) BookmarkService::get($user->profile_id, $k); + $status['reblogged'] = (bool) ReblogService::get($user->profile_id, $k); + $status['relationship'] = RelationshipService::get($user->profile_id, $status['account']['id']); + } + return $status; + }) + ->filter(function($s) use($filtered) { + return $s && isset($s['account']) && in_array($s['account']['id'], $filtered) == false; + }) + ->values() + ->toArray(); } return response()->json($res); diff --git a/app/Services/NetworkTimelineService.php b/app/Services/NetworkTimelineService.php new file mode 100644 index 000000000..959019b9a --- /dev/null +++ b/app/Services/NetworkTimelineService.php @@ -0,0 +1,95 @@ + 100) { + $stop = 100; + } + + return Redis::zrevrange(self::CACHE_KEY, $start, $stop); + } + + public static function getRankedMaxId($start = null, $limit = 10) + { + if(!$start) { + return []; + } + + return array_keys(Redis::zrevrangebyscore(self::CACHE_KEY, $start, '-inf', [ + 'withscores' => true, + 'limit' => [1, $limit] + ])); + } + + public static function getRankedMinId($end = null, $limit = 10) + { + if(!$end) { + return []; + } + + return array_keys(Redis::zrevrangebyscore(self::CACHE_KEY, '+inf', $end, [ + 'withscores' => true, + 'limit' => [0, $limit] + ])); + } + + public static function add($val) + { + if(self::count() > config('instance.timeline.network.cache_dropoff')) { + if(config('database.redis.client') === 'phpredis') { + Redis::zpopmin(self::CACHE_KEY); + } + } + + return Redis::zadd(self::CACHE_KEY, $val, $val); + } + + public static function rem($val) + { + return Redis::zrem(self::CACHE_KEY, $val); + } + + public static function del($val) + { + return self::rem($val); + } + + public static function count() + { + return Redis::zcard(self::CACHE_KEY); + } + + public static function warmCache($force = false, $limit = 100) + { + if(self::count() == 0 || $force == true) { + Redis::del(self::CACHE_KEY); + $ids = Status::whereNotNull('uri') + ->whereScope('public') + ->whereNull('in_reply_to_id') + ->whereNull('reblog_of_id') + ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) + ->where('created_at', '>', now()->subHours(config('instance.timeline.network.max_hours_old'))) + ->orderByDesc('created_at') + ->limit($limit) + ->pluck('id'); + foreach($ids as $id) { + self::add($id); + } + return 1; + } + return 0; + } +} diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index d471482b7..d058f2fd0 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -32,6 +32,7 @@ use App\Services\CustomEmojiService; use App\Services\InstanceService; use App\Services\MediaPathService; use App\Services\MediaStorageService; +use App\Services\NetworkTimelineService; use App\Jobs\MediaPipeline\MediaStoragePipeline; use App\Jobs\AvatarPipeline\RemoteAvatarFetch; use App\Util\Media\License; @@ -490,6 +491,16 @@ class Helpers { if(isset($activity['tag']) && is_array($activity['tag']) && !empty($activity['tag'])) { StatusTagsPipeline::dispatch($activity, $status); } + + if( config('instance.timeline.network.cached') && + $status->in_reply_to_id === null && + $status->reblog_of_id === null && + in_array($status->type, ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) && + $status->created_at->gt(now()->subHours(config('instance.timeline.network.max_hours_old')) + ) { + NetworkTimelineService::add($status->id); + } + return $status; }); } diff --git a/config/instance.php b/config/instance.php index 3e8e8c414..15ce670f8 100644 --- a/config/instance.php +++ b/config/instance.php @@ -24,6 +24,12 @@ return [ 'timeline' => [ 'local' => [ 'is_public' => env('INSTANCE_PUBLIC_LOCAL_TIMELINE', false) + ], + + 'network' => [ + 'cached' => env('PF_NETWORK_TIMELINE') ? env('INSTANCE_NETWORK_TIMELINE_CACHED', false) : false, + 'cache_dropoff' => env('INSTANCE_NETWORK_TIMELINE_CACHE_DROPOFF', 100), + 'max_hours_old' => env('INSTANCE_NETWORK_TIMELINE_CACHE_MAX_HOUR_INGEST', 6) ] ], From 37f97ccc2dd23be36869a11f1a00e714a23f7ab4 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 9 Jun 2022 04:19:57 -0600 Subject: [PATCH 19/27] Update AP helpers --- app/Util/ActivityPub/Helpers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index d058f2fd0..b72eeb32b 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -496,7 +496,7 @@ class Helpers { $status->in_reply_to_id === null && $status->reblog_of_id === null && in_array($status->type, ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) && - $status->created_at->gt(now()->subHours(config('instance.timeline.network.max_hours_old')) + $status->created_at->gt(now()->subHours(config('instance.timeline.network.max_hours_old'))) ) { NetworkTimelineService::add($status->id); } From f54fd6e9cc9e58795f31424b1a3a8f1ce29aefe0 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 9 Jun 2022 05:11:39 -0600 Subject: [PATCH 20/27] Update ApiV1Controller, add network timeline support via NetworkTimelineService --- app/Http/Controllers/Api/ApiV1Controller.php | 48 ++++++++++++++------ 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index bf4a17575..ae1bb5f5e 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -62,6 +62,7 @@ use App\Services\{ FollowerService, InstanceService, LikeService, + NetworkTimelineService, NotificationService, MediaPathService, PublicTimelineService, @@ -1899,28 +1900,46 @@ class ApiV1Controller extends Controller $this->validate($request,[ 'min_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX, 'max_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX, - 'limit' => 'nullable|integer|max:100' + 'limit' => 'nullable|integer|max:100', + 'remote' => 'sometimes' ]); $min = $request->input('min_id'); $max = $request->input('max_id'); $limit = $request->input('limit') ?? 20; $user = $request->user(); + $remote = $request->has('remote'); $filtered = $user ? UserFilterService::filters($user->profile_id) : []; - Cache::remember('api:v1:timelines:public:cache_check', 10368000, function() { - if(PublicTimelineService::count() == 0) { - PublicTimelineService::warmCache(true, 400); - } - }); + if($remote && config('instance.timeline.network.cached')) { + Cache::remember('api:v1:timelines:network:cache_check', 10368000, function() { + if(NetworkTimelineService::count() == 0) { + NetworkTimelineService::warmCache(true, config('instance.timeline.network.cache_dropoff')); + } + }); - if ($max) { - $feed = PublicTimelineService::getRankedMaxId($max, $limit + 5); - } else if ($min) { - $feed = PublicTimelineService::getRankedMinId($min, $limit + 5); - } else { - $feed = PublicTimelineService::get(0, $limit + 5); - } + if ($max) { + $feed = NetworkTimelineService::getRankedMaxId($max, $limit + 5); + } else if ($min) { + $feed = NetworkTimelineService::getRankedMinId($min, $limit + 5); + } else { + $feed = NetworkTimelineService::get(0, $limit + 5); + } + } else { + Cache::remember('api:v1:timelines:public:cache_check', 10368000, function() { + if(PublicTimelineService::count() == 0) { + PublicTimelineService::warmCache(true, 400); + } + }); + + if ($max) { + $feed = PublicTimelineService::getRankedMaxId($max, $limit + 5); + } else if ($min) { + $feed = PublicTimelineService::getRankedMinId($min, $limit + 5); + } else { + $feed = PublicTimelineService::get(0, $limit + 5); + } + } $res = collect($feed) ->map(function($k) use($user) { @@ -1943,6 +1962,9 @@ class ApiV1Controller extends Controller // ->toArray(); $baseUrl = config('app.url') . '/api/v1/timelines/public?limit=' . $limit . '&'; + if($remote) { + $baseUrl .= 'remote=1&'; + } $minId = $res->map(function($s) { return ['id' => $s['id']]; })->min('id'); From e13adc661d2d86b5b26ab2bc5c5bdc7ade5d0513 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 10 Jun 2022 22:57:05 -0600 Subject: [PATCH 21/27] Update composer deps --- composer.lock | 406 +++++++++++++++++++++++++------------------------- 1 file changed, 204 insertions(+), 202 deletions(-) diff --git a/composer.lock b/composer.lock index b9056922a..434c8d19a 100644 --- a/composer.lock +++ b/composer.lock @@ -180,16 +180,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.222.20", + "version": "3.225.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "ae742d2ae4caa9410ad4dfe97551c68064c0cc54" + "reference": "f846724ad842916061127d20da4fe4e129f7d4b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ae742d2ae4caa9410ad4dfe97551c68064c0cc54", - "reference": "ae742d2ae4caa9410ad4dfe97551c68064c0cc54", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/f846724ad842916061127d20da4fe4e129f7d4b8", + "reference": "f846724ad842916061127d20da4fe4e129f7d4b8", "shasum": "" }, "require": { @@ -197,7 +197,7 @@ "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "guzzlehttp/guzzle": "^5.3.3 || ^6.2.1 || ^7.0", + "guzzlehttp/guzzle": "^5.3.3 || ^6.5.6 || ^7.4.3", "guzzlehttp/promises": "^1.4.0", "guzzlehttp/psr7": "^1.7.0 || ^2.1.1", "mtdowling/jmespath.php": "^2.6", @@ -265,9 +265,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.222.20" + "source": "https://github.com/aws/aws-sdk-php/tree/3.225.2" }, - "time": "2022-05-25T18:20:20+00:00" + "time": "2022-06-10T19:03:26+00:00" }, { "name": "bacon/bacon-qr-code", @@ -1638,16 +1638,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.6", + "version": "6.5.7", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "f092dd734083473658de3ee4bef093ed77d2689c" + "reference": "724562fa861e21a4071c652c8a159934e4f05592" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f092dd734083473658de3ee4bef093ed77d2689c", - "reference": "f092dd734083473658de3ee4bef093ed77d2689c", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/724562fa861e21a4071c652c8a159934e4f05592", + "reference": "724562fa861e21a4071c652c8a159934e4f05592", "shasum": "" }, "require": { @@ -1733,7 +1733,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5.6" + "source": "https://github.com/guzzle/guzzle/tree/6.5.7" }, "funding": [ { @@ -1749,7 +1749,7 @@ "type": "tidelift" } ], - "time": "2022-05-25T13:19:12+00:00" + "time": "2022-06-09T21:36:50+00:00" }, { "name": "guzzlehttp/promises", @@ -2166,16 +2166,16 @@ }, { "name": "laravel/framework", - "version": "v8.83.14", + "version": "v8.83.16", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "141cf126f1746c7264f59aa78c923a84eaab501e" + "reference": "6be5abd144faf517879af7298e9d79f06f250f75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/141cf126f1746c7264f59aa78c923a84eaab501e", - "reference": "141cf126f1746c7264f59aa78c923a84eaab501e", + "url": "https://api.github.com/repos/laravel/framework/zipball/6be5abd144faf517879af7298e9d79f06f250f75", + "reference": "6be5abd144faf517879af7298e9d79f06f250f75", "shasum": "" }, "require": { @@ -2335,7 +2335,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-05-24T14:04:02+00:00" + "time": "2022-06-07T15:09:06+00:00" }, { "name": "laravel/helpers", @@ -2872,16 +2872,16 @@ }, { "name": "league/commonmark", - "version": "2.3.1", + "version": "2.3.3", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "cb36fee279f7fca01d5d9399ddd1b37e48e2eca1" + "reference": "0da1dca5781dd3cfddbe328224d9a7a62571addc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/cb36fee279f7fca01d5d9399ddd1b37e48e2eca1", - "reference": "cb36fee279f7fca01d5d9399ddd1b37e48e2eca1", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/0da1dca5781dd3cfddbe328224d9a7a62571addc", + "reference": "0da1dca5781dd3cfddbe328224d9a7a62571addc", "shasum": "" }, "require": { @@ -2974,7 +2974,7 @@ "type": "tidelift" } ], - "time": "2022-05-14T15:37:39+00:00" + "time": "2022-06-07T21:28:26+00:00" }, { "name": "league/config", @@ -3511,33 +3511,35 @@ }, { "name": "league/uri", - "version": "6.5.0", + "version": "6.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "c68ca445abb04817d740ddd6d0b3551826ef0c5a" + "reference": "4147f19b9de3b5af6a258f35d7a0efbbf9963298" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/c68ca445abb04817d740ddd6d0b3551826ef0c5a", - "reference": "c68ca445abb04817d740ddd6d0b3551826ef0c5a", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/4147f19b9de3b5af6a258f35d7a0efbbf9963298", + "reference": "4147f19b9de3b5af6a258f35d7a0efbbf9963298", "shasum": "" }, "require": { "ext-json": "*", "league/uri-interfaces": "^2.3", - "php": "^7.3 || ^8.0", + "php": "^7.4 || ^8.0", "psr/http-message": "^1.0" }, "conflict": { "league/uri-schemes": "^1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19 || ^3.0", - "phpstan/phpstan": "^0.12.90", - "phpstan/phpstan-phpunit": "^0.12.22", - "phpstan/phpstan-strict-rules": "^0.12.11", - "phpunit/phpunit": "^8.0 || ^9.0", + "friendsofphp/php-cs-fixer": "^v3.3.2", + "php-http/psr7-integration-tests": "^1.1", + "phpstan/phpstan": "^1.2.0", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpunit/phpunit": "^9.5.10", "psr/http-factory": "^1.0" }, "suggest": { @@ -3569,7 +3571,7 @@ } ], "description": "URI manipulation library", - "homepage": "http://uri.thephpleague.com", + "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", "file-uri", @@ -3595,7 +3597,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri/tree/6.5.0" + "source": "https://github.com/thephpleague/uri/tree/6.6.0" }, "funding": [ { @@ -3603,7 +3605,7 @@ "type": "github" } ], - "time": "2021-08-27T09:54:07+00:00" + "time": "2022-05-28T05:44:35+00:00" }, { "name": "league/uri-interfaces", @@ -3734,16 +3736,16 @@ }, { "name": "monolog/monolog", - "version": "2.6.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "247918972acd74356b0a91dfaa5adcaec069b6c0" + "reference": "5579edf28aee1190a798bfa5be8bc16c563bd524" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/247918972acd74356b0a91dfaa5adcaec069b6c0", - "reference": "247918972acd74356b0a91dfaa5adcaec069b6c0", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5579edf28aee1190a798bfa5be8bc16c563bd524", + "reference": "5579edf28aee1190a798bfa5be8bc16c563bd524", "shasum": "" }, "require": { @@ -3822,7 +3824,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.6.0" + "source": "https://github.com/Seldaek/monolog/tree/2.7.0" }, "funding": [ { @@ -3834,7 +3836,7 @@ "type": "tidelift" } ], - "time": "2022-05-10T09:36:00+00:00" + "time": "2022-06-09T08:59:12+00:00" }, { "name": "mtdowling/jmespath.php", @@ -4187,16 +4189,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", "shasum": "" }, "require": { @@ -4237,9 +4239,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2022-05-31T20:59:12+00:00" }, { "name": "nyholm/psr7", @@ -4385,16 +4387,16 @@ }, { "name": "paragonie/constant_time_encoding", - "version": "v2.5.0", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "9229e15f2e6ba772f0c55dd6986c563b937170a8" + "reference": "d6e1d5d0fb2458dfdd7018ec2f74be120353a3b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/9229e15f2e6ba772f0c55dd6986c563b937170a8", - "reference": "9229e15f2e6ba772f0c55dd6986c563b937170a8", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d6e1d5d0fb2458dfdd7018ec2f74be120353a3b9", + "reference": "d6e1d5d0fb2458dfdd7018ec2f74be120353a3b9", "shasum": "" }, "require": { @@ -4448,7 +4450,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2022-01-17T05:32:27+00:00" + "time": "2022-06-11T00:43:46+00:00" }, { "name": "paragonie/random_compat", @@ -5558,16 +5560,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.4", + "version": "v0.11.5", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "05c544b339b112226ad14803e1e5b09a61957454" + "reference": "c23686f9c48ca202710dbb967df8385a952a2daf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/05c544b339b112226ad14803e1e5b09a61957454", - "reference": "05c544b339b112226ad14803e1e5b09a61957454", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/c23686f9c48ca202710dbb967df8385a952a2daf", + "reference": "c23686f9c48ca202710dbb967df8385a952a2daf", "shasum": "" }, "require": { @@ -5628,9 +5630,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.4" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.5" }, - "time": "2022-05-06T12:49:14+00:00" + "time": "2022-05-27T18:03:49+00:00" }, { "name": "ralouphie/getallheaders", @@ -6320,16 +6322,16 @@ }, { "name": "symfony/cache", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "4c6747cf7e56c6b8e3094dd24852bd3e364375b1" + "reference": "a50b7249bea81ddd6d3b799ce40c5521c2f72f0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/4c6747cf7e56c6b8e3094dd24852bd3e364375b1", - "reference": "4c6747cf7e56c6b8e3094dd24852bd3e364375b1", + "url": "https://api.github.com/repos/symfony/cache/zipball/a50b7249bea81ddd6d3b799ce40c5521c2f72f0b", + "reference": "a50b7249bea81ddd6d3b799ce40c5521c2f72f0b", "shasum": "" }, "require": { @@ -6397,7 +6399,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.4.8" + "source": "https://github.com/symfony/cache/tree/v5.4.9" }, "funding": [ { @@ -6413,7 +6415,7 @@ "type": "tidelift" } ], - "time": "2022-04-26T13:19:20+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { "name": "symfony/cache-contracts", @@ -6496,16 +6498,16 @@ }, { "name": "symfony/console", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b" + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b", - "reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b", + "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", "shasum": "" }, "require": { @@ -6575,7 +6577,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.8" + "source": "https://github.com/symfony/console/tree/v5.4.9" }, "funding": [ { @@ -6591,7 +6593,7 @@ "type": "tidelift" } ], - "time": "2022-04-12T16:02:29+00:00" + "time": "2022-05-18T06:17:34+00:00" }, { "name": "symfony/css-selector", @@ -6728,16 +6730,16 @@ }, { "name": "symfony/error-handler", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c1fcde614dfe99d62a83b796a53b8bad358b266a" + "reference": "c116cda1f51c678782768dce89a45f13c949455d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c1fcde614dfe99d62a83b796a53b8bad358b266a", - "reference": "c1fcde614dfe99d62a83b796a53b8bad358b266a", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c116cda1f51c678782768dce89a45f13c949455d", + "reference": "c116cda1f51c678782768dce89a45f13c949455d", "shasum": "" }, "require": { @@ -6779,7 +6781,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.8" + "source": "https://github.com/symfony/error-handler/tree/v5.4.9" }, "funding": [ { @@ -6795,20 +6797,20 @@ "type": "tidelift" } ], - "time": "2022-04-12T15:48:08+00:00" + "time": "2022-05-21T13:57:48+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.3", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", "shasum": "" }, "require": { @@ -6864,7 +6866,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" }, "funding": [ { @@ -6880,7 +6882,7 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-05T16:45:39+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -6963,16 +6965,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.7", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f" + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3a4442138d80c9f7b600fb297534ac718b61d37f", - "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba", "shasum": "" }, "require": { @@ -7007,7 +7009,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.7" + "source": "https://github.com/symfony/filesystem/tree/v5.4.9" }, "funding": [ { @@ -7023,7 +7025,7 @@ "type": "tidelift" } ], - "time": "2022-04-01T12:33:59+00:00" + "time": "2022-05-20T13:55:35+00:00" }, { "name": "symfony/finder", @@ -7090,16 +7092,16 @@ }, { "name": "symfony/http-foundation", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2" + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2", - "reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6b0d0e4aca38d57605dcd11e2416994b38774522", + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522", "shasum": "" }, "require": { @@ -7143,7 +7145,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.8" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.9" }, "funding": [ { @@ -7159,7 +7161,7 @@ "type": "tidelift" } ], - "time": "2022-04-22T08:14:12+00:00" + "time": "2022-05-17T15:07:29+00:00" }, { "name": "symfony/http-kernel", @@ -7275,16 +7277,16 @@ }, { "name": "symfony/mime", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662" + "reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/af49bc163ec3272f677bde3bc44c0d766c1fd662", - "reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662", + "url": "https://api.github.com/repos/symfony/mime/zipball/2b3802a24e48d0cfccf885173d2aac91e73df92e", + "reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e", "shasum": "" }, "require": { @@ -7338,7 +7340,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.8" + "source": "https://github.com/symfony/mime/tree/v5.4.9" }, "funding": [ { @@ -7354,20 +7356,20 @@ "type": "tidelift" } ], - "time": "2022-04-12T15:48:08+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { @@ -7382,7 +7384,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7420,7 +7422,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -7436,20 +7438,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" + "reference": "143f1881e655bebca1312722af8068de235ae5dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", + "reference": "143f1881e655bebca1312722af8068de235ae5dc", "shasum": "" }, "require": { @@ -7464,7 +7466,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7503,7 +7505,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" }, "funding": [ { @@ -7519,20 +7521,20 @@ "type": "tidelift" } ], - "time": "2022-01-04T09:04:05+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { @@ -7544,7 +7546,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7584,7 +7586,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, "funding": [ { @@ -7600,20 +7602,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { @@ -7627,7 +7629,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7671,7 +7673,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" }, "funding": [ { @@ -7687,20 +7689,20 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -7712,7 +7714,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7755,7 +7757,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -7771,20 +7773,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { @@ -7799,7 +7801,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7838,7 +7840,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -7854,20 +7856,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", "shasum": "" }, "require": { @@ -7876,7 +7878,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7914,7 +7916,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" }, "funding": [ { @@ -7930,20 +7932,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { @@ -7952,7 +7954,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7993,7 +7995,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" }, "funding": [ { @@ -8009,20 +8011,20 @@ "type": "tidelift" } ], - "time": "2021-06-05T21:20:04+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -8031,7 +8033,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8076,7 +8078,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -8092,20 +8094,20 @@ "type": "tidelift" } ], - "time": "2022-03-04T08:16:47+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { @@ -8114,7 +8116,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8155,7 +8157,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { @@ -8171,7 +8173,7 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:11+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/process", @@ -8498,16 +8500,16 @@ }, { "name": "symfony/string", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8" + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8", - "reference": "3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8", + "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", "shasum": "" }, "require": { @@ -8564,7 +8566,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.8" + "source": "https://github.com/symfony/string/tree/v5.4.9" }, "funding": [ { @@ -8584,16 +8586,16 @@ }, { "name": "symfony/translation", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "f5c0f6d1f20993b2606f3a5f36b1dc8c1899170b" + "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f5c0f6d1f20993b2606f3a5f36b1dc8c1899170b", - "reference": "f5c0f6d1f20993b2606f3a5f36b1dc8c1899170b", + "url": "https://api.github.com/repos/symfony/translation/zipball/1639abc1177d26bcd4320e535e664cef067ab0ca", + "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca", "shasum": "" }, "require": { @@ -8661,7 +8663,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.8" + "source": "https://github.com/symfony/translation/tree/v5.4.9" }, "funding": [ { @@ -8677,7 +8679,7 @@ "type": "tidelift" } ], - "time": "2022-04-22T08:14:12+00:00" + "time": "2022-05-06T12:33:37+00:00" }, { "name": "symfony/translation-contracts", @@ -8759,16 +8761,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "cdcadd343d31ad16fc5e006b0de81ea307435053" + "reference": "af52239a330fafd192c773795520dc2dd62b5657" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cdcadd343d31ad16fc5e006b0de81ea307435053", - "reference": "cdcadd343d31ad16fc5e006b0de81ea307435053", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/af52239a330fafd192c773795520dc2dd62b5657", + "reference": "af52239a330fafd192c773795520dc2dd62b5657", "shasum": "" }, "require": { @@ -8828,7 +8830,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.8" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.9" }, "funding": [ { @@ -8844,20 +8846,20 @@ "type": "tidelift" } ], - "time": "2022-04-26T13:19:20+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "7e132a3fcd4b57add721b4207236877b6017ec93" + "reference": "63249ebfca4e75a357679fa7ba2089cfb898aa67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/7e132a3fcd4b57add721b4207236877b6017ec93", - "reference": "7e132a3fcd4b57add721b4207236877b6017ec93", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/63249ebfca4e75a357679fa7ba2089cfb898aa67", + "reference": "63249ebfca4e75a357679fa7ba2089cfb898aa67", "shasum": "" }, "require": { @@ -8901,7 +8903,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.4.8" + "source": "https://github.com/symfony/var-exporter/tree/v5.4.9" }, "funding": [ { @@ -8917,7 +8919,7 @@ "type": "tidelift" } ], - "time": "2022-04-26T13:19:20+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { "name": "tightenco/collect", @@ -9182,21 +9184,21 @@ }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -9234,9 +9236,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "packages-dev": [ From 65cf9ccac95f71621af7e435fe90dc3518d2777f Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 10 Jun 2022 23:36:44 -0600 Subject: [PATCH 22/27] Update pixelfed config, bump max_collection_length default to 100 from 18 --- config/pixelfed.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/pixelfed.php b/config/pixelfed.php index 16eb21c6b..c5ebb656e 100644 --- a/config/pixelfed.php +++ b/config/pixelfed.php @@ -239,7 +239,7 @@ return [ ] ], - 'max_collection_length' => (int) env('PF_MAX_COLLECTION_LENGTH', 18), + 'max_collection_length' => (int) env('PF_MAX_COLLECTION_LENGTH', 100), 'media_types' => env('MEDIA_TYPES', 'image/jpeg,image/png,image/gif'), From aded149faee3130e1b4b3de814403b3d54bac7eb Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sat, 11 Jun 2022 00:37:36 -0600 Subject: [PATCH 23/27] Update AccountController, include account entities in follow_requests.json endpoint --- app/Http/Controllers/AccountController.php | 2 +- app/Http/Controllers/Api/ApiV1Controller.php | 4 ++-- app/Http/Controllers/PublicApiController.php | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index a4e86aee3..02921368d 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -370,7 +370,7 @@ class AccountController extends Controller 'avatar' => $actor->avatarUrl(), 'url' => $actor->url(), 'local' => $actor->domain == null, - 'following' => $actor->followedBy(Auth::user()->profile) + 'account' => AccountService::get($actor->id) ]; }) ]; diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index ae1bb5f5e..37268fed5 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -442,7 +442,7 @@ class ApiV1Controller extends Controller if($pid != $account['id']) { if($account['locked']) { - if(FollowerService::follows($pid, $account['id'])) { + if(!FollowerService::follows($pid, $account['id'])) { return []; } } @@ -489,7 +489,7 @@ class ApiV1Controller extends Controller if($pid != $account['id']) { if($account['locked']) { - if(FollowerService::follows($pid, $account['id'])) { + if(!FollowerService::follows($pid, $account['id'])) { return []; } } diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index e6f3bf428..5171509d3 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -738,7 +738,7 @@ class PublicApiController extends Controller if($pid != $account['id']) { if($account['locked']) { - if(FollowerService::follows($pid, $account['id'])) { + if(!FollowerService::follows($pid, $account['id'])) { return []; } } @@ -778,7 +778,7 @@ class PublicApiController extends Controller if($pid != $account['id']) { if($account['locked']) { - if(FollowerService::follows($pid, $account['id'])) { + if(!FollowerService::follows($pid, $account['id'])) { return []; } } From 4470981af7cd5c2db406402775b53bc6a3b0af92 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sat, 11 Jun 2022 03:27:52 -0600 Subject: [PATCH 24/27] Improve follow request flow, federate rejections and delete rejections from database to properly handle future follow requests from same actor --- app/FollowRequest.php | 4 +- app/Http/Controllers/AccountController.php | 8 ++- .../FollowPipeline/FollowRejectPipeline.php | 69 +++++++++++++++++++ .../ActivityPub/Verb/RejectFollow.php | 25 +++++++ 4 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 app/Jobs/FollowPipeline/FollowRejectPipeline.php create mode 100644 app/Transformer/ActivityPub/Verb/RejectFollow.php diff --git a/app/FollowRequest.php b/app/FollowRequest.php index c1b0ac755..b501a4124 100644 --- a/app/FollowRequest.php +++ b/app/FollowRequest.php @@ -32,9 +32,9 @@ class FollowRequest extends Model return $this->belongsTo(Profile::class, 'following_id', 'id'); } - public function permalink($append = null) + public function permalink($append = null, $namespace = '#accepts') { - $path = $this->target->permalink("#accepts/follows/{$this->id}{$append}"); + $path = $this->target->permalink("{$namespace}/follows/{$this->id}{$append}"); return url($path); } } diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 02921368d..e1c9bfcb3 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -30,6 +30,7 @@ use App\Services\AccountService; use App\Services\UserFilterService; use App\Services\RelationshipService; use App\Jobs\FollowPipeline\FollowAcceptPipeline; +use App\Jobs\FollowPipeline\FollowRejectPipeline; class AccountController extends Controller { @@ -406,8 +407,11 @@ class AccountController extends Controller break; case 'reject': - $followRequest->is_rejected = true; - $followRequest->save(); + if($follower->domain != null && $follower->private_key === null) { + FollowRejectPipeline::dispatch($followRequest); + } else { + $followRequest->delete(); + } break; } diff --git a/app/Jobs/FollowPipeline/FollowRejectPipeline.php b/app/Jobs/FollowPipeline/FollowRejectPipeline.php new file mode 100644 index 000000000..99d6fa65c --- /dev/null +++ b/app/Jobs/FollowPipeline/FollowRejectPipeline.php @@ -0,0 +1,69 @@ +followRequest = $followRequest; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $follow = $this->followRequest; + $actor = $follow->actor; + $target = $follow->target; + + if($actor->domain == null || $actor->inbox_url == null || !$target->private_key) { + return; + } + + $fractal = new Fractal\Manager(); + $fractal->setSerializer(new ArraySerializer()); + $resource = new Fractal\Resource\Item($follow, new RejectFollow()); + $activity = $fractal->createData($resource)->toArray(); + $url = $actor->sharedInbox ?? $actor->inbox_url; + + Helpers::sendSignedObject($target, $url, $activity); + + $follow->delete(); + + return; + } +} diff --git a/app/Transformer/ActivityPub/Verb/RejectFollow.php b/app/Transformer/ActivityPub/Verb/RejectFollow.php new file mode 100644 index 000000000..a299e0765 --- /dev/null +++ b/app/Transformer/ActivityPub/Verb/RejectFollow.php @@ -0,0 +1,25 @@ + 'https://www.w3.org/ns/activitystreams', + 'type' => 'Reject', + 'id' => $follow->permalink(null, '#rejects'), + 'actor' => $follow->target->permalink(), + 'object' => [ + 'type' => 'Follow', + 'id' => $follow->activity && isset($follow->activity['id']) ? $follow->activity['id'] : null, + 'actor' => $follow->actor->permalink(), + 'object' => $follow->target->permalink() + ] + ]; + } +} From b4dda5776b77d4086811990c66a166a1b9930d32 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sat, 11 Jun 2022 03:31:24 -0600 Subject: [PATCH 25/27] Implement follow request api endpoints --- app/Http/Controllers/Api/ApiV1Controller.php | 71 ++++++++++++++++++-- 1 file changed, 65 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 37268fed5..43f11b860 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -83,6 +83,8 @@ use App\Services\DiscoverService; use App\Services\CustomEmojiService; use App\Services\MarkerService; use App\Models\Conversation; +use App\Jobs\FollowPipeline\FollowAcceptPipeline; +use App\Jobs\FollowPipeline\FollowRejectPipeline; class ApiV1Controller extends Controller { @@ -723,6 +725,13 @@ class ApiV1Controller extends Controller ->exists(); if($isFollowing == false) { + $followRequest = FollowRequest::whereFollowerId($user->profile_id) + ->whereFollowingId($target->id) + ->first(); + if($followRequest) { + $followRequest->delete(); + RelationshipService::refresh($target->id, $user->profile_id); + } $resource = new Fractal\Resource\Item($target, new RelationshipTransformer()); $res = $this->fractal->createData($resource)->toArray(); @@ -1150,10 +1159,14 @@ class ApiV1Controller extends Controller public function accountFollowRequests(Request $request) { abort_if(!$request->user(), 403); - + $this->validate($request, [ + 'limit' => 'sometimes|integer|min:1|max:40' + ]); $user = $request->user(); - $followRequests = FollowRequest::whereFollowingId($user->profile->id)->pluck('follower_id'); + $followRequests = FollowRequest::whereFollowingId($user->profile->id) + ->limit($request->input('limit', 40)) + ->pluck('follower_id'); $profiles = Profile::find($followRequests); @@ -1172,10 +1185,36 @@ class ApiV1Controller extends Controller public function accountFollowRequestAccept(Request $request, $id) { abort_if(!$request->user(), 403); + $pid = $request->user()->profile_id; + $target = AccountService::getMastodon($id); - // todo + if(!$target) { + return response()->json(['error' => 'Record not found'], 404); + } - return response()->json([]); + $followRequest = FollowRequest::whereFollowingId($pid)->whereFollowerId($id)->first(); + + if(!$followRequest) { + return response()->json(['error' => 'Record not found'], 404); + } + + $follower = $followRequest->follower; + $follow = new Follower(); + $follow->profile_id = $follower->id; + $follow->following_id = $pid; + $follow->save(); + + if($follower->domain != null && $follower->private_key === null) { + FollowAcceptPipeline::dispatch($followRequest); + } else { + FollowPipeline::dispatch($follow); + $followRequest->delete(); + } + + RelationshipService::refresh($pid, $id); + $res = RelationshipService::get($pid, $id); + $res['followed_by'] = true; + return $this->json($res); } /** @@ -1188,10 +1227,30 @@ class ApiV1Controller extends Controller public function accountFollowRequestReject(Request $request, $id) { abort_if(!$request->user(), 403); + $pid = $request->user()->profile_id; + $target = AccountService::getMastodon($id); - // todo + if(!$target) { + return response()->json(['error' => 'Record not found'], 404); + } - return response()->json([]); + $followRequest = FollowRequest::whereFollowingId($pid)->whereFollowerId($id)->first(); + + if(!$followRequest) { + return response()->json(['error' => 'Record not found'], 404); + } + + $follower = $followRequest->follower; + + if($follower->domain != null && $follower->private_key === null) { + FollowRejectPipeline::dispatch($followRequest); + } else { + $followRequest->delete(); + } + + RelationshipService::refresh($pid, $id); + $res = RelationshipService::get($pid, $id); + return $this->json($res); } /** From e97900a060b8fc011782cd2605fd73e3b90915ab Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sat, 11 Jun 2022 05:16:38 -0600 Subject: [PATCH 26/27] Update follower counts on follow_request approval --- app/Http/Controllers/AccountController.php | 30 +++++++++++++------- app/Http/Controllers/Api/ApiV1Controller.php | 27 +++++++++++++----- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index e1c9bfcb3..0d3177b9d 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -393,17 +393,27 @@ class AccountController extends Controller switch ($action) { case 'accept': - $follow = new Follower(); - $follow->profile_id = $follower->id; - $follow->following_id = $pid; - $follow->save(); + $follow = new Follower(); + $follow->profile_id = $follower->id; + $follow->following_id = $pid; + $follow->save(); - if($follower->domain != null && $follower->private_key === null) { - FollowAcceptPipeline::dispatch($followRequest); - } else { - FollowPipeline::dispatch($follow); - $followRequest->delete(); - } + $profile = Profile::findOrFail($pid); + $profile->followers_count++; + $profile->save(); + AccountService::del($profile->id); + + $profile = Profile::findOrFail($follower->id); + $profile->following_count++; + $profile->save(); + AccountService::del($profile->id); + + if($follower->domain != null && $follower->private_key === null) { + FollowAcceptPipeline::dispatch($followRequest); + } else { + FollowPipeline::dispatch($follow); + $followRequest->delete(); + } break; case 'reject': diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 43f11b860..18890483b 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -1160,18 +1160,21 @@ class ApiV1Controller extends Controller { abort_if(!$request->user(), 403); $this->validate($request, [ - 'limit' => 'sometimes|integer|min:1|max:40' + 'limit' => 'sometimes|integer|min:1|max:100' ]); $user = $request->user(); - $followRequests = FollowRequest::whereFollowingId($user->profile->id) + $res = FollowRequest::whereFollowingId($user->profile->id) ->limit($request->input('limit', 40)) - ->pluck('follower_id'); + ->pluck('follower_id') + ->map(function($id) { + return AccountService::getMastodon($id, true); + }) + ->filter(function($acct) { + return $acct && isset($acct['id']); + }) + ->values(); - $profiles = Profile::find($followRequests); - - $resource = new Fractal\Resource\Collection($profiles, new AccountTransformer()); - $res = $this->fractal->createData($resource)->toArray(); return $this->json($res); } @@ -1204,6 +1207,16 @@ class ApiV1Controller extends Controller $follow->following_id = $pid; $follow->save(); + $profile = Profile::findOrFail($pid); + $profile->followers_count++; + $profile->save(); + AccountService::del($profile->id); + + $profile = Profile::findOrFail($follower->id); + $profile->following_count++; + $profile->save(); + AccountService::del($profile->id); + if($follower->domain != null && $follower->private_key === null) { FollowAcceptPipeline::dispatch($followRequest); } else { From 434a99aac09312ae12d6f932a3e6bcc078319118 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 13 Jun 2022 01:57:54 -0600 Subject: [PATCH 27/27] Update compiled assets --- public/css/app.css | Bin 481841 -> 481835 bytes public/css/appdark.css | Bin 477257 -> 477251 bytes public/js/compose-ojtjadoml.js | Bin 114765 -> 67712 bytes public/js/daci-ojtjadoml.js | Bin 84104 -> 84133 bytes public/js/dffc-ojtjadoml.js | Bin 83012 -> 83041 bytes public/js/dmsg-ojtjadoml.js | Bin 45858 -> 45887 bytes public/js/dmyh-ojtjadoml.js | Bin 128563 -> 128592 bytes public/js/dmym-ojtjadoml.js | Bin 83342 -> 83371 bytes public/js/dsfc-ojtjadoml.js | Bin 82598 -> 82627 bytes public/js/dssc-ojtjadoml.js | Bin 86921 -> 86950 bytes public/js/home-ojtjadoml.js | Bin 142554 -> 143167 bytes public/js/manifest.js | Bin 3391 -> 3403 bytes public/js/notifications-ojtjadoml.js | Bin 23082 -> 24301 bytes public/js/post-ojtjadoml.js | Bin 132801 -> 132830 bytes public/js/profile-ojtjadoml.js | Bin 187223 -> 189570 bytes public/js/spa.js | Bin 281924 -> 282239 bytes public/js/vendor.js | Bin 2436342 -> 2563815 bytes public/js/vendor.js.LICENSE.txt | 2 +- public/mix-manifest.json | Bin 3567 -> 3567 bytes 19 files changed, 1 insertion(+), 1 deletion(-) diff --git a/public/css/app.css b/public/css/app.css index f543207e7b8ad9b9d6ce15c8ff0abd920a0940c8..5fd41e309d133c58be613376c2ad6c0a19a6ed39 100644 GIT binary patch delta 95 zcmdnEMRxTT*$qO1tcfW}rb(N{1$`Yivj%4}PA&*io4hzk4u}OO-w#p~(ap>&C@rZ@ q&d}JX4rsgTu(?9ND5#FpLXyM4HF!@lhA&`6?tR<Gy!fS47C*|ukdupedx0KIx7 ALjV8( diff --git a/public/css/appdark.css b/public/css/appdark.css index 4d407ec4b50df8b59e49d015d77a6d73fb2af2a3..8af92116edbd8ead0334e0d3f62b7446969d8068 100644 GIT binary patch delta 91 zcmX>(LH6(j*$qO1tcfW}rb(N{1$`Yivj%4}PA&*io4hzk4u}OO-w#p~(ap>&C@rZ@ o&d+LH6VX*$qO1tY*pPrskW)1$`YE6(%1FHUyH-gS8|T^pbSb@{4kHOA^zIb#pR{ qOTZ#U`IBWsv^S>&WimErgtTXbFaj|X5HkZY3lOtz&j?|={TToT0U+-H diff --git a/public/js/compose-ojtjadoml.js b/public/js/compose-ojtjadoml.js index d842d6821f5512b1ef8b27e0ba7c90313d222412..4c97fa3206a5886b4d39d5d2d5f8a890beaf3204 100644 GIT binary patch delta 455 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�DfoY9yLs`D$?wN-O-9J_LBc;Rj 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 XXFp!ELiq23vGs)M==%Dox%dA8`V~NV diff --git a/public/js/daci-ojtjadoml.js b/public/js/daci-ojtjadoml.js index c1463ea1461a6e864ac577b10e51f74502d5a7d2..cb4f89ea1915cb45a6c72d53c97101947288dd99 100644 GIT binary patch delta 94 zcmeB}$hveQ>xRny$zc@=ll%L*Ca2XaY+lx%&Bt$SWNBcasgrM8tYKkjVmW!@EXU1> w^Z2=0KoXNTE|X?4F*h-td|{c>=Bq0WC$oZhrjs9rN=}t$Y}~%omhmwc0B=DeEdT%j delta 133 zcmZ2Fk+owY>xRmHb>-BwG~+ZA>!kdml++^KqQsQU(qb#Kf(q;8{G9wED`it-GZS;e z$p`WyCU5BBnf$$1V6)+bzr6gWCKjeFKD qH#3kqxlu@XvcM`%R&z@e1Ix(=mpg9$y!uTKjJsv__IgXkM_d4>u^?gq diff --git a/public/js/dmsg-ojtjadoml.js b/public/js/dmsg-ojtjadoml.js index 76f2e2dc3e254b8b7131846fd5832b634d4097e9..f0699ad3442fd1e6eef3ecf26039b1cb7d534e98 100644 GIT binary patch delta 98 zcmZ4VjA{QfrVU&Hlb_p3PL>Q1lqyRs($LjSDatQM$uG~-%`8dH)lJUN$uH8}Y#6}L z$!ct5X<)F~HF7m83y3*6F;<$z#N5PmvSF0N=HPf=4^|M*bn?bf$<6zgr*H!Rqm3ZK delta 112 zcmdo0jA_v`rVU&H?8>QWX~tBd`n{FV(IA?n8YevECNv|0%asdD@WhIFK delta 86 zcmccchJEuJ_6@!l*_Bh%(u~tgCdXZrWLGvdHZw6d+&uB(R3TPV6AM$b&Du|T`60~7 m1|OtY%`Hs~EGHYjw%;uMW%D-{5O?~*8H~Bx?O!trasvQu03Rm+ diff --git a/public/js/dmym-ojtjadoml.js b/public/js/dmym-ojtjadoml.js index 2b3c576a61e7833759f3749c999dbdfcfa30c948..212aed7e53295f3d34a68f19d3f0e53479b9309e 100644 GIT binary patch delta 83 zcmeC{W?kLQy5VKtgOA_X$kM<-QzzfHSi{25#B%b#nU0&! i&E@B20ZB~$utb{G#N5QxbTi{h?uiiQc0nt~T5bSlaUDhg delta 119 zcmZ48&Dz(^y5VJ?x^ik-nsJ(mby9v&N@|gAQDRDFX|a`AL4|d4eolUom9nX^nTfgK zWP|*O$qGF@lhbL v!RCc?Vz^mA%*ldFq*+bOO-xNUE3RPfhcG7}{5EU)dvivi?N`kiFLD6@he09< delta 109 zcmX@y%DSwTbpvyshH`3JnsJ(mby9v&N@|gAQDRDFX|a`AL4|d4eolUom9nX^nTfff z_2dni5t|qEN%FCpnpl{cZQeI0h8x11d~m50v$>_o7b>0xLhbCSR>qn9MhsYx2`3h0UsybNN_}jVuieHcwv|%MD>pS}nzDVs2t; fI=OMV{pRqs8)iYdiPI&gD{wP5ZeQlX_?Qa-HdG!( delta 130 zcmZ3soV9Z~>xLhb)Rj}y(u~tgtdsJKQc{a_ixN{ZON*_{3M#CV^KZB{9XFS)T{nvv$en!g%be-&Js5?yU-e+T$OQoNHZQLL diff --git a/public/js/home-ojtjadoml.js b/public/js/home-ojtjadoml.js index a09adaea281b419695ce97604ad73139cab767a7..4669d69b057db121e8867d35f182fbc1eda98310 100644 GIT binary patch delta 594 zcmcb0lVkrqjt#e#SrljFm;2-=rugO;rCKQ(>f}J#A(^?U`K2XRW%-#Y3I=dt$C8rN z+=7x~tIao-8L}{$DNg2Ett6yVqK9mbt)jtZoz=!nJS9byA^A|#CpUVEPkzA176!8c zW|X$JPDw^)u^zg(ovpDwSOV2(Ln{qzqLZyNqy%6_Kpk&8*^o_ABRMe->V#BVpa(IW zTC1sJnrf`6xjA<2WI-F9q|`KEP`IQPmlWk!TBVidC6{F8=V@qGC+DOl7C}vhI04N% z&CT!ky;PmN{EWincTcz`AHAY5S^P-QWd27ylfxbhY%YEpEY50dWNBcq`ShQwj64<= z7M2E@I+?b`8WxlH|8?2?;omJG7LbDJfn1EztS06rrl!*ixfmU%>kBcavVhcsWmqgN zj4h@c@-jMY|0%@y^fwDg<>bb{Qqv8r85_6P@-xj9W(BD+oc@uOY1Z_)rx>}mA6914 zXJ!Ef<@CNJM)~O&w&%g(tfnRw zre>St{#|8cH8L_awb*LGs45H*o$koTD8*`SX<}eGy-}EP8AJg@)Wq1p(r|hq7o+3$ z9udZ;zoE)LIx^0lZY#(nxLrw*sau#CsBH4bx6;$spJwdd9;V8q&piDeACv3$Ihst1 FSpjpmNmT#< diff --git a/public/js/manifest.js b/public/js/manifest.js index 8fd2c996f2f9a7f8624f64bf4e315940efb41ebe..0325abbc3da32e562102e583ae1df16fb4e18fd5 100644 GIT binary patch delta 25 gcmdllby{kJ6|bO9qF!FIZCQS1ih@C{riP|90B*7e!~g&Q delta 13 UcmX>twO?w36)$V8riP|903l!l?EnA( diff --git a/public/js/notifications-ojtjadoml.js b/public/js/notifications-ojtjadoml.js index b8170ea9ace2f3696764198b517cff1a4557a756..9730cf9616ebc56edd18e5918d63efd103918ac8 100644 GIT binary patch delta 1189 zcmbVL&rcgi7?n{>V@UZS3IRjOdJM&jckEqkyo(_L8YvM6XiFqgDY)){4EHZ7HANZp}6cr!lS^Th!j;xC2Gi+uMu&&98YCj8S5=bI78i64UPW@X1FKlU#l=QH+iLnkeplZycwDc2UBTnDGkZF zUpl9UvlH;^%4w6wz6^l1(+B(a`ry6%4R{M9(?wjeXk8)}+p{s_wBlit+MK#lrGQg# zvN`?zN(3*|rHYGFNFkiNUiO$XE-=wuM=B6=U*e8rJDio6FrPWL zhZ+qzCo4RWKZqd-$qEGGvlnW9nvVo`Ig)em*L?i^ws|+c(g!EolUmhf72+OsXE|Av zWXVHXNLF2^#4MUbahf1zD-j7+gs*Oe;cPMbvA8@SoVdy%D~i=4Lq$rNvb{1FXL!4~ z1y3@gke3Ibf2A+fR@6`)07-oW)%oFJVWKLv3@o^m>>~w!+zE#?y;>K7L|k+V}^0$+0Zwkh=d3 z{?2)~AEVFIQCM9axzUmA{}F6DR;^-7MO-Q3g5{X|r~xlC(LtxiEoM{f)l8Fm9=yv; qKQgZM`(aq{f02e@=vE5Wj8Vwxryq2j>$LS=>YzP}*8JJ{KJqu@Sc6Rf delta 433 zcmaF6mvPk=#tk)6lXJ~DCeM|U-)tlu%EoGHXl80USwYQk@?OP8j?}bdvs4R%s5SNj4VveCSOqT zgKOKYrYgw93KBM$yii>VYQh0^M~EJfkfo8ip~d6_>dT-k1vSaZ1&)oISv4aVCp(0( zvFBu_XOyHCO;*sCm|UurJK0)G2}9gpM|yIfmc!%{9W`{h&6{*AxF)-p2u}_$SLRVl zOinJ*ODsz)Ni3Q?$vKMCzRcD@-CC)(cJhX3rO670N|O!31eJ4>bPbehb)rl3;>$FY z9F(+yjAD&cz0%^;qP)c1R87s;$se7?7^5fW*(kDtT{wB3jojq_h8#jg`K5U&sVTYz onK?NMxkb80N|WEa7*A%jnZ}ZmSdLfu>HTZLx-h zp^2r%CSUw6#cE=1Vrn}1;5Wz3TmN?bg>okfNp6q*&6vUs0Ez)9 A+yDRo delta 113 zcmccD%W<%mV}t2Ub>-BwG~+ZA>!kdml++^KqQsQU(qb#Kf(q;8{G9wED`it-GZS;e z$?vvBOwPH+v-$2#K4Df<6AM$b%^%*>3P6~X8-7Z$np>I}SZ<#9_w-*D5Oea!S5lKd N{B7F)=QracE&$LKF8u%i diff --git a/public/js/profile-ojtjadoml.js b/public/js/profile-ojtjadoml.js index f4bf452f76d001afe95ad118bbc9f9d37fc43030..0d868f1f04633e42e45d44cf53f48c1f9c4f5cbf 100644 GIT binary patch delta 1938 zcmbVMO-vML7|!?ZF26+=b_I4p9k6U!-C1T}S=^;Wu!#-Tgw{j-LBL_>W0^9$v&_z} z7(%Q~s#w6rRTb7&K_iHY`7J+(1C)I*cTmj1-pdTH93T|rRb(A&)S zz0Whx`#kSE-(4+z=XU9(3upA*)gJc{rQ$9{5UJQv$4&SHtsLjqf4#X;|3ayleQ+jC zJlnKjLKqv6#10yi#OVAR%j(Iq$+a;hnO0;Pl$CfR^#}AH&Nk_va|OEIR<2LZR#*6Z zf*Q{xXi`h}@_p^p=hKg}jK1&OoBGwy*4R7h_`vLibFrN^pRX}@Gc{4DZ+=iR`@%zS zJu)uh>B>qXRahlURarR94hmwNj>i;PQKMNwZDd(dP)GdjN=k@H+Tmz0+@2CdQA)M)YRU9?!faAXvZ@px*39qqxX6ah&(ttMvyzRgN+va)Fl&ctt~k`17gMu+*?L(@ zj*Jf~sz_B<6+|hMj&kjbo7d==#>y5IRq<9mS&zSXNonC?C2cD*M~5v}mzbI3OJp=E z`mwx>tiyYoND2B~r2NQ=G(jPzNm)9tbKb(#7-NoxBr=O*TC6=EoTduNw4_N&GWw*^ zJOLAIZcQ^(NK@9dOUV!|7h07$1WHC@(~7FGni7x8G-oaTQ%S0Dvx}?^tWc2)AZOM1 zLb4$ots*XC>pId<_~ACf*u!S-*i=Nk=qw}!q#ZjvB!)A7;xr!Dl23|U`DUbK%G8k8 z>&F|6>H7vBDKl<1kiQrQ9}Yz##`PWK1~^)pBOHgvy2;PZNSJSn_ybZ$x-lHu%C+Eh zH`#7ne~rZ4c?jO!PrSBpqzy0kkyr5e0J&|q@OWoGsj-LJLao@!bD9(+`d4>;*gS-3uq4yZ9O$7}^IPFMF|RKb(5* zq8Fx?IkV%#UP!r^=flPOZfJmX0zWtawQg(6tidv+S&zBAEsaffE>Oqe{fndy*Y-ig z0_^Hr6~I3M)S|N+97WnNE1P>xvAhr3Ecp8VRp6X$;d7_^p#sC_!DToG;7fvY0z`1` zAoy_CApBI6QfXGAhXxEj23u_S&8tv~b%RiicQ|n4k3n!%N(q|QghXoT&kBWmq!M3u zoAt*M@FI5pK?*P{z$Ma*za4}I!=!iGEy6YbkLyYTLU<_)cH^TV-~bCxl8wj+uoKtC zptgKoct({cCj5N?96*KnxQy>LxA5vC9I*{XMWJl4X!cl9)UU*d?EJNfj?IC2qeUgOi7 ZFb8XP)6tBXC9^}3W#y1@;TFtP{0E>Ri@pE= delta 1143 zcmb7CZD?Cn80LM`v{}2h>4)u7yEeU(OXHGw^Sx$-r3%8_oRR4d+pg_x?nx7Dam1JW zJm-Dh_kEsQYr1u*Y5Dzgt=yksOgpHn8q*R3iV2_hn-}%=6~{XzXqV+d?$4{`iJX>T z{+#CVny2HEDc(I`Uc1_C_MMl!>=-L>S*{-btXg{Pcp+uzMP~5Ipp>393=4ijHKrMt zJm$&s<&~DD@dGQ1cU+Q)xggfiu#06fp-h-gy20hx6$wSdvA|wBv=h?wLmxPWJOFPx zELMcY*c81IgFbrde%LPl^uVufdoU1=hQ;rXz$)4!;XRQkU4In5w})cUNJv~b1k0T@ z3eAr~PhBh)2#EPKG=j|{Q)&cy?XjV-GDJs5U>HK=JOcf7fq)XKK8Pn7)c;adnZqs@ zO=jURwJf2ZeqO|FG|~yp7gU|#@3v(TfpCr zO59*--kni>hHlN2`Gyo47O=Pap(ptNdBu!)i!&xj2Joi>!bwEtclkf(Ic^?Y0k zTJ^j}EgIFkUR2XLUWrSJKP(ZfV;2>VTeJJ-Iy8`yLzyzDBYLYUlFpj(_-z-#Dm8~UuZD~%>hoUXZf_B9Mr%7;F2`&C@;sKx&7REyMm zc)QWQXEXnIBb#}5&~Nua8#TR++iC52=%&**u}$=Tgde+L!2GFx2g)+7-awbQa|6FX X`fwjM(}~O2LfM;mkN9pK-)jF0v>$xL diff --git a/public/js/spa.js b/public/js/spa.js index 7d84e77efae2dcc9d8b0983ed19b8fcb5c17f2b4..44f7bf7fbb9070396f5b71eb4ca89b0416fc86b6 100644 GIT binary patch delta 533 zcmYLF&ui0g9Od(E=$frM=h`Z6^hYMNWm#<3rrN;NO=03>IQ1w<(q{IHHVH|#T6L(W z9YqTJfOzmv*r@QmDh%um0;d6Mr_ddM$mLK-~eAKhJHE>9? zRiiwqR&_|8x-9Nb);S8NR1k0vnGvNmQ*s0X?j(1 zsH;nc_oW$5eGBdvE2?vj&gvIkTUV=&lE^l)y^&^AzVi};071y$6M#zN!jBMU00IN5 z>)KSCaj9v4lNQkwzKm)w*C;Z;s71D#kWdmbxp&!>SK`-N--1PX?z_Z;~lPUSDn9P Ypbgs8a98~Qyz>@Myz?=O=iZ$91s~+J5C8xG delta 352 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 Z+C|YjX|+q_XJ($AK(d5UY_oqk{a@qxI+6eY delta 82658 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 Y>8|uK%;58n^fB-=3(2{eW8O&qe_b>(2mk;8 diff --git a/public/js/vendor.js.LICENSE.txt b/public/js/vendor.js.LICENSE.txt index 779711dec..2a130eef4 100644 --- a/public/js/vendor.js.LICENSE.txt +++ b/public/js/vendor.js.LICENSE.txt @@ -16,7 +16,7 @@ */ /*! - * BootstrapVue Icons, generated from Bootstrap Icons 1.2.2 + * BootstrapVue Icons, generated from Bootstrap Icons 1.5.0 * * @link https://icons.getbootstrap.com/ * @license MIT diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 797881f7758bf608cd02a14e3f7badf976b5378a..96119a454784f5c29afcdba11561e3dd4e803123 100644 GIT binary patch delta 658 zcmWMkJ8l**3|1N1^0#8)v2-A+05O2%IF27bZ~~6NhIN$H>au9a3fI%c88A0d76j>X_m@ueK>ueXmIZq4QuYkrfo(v z(cBvVMEJUYc1&4%&FHlbb3xxz3iW=NvItKDoPIofvA4a(fziqx%XmePIw+aLzv>Dg##8R~7$Jq5<* zMmV{w*N0;&HakJJ7RCbMbrWXnSjPUXDC^td`;(DX!D@Dhi4A1TF58aGSjlD7>t~0Q z()xVyVBK82OMM6o1SIR`G)sVQk-G~aMS7m=@g=0bv)iT6zHuE#_jC%*is7q{B?Qf7?Bc{Ts20!K72g<2Lqt8 Ao&W#< delta 658 zcmWlXJ&x2d48^q+JIm~dhL2_o{#pT|0Lf0AI3C~x9Dyp1?HfP=;s8`Dl!B6q79mk{ z1`e?YSaAcgauZok@q0h}=Hlk!*SpiLB+DsTMMfMID1?Kw)t*q&ddyF!A2$VGeWeaA z?p)GHuDLbzh`^@v;qJIqNt~Pq3@D{Z?cFnnxN4z>1!uqWV1C~n=GAW7M9Wa*9^OGo zDik0dLBe?`G?{;QuO2&jbFNr(ab@5fhD+F$bfhj5PwvmxXD>HG9W@YYt0PJx2xlBw zghYjMn_te38!kVfC}WrvP;H@P*@Z?~6U65Attc1tYCYvDy$68-!dO4Mb=PR~&E4bH zl-r=*Yat|zpuyaYiv^bC-R8F?f(6U4Sy;=>!ICZ*5i2cL&(-F?B~ml0d30y@#12hk zIg@0VsVu|u?f$rRw&5uRYZbt5QdvjXQ0bP}g!yCt^VtB$jv%8f=!KIgsv39V?2cA0 zU+lMSn_tf#&8zbdTdo~gY*A7oLTiGH?XuInEp9TO9$?d^Jy%tzX{|CUEb_UukVq|Z zE%W{1`NjsYa*4VP5gUo6l)iXmZ!10j{&To@@&o{JT~n@!*5#BHxKY%S6W*5C<^J>j EKPjTPp8x;=