diff --git a/.circleci/config.yml b/.circleci/config.yml index 13608790a..b80170c4c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ jobs: build: docker: # Specify the version you desire here - - image: cimg/php:7.4.26 + - image: cimg/php:8.1.12 # Specify service dependencies here if necessary # CircleCI maintains a library of pre-built images diff --git a/CHANGELOG.md b/CHANGELOG.md index b9f060084..12c35cd56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,33 @@ ## [Unreleased](https://github.com/pixelfed/pixelfed/compare/v0.11.4...dev) +### New Features +- Portfolios ([#3705](https://github.com/pixelfed/pixelfed/pull/3705)) +- Server Directory ([#3762](https://github.com/pixelfed/pixelfed/pull/3762)) +- Manually verify email address (php artisan user:verifyemail) ([682f5f0f](https://github.com/pixelfed/pixelfed/commit/682f5f0f)) + +### Updates +- Update ApiV1Controller, include self likes in favourited_by endpoint ([58b331d2](https://github.com/pixelfed/pixelfed/commit/58b331d2)) +- Update PublicApiController, remove expensive and unused relationships ([2ecc3144](https://github.com/pixelfed/pixelfed/commit/2ecc3144)) +- Update status deletion, fix database lock issues and side effects ([04e8c96a](https://github.com/pixelfed/pixelfed/commit/04e8c96a)) +- Fix remote profile avatar urls when storing locally ([b0422d4f](https://github.com/pixelfed/pixelfed/commit/b0422d4f)) +- Enable network timeline caching by default ([c990ac2a](https://github.com/pixelfed/pixelfed/commit/c990ac2a)) +- Redirect /home to / ([97032997](https://github.com/pixelfed/pixelfed/commit/97032997)) +- Fix 2FA backup code bug ([a231b3c5](https://github.com/pixelfed/pixelfed/commit/a231b3c5)) +- Update federation config, enable remote follows by default ([59702d40](https://github.com/pixelfed/pixelfed/commit/59702d40)) +- Update ApiV1Controller, fix followAccountById with firstOrCreate() ([1d52ad0b](https://github.com/pixelfed/pixelfed/commit/1d52ad0b)) +- Update AccountService, fix delete status ([8b7121f9](https://github.com/pixelfed/pixelfed/commit/8b7121f9)) +- Update ap helpers, fix duplicate entry bug ([85cfa1ba](https://github.com/pixelfed/pixelfed/commit/85cfa1ba)) +- Update Inbox, fix handleUndoActivity ([d660e46b](https://github.com/pixelfed/pixelfed/commit/d660e46b)) +- Update HomeSettings controller, bail earlier when attempting to update email that already exists ([399bf5f8](https://github.com/pixelfed/pixelfed/commit/399bf5f8)) +- Update ProfileController, cache actor object and atom feed ([8665eab1](https://github.com/pixelfed/pixelfed/commit/8665eab1)) +- Update NotificationTransformer, fix mediaTag and modLog types ([b6c06c4b](https://github.com/pixelfed/pixelfed/commit/b6c06c4b)) +- Update landing view, add `app.name` and `app.short_description` for better customizability ([bda9d16b](https://github.com/pixelfed/pixelfed/commit/bda9d16b)) +- Update Profile, fix avatarUrl paths. Fixes #3559 #3634 ([989e4249](https://github.com/pixelfed/pixelfed/commit/989e4249)) +- Update InboxPipeline, bump request timeout from 5s to 60s ([bb120019](https://github.com/pixelfed/pixelfed/commit/bb120019)) +- Update web routes, fix missing hom route ([a9f4ddfc](https://github.com/pixelfed/pixelfed/commit/a9f4ddfc)) +- ([](https://github.com/pixelfed/pixelfed/commit/)) + ## [v0.11.4 (2022-10-04)](https://github.com/pixelfed/pixelfed/compare/v0.11.3...v0.11.4) ### New Features @@ -94,7 +121,6 @@ - Update CollectionController, limit max title and description length ([6e76cf4b](https://github.com/pixelfed/pixelfed/commit/6e76cf4b)) - Update collection components, fix title/description padding/overflow bug and add title/description limit and input counter ([6e4272a8](https://github.com/pixelfed/pixelfed/commit/6e4272a8)) - Update Media model, fix thumbnail cdn paths ([9888af12](https://github.com/pixelfed/pixelfed/commit/9888af12)) -- ([](https://github.com/pixelfed/pixelfed/commit/)) ## [v0.11.3 (2022-05-09)](https://github.com/pixelfed/pixelfed/compare/v0.11.2...v0.11.3) diff --git a/app/Console/Commands/SendUpdateActor.php b/app/Console/Commands/SendUpdateActor.php new file mode 100644 index 000000000..369d582a4 --- /dev/null +++ b/app/Console/Commands/SendUpdateActor.php @@ -0,0 +1,181 @@ +count(); + $totalInstanceCount = Instance::count(); + $this->info('Found ' . $totalUserCount . ' local accounts and ' . $totalInstanceCount . ' remote instances'); + + $task = $this->choice( + 'What do you want to do?', + [ + 'View top instances', + 'Send updates to an instance' + ], + 0 + ); + + if($task === 'View top instances') { + $this->table( + ['domain', 'user_count', 'last_synced'], + Instance::orderByDesc('user_count')->take(20)->get(['domain', 'user_count', 'actors_last_synced_at'])->toArray() + ); + return Command::SUCCESS; + } else { + $domain = $this->anticipate('Enter the instance domain', function ($input) { + return Instance::where('domain', 'like', '%' . $input . '%')->pluck('domain')->toArray(); + }); + if(!$this->confirm('Are you sure you want to send actor updates to ' . $domain . '?')) { + return; + } + if($cur = Instance::whereDomain($domain)->whereNotNull('actors_last_synced_at')->first()) { + if(!$this->option('force')) { + $this->error('ERROR: Cannot re-sync this instance, it was already synced on ' . $cur->actors_last_synced_at); + return; + } + } + $this->touchStorageCache($domain); + $this->line(' '); + $this->error('Keep this window open during this process or it will not complete!'); + $sharedInbox = Profile::whereDomain($domain)->whereNotNull('sharedInbox')->first(); + if(!$sharedInbox) { + $this->error('ERROR: Cannot find the sharedInbox of ' . $domain); + return; + } + $url = $sharedInbox->sharedInbox; + $this->line(' '); + $this->info('Found sharedInbox: ' . $url); + $bar = $this->output->createProgressBar($totalUserCount); + $bar->start(); + + $startCache = $this->getStorageCache($domain); + User::whereNull('status')->when($startCache, function($query, $startCache) use($bar) { + $bar->advance($startCache); + return $query->where('id', '>', $startCache); + })->chunk(50, function($users) use($bar, $url, $domain) { + foreach($users as $user) { + $this->updateStorageCache($domain, $user->id); + $profile = Profile::find($user->profile_id); + if(!$profile) { + continue; + } + $body = $this->updateObject($profile); + try { + Helpers::sendSignedObject($profile, $url, $body); + } catch (HttpException $e) { + continue; + } + $bar->advance(); + } + }); + $bar->finish(); + $this->line(' '); + $instance = Instance::whereDomain($domain)->firstOrFail(); + $instance->actors_last_synced_at = now(); + $instance->save(); + $this->info('Finished!'); + return Command::SUCCESS; + } + + return Command::SUCCESS; + } + + protected function updateObject($profile) + { + return [ + '@context' => [ + 'https://w3id.org/security/v1', + 'https://www.w3.org/ns/activitystreams', + [ + 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers', + ], + ], + 'id' => $profile->permalink('#updates/' . time()), + 'actor' => $profile->permalink(), + 'type' => 'Update', + 'object' => $this->actorObject($profile) + ]; + } + + protected function touchStorageCache($domain) + { + $path = 'actor-update-cache/' . $domain; + if(!Storage::exists($path)) { + Storage::put($path, ""); + } + } + + protected function getStorageCache($domain) + { + $path = 'actor-update-cache/' . $domain; + return Storage::get($path); + } + + protected function updateStorageCache($domain, $value) + { + $path = 'actor-update-cache/' . $domain; + Storage::put($path, $value); + } + + protected function actorObject($profile) + { + $permalink = $profile->permalink(); + return [ + 'id' => $permalink, + 'type' => 'Person', + 'following' => $permalink . '/following', + 'followers' => $permalink . '/followers', + 'inbox' => $permalink . '/inbox', + 'outbox' => $permalink . '/outbox', + 'preferredUsername' => $profile->username, + 'name' => $profile->name, + 'summary' => $profile->bio, + 'url' => $profile->url(), + 'manuallyApprovesFollowers' => (bool) $profile->is_private, + 'publicKey' => [ + 'id' => $permalink . '#main-key', + 'owner' => $permalink, + 'publicKeyPem' => $profile->public_key, + ], + 'icon' => [ + 'type' => 'Image', + 'mediaType' => 'image/jpeg', + 'url' => $profile->avatarUrl(), + ], + 'endpoints' => [ + 'sharedInbox' => config('app.url') . '/f/inbox' + ] + ]; + } +} diff --git a/app/Console/Commands/UserVerifyEmail.php b/app/Console/Commands/UserVerifyEmail.php new file mode 100644 index 000000000..3b3cac5ef --- /dev/null +++ b/app/Console/Commands/UserVerifyEmail.php @@ -0,0 +1,53 @@ +argument('username'))->first(); + + if(!$user) { + $this->error('Username not found'); + return; + } + + $user->email_verified_at = now(); + $user->save(); + $this->info('Successfully verified email address for ' . $user->username); + } +} diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 0d3177b9d..89f46e046 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -513,26 +513,25 @@ class AccountController extends Controller } } - protected function twoFactorBackupCheck($request, $code, User $user) - { - $backupCodes = $user->{'2fa_backup_codes'}; - if($backupCodes) { - $codes = json_decode($backupCodes, true); - foreach ($codes as $c) { - if(hash_equals($c, $code)) { - $codes = array_flatten(array_diff($codes, [$code])); - $user->{'2fa_backup_codes'} = json_encode($codes); - $user->save(); - $request->session()->push('2fa.session.active', true); - return true; - } else { - return false; - } - } - } else { - return false; - } - } + protected function twoFactorBackupCheck($request, $code, User $user) + { + $backupCodes = $user->{'2fa_backup_codes'}; + if($backupCodes) { + $codes = json_decode($backupCodes, true); + foreach ($codes as $c) { + if(hash_equals($c, $code)) { + $codes = array_flatten(array_diff($codes, [$code])); + $user->{'2fa_backup_codes'} = json_encode($codes); + $user->save(); + $request->session()->push('2fa.session.active', true); + return true; + } + } + return false; + } else { + return false; + } + } public function accountRestored(Request $request) { diff --git a/app/Http/Controllers/Admin/AdminDirectoryController.php b/app/Http/Controllers/Admin/AdminDirectoryController.php new file mode 100644 index 000000000..1e4db7d2d --- /dev/null +++ b/app/Http/Controllers/Admin/AdminDirectoryController.php @@ -0,0 +1,453 @@ +all())->pluck('name'); + $res['admins'] = User::whereIsAdmin(true) + ->where('2fa_enabled', true) + ->get()->map(function($user) { + return [ + 'uid' => (string) $user->id, + 'pid' => (string) $user->profile_id, + 'username' => $user->username, + 'created_at' => $user->created_at + ]; + }); + $config = ConfigCache::whereK('pixelfed.directory')->first(); + if($config) { + $data = $config->v ? json_decode($config->v, true) : []; + $res = array_merge($res, $data); + } + + if(empty($res['summary'])) { + $summary = ConfigCache::whereK('app.short_description')->pluck('v'); + $res['summary'] = $summary ? $summary[0] : null; + } + + if(isset($res['banner_image']) && !empty($res['banner_image'])) { + $res['banner_image'] = url(Storage::url($res['banner_image'])); + } + + if(isset($res['favourite_posts'])) { + $res['favourite_posts'] = collect($res['favourite_posts'])->map(function($id) { + return StatusService::get($id); + }) + ->filter(function($post) { + return $post && isset($post['account']); + }) + ->values(); + } + + $res['community_guidelines'] = config_cache('app.rules') ? json_decode(config_cache('app.rules'), true) : []; + $res['open_registration'] = (bool) config_cache('pixelfed.open_registration'); + $res['oauth_enabled'] = (bool) config_cache('pixelfed.oauth_enabled') && file_exists(storage_path('oauth-public.key')) && file_exists(storage_path('oauth-private.key')); + + $res['activitypub_enabled'] = (bool) config_cache('federation.activitypub.enabled'); + + $res['feature_config'] = [ + 'media_types' => Str::of(config_cache('pixelfed.media_types'))->explode(','), + 'image_quality' => config_cache('pixelfed.image_quality'), + 'optimize_image' => config_cache('pixelfed.optimize_image'), + 'max_photo_size' => config_cache('pixelfed.max_photo_size'), + 'max_caption_length' => config_cache('pixelfed.max_caption_length'), + 'max_altext_length' => config_cache('pixelfed.max_altext_length'), + 'enforce_account_limit' => config_cache('pixelfed.enforce_account_limit'), + 'max_account_size' => config_cache('pixelfed.max_account_size'), + 'max_album_length' => config_cache('pixelfed.max_album_length'), + 'account_deletion' => config_cache('pixelfed.account_deletion'), + ]; + + if(config_cache('pixelfed.directory.testimonials')) { + $testimonials = collect(json_decode(config_cache('pixelfed.directory.testimonials'),true)) + ->map(function($t) { + return [ + 'profile' => AccountService::get($t['profile_id']), + 'body' => $t['body'] + ]; + }); + $res['testimonials'] = $testimonials; + } + + $validator = Validator::make($res['feature_config'], [ + 'media_types' => [ + 'required', + function ($attribute, $value, $fail) { + if (!in_array('image/jpeg', $value->toArray()) || !in_array('image/png', $value->toArray())) { + $fail('You must enable image/jpeg and image/png support.'); + } + }, + ], + 'image_quality' => 'required_if:optimize_image,true|integer|min:75|max:100', + 'max_altext_length' => 'required|integer|min:1000|max:5000', + 'max_photo_size' => 'required|integer|min:15000|max:100000', + 'max_account_size' => 'required_if:enforce_account_limit,true|integer|min:1000000', + 'max_album_length' => 'required|integer|min:4|max:20', + 'account_deletion' => 'required|accepted', + 'max_caption_length' => 'required|integer|min:500|max:10000' + ]); + + $res['requirements_validator'] = $validator->errors(); + + $res['is_eligible'] = $res['open_registration'] && + $res['oauth_enabled'] && + $res['activitypub_enabled'] && + count($res['requirements_validator']) === 0 && + $this->validVal($res, 'admin') && + $this->validVal($res, 'summary', null, 10) && + $this->validVal($res, 'favourite_posts', 3) && + $this->validVal($res, 'contact_email') && + $this->validVal($res, 'privacy_pledge') && + $this->validVal($res, 'location'); + + $res['has_submitted'] = config_cache('pixelfed.directory.has_submitted') ?? false; + $res['synced'] = config_cache('pixelfed.directory.is_synced') ?? false; + $res['latest_response'] = config_cache('pixelfed.directory.latest_response') ?? null; + + $path = base_path('resources/lang'); + $langs = collect([]); + + foreach (new \DirectoryIterator($path) as $io) { + $name = $io->getFilename(); + $skip = ['vendor']; + if($io->isDot() || in_array($name, $skip)) { + continue; + } + + if($io->isDir()) { + $langs->push(['code' => $name, 'name' => locale_get_display_name($name)]); + } + } + + $res['available_languages'] = $langs->sortBy('name')->values(); + $res['primary_locale'] = config('app.locale'); + + $submissionState = Http::withoutVerifying() + ->post('https://pixelfed.org/api/v1/directory/check-submission', [ + 'domain' => config('pixelfed.domain.app') + ]); + + $res['submission_state'] = $submissionState->json(); + return $res; + } + + protected function validVal($res, $val, $count = false, $minLen = false) + { + if(!isset($res[$val])) { + return false; + } + + if($count) { + return count($res[$val]) >= $count; + } + + if($minLen) { + return strlen($res[$val]) >= $minLen; + } + + return $res[$val]; + } + + public function directoryStore(Request $request) + { + $this->validate($request, [ + 'location' => 'string|min:1|max:53', + 'summary' => 'string|nullable|max:140', + 'admin_uid' => 'sometimes|nullable', + 'contact_email' => 'sometimes|nullable|email:rfc,dns', + 'favourite_posts' => 'array|max:12', + 'favourite_posts.*' => 'distinct', + 'privacy_pledge' => 'sometimes', + 'banner_image' => 'sometimes|mimes:jpg,png|dimensions:width=1920,height:1080|max:5000' + ]); + + $config = ConfigCache::firstOrNew([ + 'k' => 'pixelfed.directory' + ]); + + $res = $config->v ? json_decode($config->v, true) : []; + $res['summary'] = strip_tags($request->input('summary')); + $res['favourite_posts'] = $request->input('favourite_posts'); + $res['admin'] = (string) $request->input('admin_uid'); + $res['contact_email'] = $request->input('contact_email'); + $res['privacy_pledge'] = (bool) $request->input('privacy_pledge'); + + if($request->filled('location')) { + $exists = (new ISO3166)->name($request->location); + if($exists) { + $res['location'] = $request->input('location'); + } + } + + if($request->hasFile('banner_image')) { + collect(Storage::files('public/headers')) + ->filter(function($name) { + $protected = [ + 'public/headers/.gitignore', + 'public/headers/default.jpg', + 'public/headers/missing.png' + ]; + return !in_array($name, $protected); + }) + ->each(function($name) { + Storage::delete($name); + }); + $path = $request->file('banner_image')->store('public/headers'); + $res['banner_image'] = $path; + ConfigCacheService::put('app.banner_image', url(Storage::url($path))); + + Cache::forget('api:v1:instance-data-response-v1'); + } + + $config->v = json_encode($res); + $config->save(); + + ConfigCacheService::put('pixelfed.directory', $config->v); + $updated = json_decode($config->v, true); + if(isset($updated['banner_image'])) { + $updated['banner_image'] = url(Storage::url($updated['banner_image'])); + } + return $updated; + } + + public function directoryHandleServerSubmission(Request $request) + { + $reqs = []; + $reqs['feature_config'] = [ + 'open_registration' => config_cache('pixelfed.open_registration'), + 'activitypub_enabled' => config_cache('federation.activitypub.enabled'), + 'oauth_enabled' => config_cache('pixelfed.oauth_enabled'), + 'media_types' => Str::of(config_cache('pixelfed.media_types'))->explode(','), + 'image_quality' => config_cache('pixelfed.image_quality'), + 'optimize_image' => config_cache('pixelfed.optimize_image'), + 'max_photo_size' => config_cache('pixelfed.max_photo_size'), + 'max_caption_length' => config_cache('pixelfed.max_caption_length'), + 'max_altext_length' => config_cache('pixelfed.max_altext_length'), + 'enforce_account_limit' => config_cache('pixelfed.enforce_account_limit'), + 'max_account_size' => config_cache('pixelfed.max_account_size'), + 'max_album_length' => config_cache('pixelfed.max_album_length'), + 'account_deletion' => config_cache('pixelfed.account_deletion'), + ]; + + $validator = Validator::make($reqs['feature_config'], [ + 'open_registration' => 'required|accepted', + 'activitypub_enabled' => 'required|accepted', + 'oauth_enabled' => 'required|accepted', + 'media_types' => [ + 'required', + function ($attribute, $value, $fail) { + if (!in_array('image/jpeg', $value->toArray()) || !in_array('image/png', $value->toArray())) { + $fail('You must enable image/jpeg and image/png support.'); + } + }, + ], + 'image_quality' => 'required_if:optimize_image,true|integer|min:75|max:100', + 'max_altext_length' => 'required|integer|min:1000|max:5000', + 'max_photo_size' => 'required|integer|min:15000|max:100000', + 'max_account_size' => 'required_if:enforce_account_limit,true|integer|min:1000000', + 'max_album_length' => 'required|integer|min:4|max:20', + 'account_deletion' => 'required|accepted', + 'max_caption_length' => 'required|integer|min:500|max:10000' + ]); + + if(!$validator->validate()) { + return response()->json($validator->errors(), 422); + } + + ConfigCacheService::put('pixelfed.directory.submission-key', Str::random(random_int(40, 69))); + ConfigCacheService::put('pixelfed.directory.submission-ts', now()); + + $data = (new PixelfedDirectoryController())->buildListing(); + $res = Http::withoutVerifying()->post('https://pixelfed.org/api/v1/directory/submission', $data); + return 200; + } + + public function directoryDeleteBannerImage(Request $request) + { + $bannerImage = ConfigCache::whereK('app.banner_image')->first(); + $directory = ConfigCache::whereK('pixelfed.directory')->first(); + if(!$bannerImage && !$directory || empty($directory->v)) { + return; + } + $directoryArr = json_decode($directory->v, true); + $path = isset($directoryArr['banner_image']) ? $directoryArr['banner_image'] : false; + $protected = [ + 'public/headers/.gitignore', + 'public/headers/default.jpg', + 'public/headers/missing.png' + ]; + if(!$path || in_array($path, $protected)) { + return; + } + if(Storage::exists($directoryArr['banner_image'])) { + Storage::delete($directoryArr['banner_image']); + } + + $directoryArr['banner_image'] = 'public/headers/default.jpg'; + $directory->v = $directoryArr; + $directory->save(); + $bannerImage->v = url(Storage::url('public/headers/default.jpg')); + $bannerImage->save(); + Cache::forget('api:v1:instance-data-response-v1'); + ConfigCacheService::put('pixelfed.directory', $directory); + return $bannerImage->v; + } + + public function directoryGetPopularPosts(Request $request) + { + $ids = Cache::remember('admin:api:popular_posts', 86400, function() { + return Status::whereLocal(true) + ->whereScope('public') + ->whereType('photo') + ->whereNull(['in_reply_to_id', 'reblog_of_id']) + ->orderByDesc('likes_count') + ->take(50) + ->pluck('id'); + }); + + $res = $ids->map(function($id) { + return StatusService::get($id); + }) + ->filter(function($post) { + return $post && isset($post['account']); + }) + ->values(); + + return response()->json($res, 200, [], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); + } + + public function directoryGetAddPostByIdSearch(Request $request) + { + $this->validate($request, [ + 'q' => 'required|integer' + ]); + + $id = $request->input('q'); + + $status = Status::whereLocal(true) + ->whereType('photo') + ->whereNull(['in_reply_to_id', 'reblog_of_id']) + ->findOrFail($id); + + $res = StatusService::get($status->id); + + return $res; + } + + public function directoryDeleteTestimonial(Request $request) + { + $this->validate($request, [ + 'profile_id' => 'required', + ]); + $profile_id = $request->input('profile_id'); + $testimonials = ConfigCache::whereK('pixelfed.directory.testimonials')->firstOrFail(); + $existing = collect(json_decode($testimonials->v, true)) + ->filter(function($t) use($profile_id) { + return $t['profile_id'] !== $profile_id; + }) + ->values(); + ConfigCacheService::put('pixelfed.directory.testimonials', $existing); + return $existing; + } + + public function directorySaveTestimonial(Request $request) + { + $this->validate($request, [ + 'username' => 'required', + 'body' => 'required|string|min:5|max:500' + ]); + + $user = User::whereUsername($request->input('username'))->whereNull('status')->firstOrFail(); + + $configCache = ConfigCache::firstOrCreate([ + 'k' => 'pixelfed.directory.testimonials' + ]); + + $testimonials = $configCache->v ? collect(json_decode($configCache->v, true)) : collect([]); + + abort_if($testimonials->contains('profile_id', $user->profile_id), 422, 'Testimonial already exists'); + abort_if($testimonials->count() == 10, 422, 'You can only have 10 active testimonials'); + + $testimonials->push([ + 'profile_id' => (string) $user->profile_id, + 'username' => $request->input('username'), + 'body' => $request->input('body') + ]); + + $configCache->v = json_encode($testimonials->toArray()); + $configCache->save(); + ConfigCacheService::put('pixelfed.directory.testimonials', $configCache->v); + $res = [ + 'profile' => AccountService::get($user->profile_id), + 'body' => $request->input('body') + ]; + return $res; + } + + public function directoryUpdateTestimonial(Request $request) + { + $this->validate($request, [ + 'profile_id' => 'required', + 'body' => 'required|string|min:5|max:500' + ]); + + $profile_id = $request->input('profile_id'); + $body = $request->input('body'); + $user = User::whereProfileId($profile_id)->firstOrFail(); + + $configCache = ConfigCache::firstOrCreate([ + 'k' => 'pixelfed.directory.testimonials' + ]); + + $testimonials = $configCache->v ? collect(json_decode($configCache->v, true)) : collect([]); + + $updated = $testimonials->map(function($t) use($profile_id, $body) { + if($t['profile_id'] == $profile_id) { + $t['body'] = $body; + } + return $t; + }) + ->values(); + + $configCache->v = json_encode($updated); + $configCache->save(); + ConfigCacheService::put('pixelfed.directory.testimonials', $configCache->v); + + return $updated; + } +} diff --git a/app/Http/Controllers/Admin/AdminReportController.php b/app/Http/Controllers/Admin/AdminReportController.php index 575342d66..59ae9dfe9 100644 --- a/app/Http/Controllers/Admin/AdminReportController.php +++ b/app/Http/Controllers/Admin/AdminReportController.php @@ -290,7 +290,7 @@ trait AdminReportController ->save(); Cache::forget('profiles:private'); - DeleteAccountPipeline::dispatch($user)->onQueue('high'); + DeleteAccountPipeline::dispatch($user); return; } diff --git a/app/Http/Controllers/Admin/AdminUserController.php b/app/Http/Controllers/Admin/AdminUserController.php index 4695d6991..766299097 100644 --- a/app/Http/Controllers/Admin/AdminUserController.php +++ b/app/Http/Controllers/Admin/AdminUserController.php @@ -222,7 +222,7 @@ trait AdminUserController ->save(); Cache::forget('profiles:private'); - DeleteAccountPipeline::dispatch($user)->onQueue('high'); + DeleteAccountPipeline::dispatch($user); $msg = "Successfully deleted {$user->username}!"; $request->session()->flash('status', $msg); @@ -294,4 +294,4 @@ trait AdminUserController $request->session()->flash('status', $msg); return redirect('/i/admin/users/modlogs/' . $user->id); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 37e3a7c0d..8a6f019ef 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -20,6 +20,7 @@ use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redis; use App\Http\Controllers\Admin\{ + AdminDirectoryController, AdminDiscoverController, AdminInstanceController, AdminReportController, @@ -40,6 +41,7 @@ use App\Models\CustomEmoji; class AdminController extends Controller { use AdminReportController, + AdminDirectoryController, AdminDiscoverController, // AdminGroupsController, AdminMediaController, diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 8eb1f43e4..d2c8b2028 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -8,7 +8,7 @@ use Illuminate\Support\Str; use App\Util\ActivityPub\Helpers; use App\Util\Media\Filter; use Laravel\Passport\Passport; -use Auth, Cache, DB, URL; +use Auth, Cache, DB, Storage, URL; use App\{ Avatar, Bookmark, @@ -692,10 +692,10 @@ class ApiV1Controller extends Controller (new FollowerController())->sendFollow($user->profile, $target); } } else { - $follower = new Follower(); - $follower->profile_id = $user->profile_id; - $follower->following_id = $target->id; - $follower->save(); + $follower = Follower::firstOrCreate([ + 'profile_id' => $user->profile_id, + 'following_id' => $target->id + ]); if($remote == true && config('federation.activitypub.remoteFollow') == true) { (new FollowerController())->sendFollow($user->profile, $target); @@ -1375,7 +1375,7 @@ class ApiV1Controller extends Controller 'streaming_api' => 'wss://' . config('pixelfed.domain.app') ], 'stats' => $stats, - 'thumbnail' => url('img/pixelfed-icon-color.png'), + 'thumbnail' => config_cache('app.banner_image') ?? url(Storage::url('public/headers/default.jpg')), 'languages' => [config('app.locale')], 'registrations' => (bool) config_cache('pixelfed.open_registration'), 'approval_required' => false, @@ -2449,12 +2449,12 @@ class ApiV1Controller extends Controller ->limit($limit) ->get() ->map(function($like) { - $account = AccountService::getMastodon($like->profile_id); + $account = AccountService::getMastodon($like->profile_id, true); $account['follows'] = isset($like->created_at); return $account; }) ->filter(function($account) use($user) { - return $account && isset($account['id']) && $account['id'] != $user->profile_id; + return $account && isset($account['id']); }) ->values(); @@ -3023,7 +3023,7 @@ class ApiV1Controller extends Controller } if($sortBy == 'all' && !$request->has('cursor')) { - $ids = Cache::remember('status:replies:all:' . $id, 86400, function() use($id) { + $ids = Cache::remember('status:replies:all:' . $id, 3600, function() use($id) { return DB::table('statuses') ->where('in_reply_to_id', $id) ->orderBy('id') @@ -3058,8 +3058,15 @@ class ApiV1Controller extends Controller $status['favourited'] = LikeService::liked($pid, $post->id); return $status; }) + ->map(function($post) { + if(isset($post['account']) && isset($post['account']['id'])) { + $account = AccountService::get($post['account']['id'], true); + $post['account'] = $account; + } + return $post; + }) ->filter(function($post) { - return $post && isset($post['id']) && isset($post['account']); + return $post && isset($post['id']) && isset($post['account']) && isset($post['account']['id']); }) ->values(); @@ -3109,7 +3116,7 @@ class ApiV1Controller extends Controller }); $ids = $ids->map(function($profile) { - return AccountService::getMastodon($profile->id, true); + return AccountService::get($profile->id, true); }) ->filter(function($profile) use($pid) { return $profile && isset($profile['id']); diff --git a/app/Http/Controllers/Api/BaseApiController.php b/app/Http/Controllers/Api/BaseApiController.php index ce78c74e6..9dd84aa0b 100644 --- a/app/Http/Controllers/Api/BaseApiController.php +++ b/app/Http/Controllers/Api/BaseApiController.php @@ -90,7 +90,7 @@ class BaseApiController extends Controller if(empty($res) && !Cache::has('pf:services:notifications:hasSynced:'.$pid)) { Cache::put('pf:services:notifications:hasSynced:'.$pid, 1, 1209600); - NotificationService::warmCache($pid, 400, true); + NotificationService::warmCache($pid, 100, true); } return response()->json($res); diff --git a/app/Http/Controllers/FederationController.php b/app/Http/Controllers/FederationController.php index 0a8254cbc..87a393545 100644 --- a/app/Http/Controllers/FederationController.php +++ b/app/Http/Controllers/FederationController.php @@ -96,17 +96,18 @@ class FederationController extends Controller abort_if(!config_cache('federation.activitypub.enabled'), 404); abort_if(!config('federation.activitypub.outbox'), 404); - $profile = Profile::whereNull('domain') - ->whereNull('status') - ->whereIsPrivate(false) - ->whereUsername($username) - ->firstOrFail(); + // $profile = Profile::whereNull('domain') + // ->whereNull('status') + // ->whereIsPrivate(false) + // ->whereUsername($username) + // ->firstOrFail(); - $key = 'ap:outbox:latest_10:pid:' . $profile->id; - $ttl = now()->addMinutes(15); - $res = Cache::remember($key, $ttl, function() use($profile) { - return Outbox::get($profile); - }); + // $key = 'ap:outbox:latest_10:pid:' . $profile->id; + // $ttl = now()->addMinutes(15); + // $res = Cache::remember($key, $ttl, function() use($profile) { + // return Outbox::get($profile); + // }); + $res = []; return response(json_encode($res, JSON_UNESCAPED_SLASHES))->header('Content-Type', 'application/activity+json'); } @@ -124,6 +125,7 @@ class FederationController extends Controller if(!isset($obj['id'])) { return; } + usleep(5000); $lockKey = 'pf:ap:del-lock:' . hash('sha256', $obj['id']); if( isset($obj['actor']) && isset($obj['object']) && @@ -140,6 +142,15 @@ class FederationController extends Controller Cache::put($lockKey, 1, 3600); dispatch(new DeleteWorker($headers, $payload))->onQueue('delete'); } else { + if(!isset($obj['id'])) { + return; + } + usleep(5000); + $lockKey = 'pf:ap:user-inbox:activity:' . hash('sha256', $obj['id']); + if(Cache::get($lockKey) !== null) { + return; + } + Cache::put($lockKey, 1, 3600); dispatch(new InboxValidator($username, $headers, $payload))->onQueue('high'); } return; diff --git a/app/Http/Controllers/PixelfedDirectoryController.php b/app/Http/Controllers/PixelfedDirectoryController.php new file mode 100644 index 000000000..6290cd398 --- /dev/null +++ b/app/Http/Controllers/PixelfedDirectoryController.php @@ -0,0 +1,167 @@ +filled('sk')) { + abort(404); + } + + if(!config_cache('pixelfed.directory.submission-key')) { + abort(404); + } + + if(!hash_equals(config_cache('pixelfed.directory.submission-key'), $request->input('sk'))) { + abort(403); + } + + $res = $this->buildListing(); + return response()->json($res, 200, [], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); + } + + public function buildListing() + { + $res = config_cache('pixelfed.directory'); + if($res) { + $res = is_string($res) ? json_decode($res, true) : $res; + } + + $res['_domain'] = config_cache('pixelfed.domain.app'); + $res['_sk'] = config_cache('pixelfed.directory.submission-key'); + $res['_ts'] = config_cache('pixelfed.directory.submission-ts'); + $res['version'] = config_cache('pixelfed.version'); + + if(empty($res['summary'])) { + $summary = ConfigCache::whereK('app.short_description')->pluck('v'); + $res['summary'] = $summary ? $summary[0] : null; + } + + if(isset($res['admin'])) { + $res['admin'] = AccountService::get($res['admin'], true); + } + + if(isset($res['banner_image']) && !empty($res['banner_image'])) { + $res['banner_image'] = url(Storage::url($res['banner_image'])); + } + + if(isset($res['favourite_posts'])) { + $res['favourite_posts'] = collect($res['favourite_posts'])->map(function($id) { + return StatusService::get($id); + }) + ->filter(function($post) { + return $post && isset($post['account']); + }) + ->map(function($post) { + return [ + 'avatar' => $post['account']['avatar'], + 'display_name' => $post['account']['display_name'], + 'username' => $post['account']['username'], + 'media' => $post['media_attachments'][0]['url'], + 'url' => $post['url'] + ]; + }) + ->values(); + } + + $guidelines = ConfigCache::whereK('app.rules')->first(); + if($guidelines) { + $res['community_guidelines'] = json_decode($guidelines->v, true); + } + + $openRegistration = ConfigCache::whereK('pixelfed.open_registration')->first(); + if($openRegistration) { + $res['open_registration'] = (bool) $openRegistration; + } + + $oauthEnabled = ConfigCache::whereK('pixelfed.oauth_enabled')->first(); + if($oauthEnabled) { + $keys = file_exists(storage_path('oauth-public.key')) && file_exists(storage_path('oauth-private.key')); + $res['oauth_enabled'] = (bool) $oauthEnabled && $keys; + } + + $activityPubEnabled = ConfigCache::whereK('federation.activitypub.enabled')->first(); + if($activityPubEnabled) { + $res['activitypub_enabled'] = (bool) $activityPubEnabled; + } + + $res['feature_config'] = [ + 'media_types' => Str::of(config_cache('pixelfed.media_types'))->explode(','), + 'image_quality' => config_cache('pixelfed.image_quality'), + 'optimize_image' => config_cache('pixelfed.optimize_image'), + 'max_photo_size' => config_cache('pixelfed.max_photo_size'), + 'max_caption_length' => config_cache('pixelfed.max_caption_length'), + 'max_altext_length' => config_cache('pixelfed.max_altext_length'), + 'enforce_account_limit' => config_cache('pixelfed.enforce_account_limit'), + 'max_account_size' => config_cache('pixelfed.max_account_size'), + 'max_album_length' => config_cache('pixelfed.max_album_length'), + 'account_deletion' => config_cache('pixelfed.account_deletion'), + ]; + + $res['is_eligible'] = $this->validVal($res, 'admin') && + $this->validVal($res, 'summary', null, 10) && + $this->validVal($res, 'favourite_posts', 3) && + $this->validVal($res, 'contact_email') && + $this->validVal($res, 'privacy_pledge') && + $this->validVal($res, 'location'); + + if(config_cache('pixelfed.directory.testimonials')) { + $res['testimonials'] = collect(json_decode(config_cache('pixelfed.directory.testimonials'), true)) + ->map(function($testimonial) { + $profile = AccountService::get($testimonial['profile_id']); + return [ + 'profile' => [ + 'username' => $profile['username'], + 'display_name' => $profile['display_name'], + 'avatar' => $profile['avatar'], + 'created_at' => $profile['created_at'] + ], + 'body' => $testimonial['body'] + ]; + }); + } + + $res['features_enabled'] = [ + 'stories' => (bool) config_cache('instance.stories.enabled') + ]; + + $res['stats'] = [ + 'user_count' => \App\User::count(), + 'post_count' => \App\Status::whereNull('uri')->count(), + ]; + + $res['primary_locale'] = config('app.locale'); + $hash = hash('sha256', json_encode($res)); + $res['_hash'] = $hash; + ksort($res); + + return $res; + } + + protected function validVal($res, $val, $count = false, $minLen = false) + { + if(!isset($res[$val])) { + return false; + } + + if($count) { + return count($res[$val]) >= $count; + } + + if($minLen) { + return strlen($res[$val]) >= $minLen; + } + + return $res[$val]; + } + +} diff --git a/app/Http/Controllers/PortfolioController.php b/app/Http/Controllers/PortfolioController.php new file mode 100644 index 000000000..5890f2d0e --- /dev/null +++ b/app/Http/Controllers/PortfolioController.php @@ -0,0 +1,318 @@ +first(); + + if(!$user) { + return view('portfolio.404'); + } + + $portfolio = Portfolio::whereUserId($user->id)->firstOrFail(); + $user = AccountService::get($user->profile_id); + + if($user['locked']) { + return view('portfolio.404'); + } + + if($portfolio->active != true) { + if(!$request->user()) { + return view('portfolio.404'); + } + + if($request->user()->profile_id == $user['id']) { + return redirect(config('portfolio.path') . '/settings'); + } + + return view('portfolio.404'); + } + + return view('portfolio.show', compact('user', 'portfolio')); + } + + public function showPost(Request $request, $username, $id) + { + $authed = $request->user(); + $post = StatusService::get($id); + + if(!$post) { + return view('portfolio.404'); + } + + $user = AccountService::get($post['account']['id']); + $portfolio = Portfolio::whereProfileId($user['id'])->first(); + + if($user['locked'] || $portfolio->active != true) { + return view('portfolio.404'); + } + + if(!$post || $post['visibility'] != 'public' || $post['pf_type'] != 'photo' || $user['id'] != $post['account']['id']) { + return view('portfolio.404'); + } + + return view('portfolio.show_post', compact('user', 'post', 'authed')); + } + + public function myRedirect(Request $request) + { + abort_if(!$request->user(), 404); + + $user = $request->user(); + + if(Portfolio::whereProfileId($user->profile_id)->exists() === false) { + $portfolio = new Portfolio; + $portfolio->profile_id = $user->profile_id; + $portfolio->user_id = $user->id; + $portfolio->active = false; + $portfolio->save(); + } + + $domain = config('portfolio.domain'); + $path = config('portfolio.path'); + $url = 'https://' . $domain . $path; + + return redirect($url); + } + + public function settings(Request $request) + { + if(!$request->user()) { + return redirect(route('home')); + } + + $portfolio = Portfolio::whereUserId($request->user()->id)->first(); + + if(!$portfolio) { + $portfolio = new Portfolio; + $portfolio->user_id = $request->user()->id; + $portfolio->profile_id = $request->user()->profile_id; + $portfolio->save(); + } + + return view('portfolio.settings', compact('portfolio')); + } + + public function store(Request $request) + { + abort_unless($request->user(), 404); + + $this->validate($request, [ + 'profile_source' => 'required|in:recent,custom', + 'layout' => 'required|in:grid,masonry', + 'layout_container' => 'required|in:fixed,fluid' + ]); + + $portfolio = Portfolio::whereUserId($request->user()->id)->first(); + + if(!$portfolio) { + $portfolio = new Portfolio; + $portfolio->user_id = $request->user()->id; + $portfolio->profile_id = $request->user()->profile_id; + $portfolio->save(); + } + + $portfolio->active = $request->input('enabled') === 'on'; + $portfolio->show_captions = $request->input('show_captions') === 'on'; + $portfolio->show_license = $request->input('show_license') === 'on'; + $portfolio->show_location = $request->input('show_location') === 'on'; + $portfolio->show_timestamp = $request->input('show_timestamp') === 'on'; + $portfolio->show_link = $request->input('show_link') === 'on'; + $portfolio->profile_source = $request->input('profile_source'); + $portfolio->show_avatar = $request->input('show_avatar') === 'on'; + $portfolio->show_bio = $request->input('show_bio') === 'on'; + $portfolio->profile_layout = $request->input('layout'); + $portfolio->profile_container = $request->input('layout_container'); + $portfolio->save(); + + return redirect('/' . $request->user()->username); + } + + public function getFeed(Request $request, $id) + { + $user = AccountService::get($id, true); + + if(!$user || !isset($user['id'])) { + return response()->json([], 404); + } + + $portfolio = Portfolio::whereProfileId($user['id'])->first(); + + if(!$portfolio || !$portfolio->active) { + return response()->json([], 404); + } + + if($portfolio->profile_source === 'custom' && $portfolio->metadata) { + return $this->getCustomFeed($portfolio); + } + + return $this->getRecentFeed($user['id']); + } + + protected function getCustomFeed($portfolio) { + if(!$portfolio->metadata['posts']) { + return response()->json([], 400); + } + + return collect($portfolio->metadata['posts'])->map(function($p) { + return StatusService::get($p); + }) + ->filter(function($p) { + return $p && isset($p['account']); + })->values(); + } + + protected function getRecentFeed($id) { + $media = Cache::remember('portfolio:recent-feed:' . $id, 3600, function() use($id) { + return DB::table('media') + ->whereProfileId($id) + ->whereNotNull('status_id') + ->groupBy('status_id') + ->orderByDesc('id') + ->take(50) + ->pluck('status_id'); + }); + + return $media->map(function($sid) use($id) { + return StatusService::get($sid); + }) + ->filter(function($post) { + return $post && + isset($post['media_attachments']) && + !empty($post['media_attachments']) && + $post['pf_type'] === 'photo' && + $post['visibility'] === 'public'; + }) + ->take(24) + ->values(); + } + + public function getSettings(Request $request) + { + abort_if(!$request->user(), 403); + + $res = Portfolio::whereUserId($request->user()->id)->get(); + + if(!$res) { + return []; + } + + return $res->map(function($p) { + return [ + 'url' => $p->url(), + 'pid' => (string) $p->profile_id, + 'active' => (bool) $p->active, + 'show_captions' => (bool) $p->show_captions, + 'show_license' => (bool) $p->show_license, + 'show_location' => (bool) $p->show_location, + 'show_timestamp' => (bool) $p->show_timestamp, + 'show_link' => (bool) $p->show_link, + 'show_avatar' => (bool) $p->show_avatar, + 'show_bio' => (bool) $p->show_bio, + 'profile_layout' => $p->profile_layout, + 'profile_source' => $p->profile_source, + 'metadata' => $p->metadata + ]; + })->first(); + } + + public function getAccountSettings(Request $request) + { + $this->validate($request, [ + 'id' => 'required|integer' + ]); + + $account = AccountService::get($request->input('id')); + + abort_if(!$account, 404); + + $p = Portfolio::whereProfileId($request->input('id'))->whereActive(1)->firstOrFail(); + + if(!$p) { + return []; + } + + return [ + 'url' => $p->url(), + 'show_captions' => (bool) $p->show_captions, + 'show_license' => (bool) $p->show_license, + 'show_location' => (bool) $p->show_location, + 'show_timestamp' => (bool) $p->show_timestamp, + 'show_link' => (bool) $p->show_link, + 'show_avatar' => (bool) $p->show_avatar, + 'show_bio' => (bool) $p->show_bio, + 'profile_layout' => $p->profile_layout, + 'profile_source' => $p->profile_source + ]; + } + + public function storeSettings(Request $request) + { + abort_if(!$request->user(), 403); + + $this->validate($request, [ + 'profile_layout' => 'sometimes|in:grid,masonry,album' + ]); + + $res = Portfolio::whereUserId($request->user()->id) + ->update($request->only([ + 'active', + 'show_captions', + 'show_license', + 'show_location', + 'show_timestamp', + 'show_link', + 'show_avatar', + 'show_bio', + 'profile_layout', + 'profile_source' + ])); + + Cache::forget('portfolio:recent-feed:' . $request->user()->profile_id); + + return 200; + } + + public function storeCurated(Request $request) + { + abort_if(!$request->user(), 403); + + $this->validate($request, [ + 'ids' => 'required|array|max:24' + ]); + + $pid = $request->user()->profile_id; + + $ids = $request->input('ids'); + + Status::whereProfileId($pid) + ->whereScope('public') + ->whereIn('type', ['photo', 'photo:album']) + ->findOrFail($ids); + + $p = Portfolio::whereProfileId($pid)->firstOrFail(); + $p->metadata = ['posts' => $ids]; + $p->save(); + + Cache::forget('portfolio:recent-feed:' . $pid); + + return $request->ids; + } +} diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 30957cf28..3f6795d5b 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -187,10 +187,12 @@ class ProfileController extends Controller abort_if(!config_cache('federation.activitypub.enabled'), 404); abort_if($user->domain, 404); - $fractal = new Fractal\Manager(); - $resource = new Fractal\Resource\Item($user, new ProfileTransformer); - $res = $fractal->createData($resource)->toArray(); - return response(json_encode($res['data']))->header('Content-Type', 'application/activity+json'); + return Cache::remember('pf:activitypub:user-object:by-id:' . $user->id, 3600, function() use($user) { + $fractal = new Fractal\Manager(); + $resource = new Fractal\Resource\Item($user, new ProfileTransformer); + $res = $fractal->createData($resource)->toArray(); + return response(json_encode($res['data']))->header('Content-Type', 'application/activity+json'); + }); } public function showAtomFeed(Request $request, $user) @@ -201,36 +203,47 @@ class ProfileController extends Controller abort_if(!$pid, 404); - $profile = AccountService::get($pid); + $profile = AccountService::get($pid, true); abort_if(!$profile || $profile['locked'] || !$profile['local'], 404); - $items = DB::table('statuses') - ->whereProfileId($pid) - ->whereVisibility('public') - ->whereType('photo') - ->orderByDesc('id') - ->take(10) - ->get() - ->map(function($status) { - return StatusService::get($status->id); - }) - ->filter(function($status) { - return $status && - isset($status['account']) && - isset($status['media_attachments']) && - count($status['media_attachments']); - }) - ->values(); - $permalink = config('app.url') . "/users/{$profile['username']}.atom"; - $headers = ['Content-Type' => 'application/atom+xml']; + $data = Cache::remember('pf:atom:user-feed:by-id:' . $profile['id'], 86400, function() use($pid, $profile) { + $items = DB::table('statuses') + ->whereProfileId($pid) + ->whereVisibility('public') + ->whereType('photo') + ->orderByDesc('id') + ->take(10) + ->get() + ->map(function($status) { + return StatusService::get($status->id); + }) + ->filter(function($status) { + return $status && + isset($status['account']) && + isset($status['media_attachments']) && + count($status['media_attachments']); + }) + ->values(); + $permalink = config('app.url') . "/users/{$profile['username']}.atom"; + $headers = ['Content-Type' => 'application/atom+xml']; - if($items && $items->count()) { - $headers['Last-Modified'] = now()->parse($items->first()['created_at'])->toRfc7231String(); - } + if($items && $items->count()) { + $headers['Last-Modified'] = now()->parse($items->first()['created_at'])->toRfc7231String(); + } + + return compact('items', 'permalink', 'headers'); + }); + abort_if(!$data, 404); return response() - ->view('atom.user', compact('profile', 'items', 'permalink')) - ->withHeaders($headers); + ->view('atom.user', + [ + 'profile' => $profile, + 'items' => $data['items'], + 'permalink' => $data['permalink'] + ] + ) + ->withHeaders($data['headers']); } public function meRedirect() diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index 2eb7a9b49..2d4a71bdd 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -364,7 +364,6 @@ class PublicApiController extends Controller ) ->whereNull(['in_reply_to_id', 'reblog_of_id']) ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) - ->with('profile', 'hashtags', 'mentions') ->whereLocal(true) ->whereScope('public') ->orderBy('id', 'desc') @@ -517,7 +516,6 @@ class PublicApiController extends Controller ->when($textOnlyReplies != true, function($q, $textOnlyReplies) { return $q->whereNull('in_reply_to_id'); }) - ->with('profile', 'hashtags', 'mentions') ->where('id', $dir, $id) ->whereIn('profile_id', $following) ->whereIn('visibility',['public', 'unlisted', 'private']) @@ -564,7 +562,6 @@ class PublicApiController extends Controller ->when(!$textOnlyReplies, function($q, $textOnlyReplies) { return $q->whereNull('in_reply_to_id'); }) - ->with('profile', 'hashtags', 'mentions') ->whereIn('profile_id', $following) ->whereIn('visibility',['public', 'unlisted', 'private']) ->orderBy('created_at', 'desc') diff --git a/app/Http/Controllers/Settings/HomeSettings.php b/app/Http/Controllers/Settings/HomeSettings.php index 23d434d30..e8d3d195e 100644 --- a/app/Http/Controllers/Settings/HomeSettings.php +++ b/app/Http/Controllers/Settings/HomeSettings.php @@ -159,7 +159,7 @@ trait HomeSettings public function emailUpdate(Request $request) { $this->validate($request, [ - 'email' => 'required|email', + 'email' => 'required|email|unique:users,email', ]); $changes = false; $email = $request->input('email'); diff --git a/app/Http/Controllers/StatusController.php b/app/Http/Controllers/StatusController.php index 7bfac3aa6..117124bb9 100644 --- a/app/Http/Controllers/StatusController.php +++ b/app/Http/Controllers/StatusController.php @@ -29,7 +29,7 @@ use App\Services\ReblogService; class StatusController extends Controller { - public function show(Request $request, $username, int $id) + public function show(Request $request, $username, $id) { // redirect authed users to Metro 2.0 if($request->user()) { @@ -225,7 +225,7 @@ class StatusController extends Controller StatusService::del($status->id, true); if ($status->profile_id == $user->profile->id || $user->is_admin == true) { Cache::forget('profile:status_count:'.$status->profile_id); - StatusDelete::dispatch($status); + StatusDelete::dispatchNow($status); } if($request->wantsJson()) { diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php index 5517da4b7..b672ca8cd 100644 --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -2,7 +2,7 @@ namespace App\Http\Middleware; -use Fideloper\Proxy\TrustProxies as Middleware; +use Illuminate\Http\Middleware\TrustProxies as Middleware; use Illuminate\Http\Request; class TrustProxies extends Middleware diff --git a/app/Jobs/DeletePipeline/DeleteRemoteStatusPipeline.php b/app/Jobs/DeletePipeline/DeleteRemoteStatusPipeline.php new file mode 100644 index 000000000..e2cfe398e --- /dev/null +++ b/app/Jobs/DeletePipeline/DeleteRemoteStatusPipeline.php @@ -0,0 +1,74 @@ +status = $status->withoutRelations(); + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $status = $this->status; + + NetworkTimelineService::del($status->id); + StatusService::del($status->id, true); + DecrementPostCount::dispatchNow($status->profile_id); + Bookmark::whereStatusId($status->id)->delete(); + Notification::whereItemType('App\Status') + ->whereItemId($status->id) + ->forceDelete(); + DirectMessage::whereStatusId($status->id)->delete(); + Like::whereStatusId($status->id)->forceDelete(); + MediaTag::whereStatusId($status->id)->delete(); + Media::whereStatusId($status->id) + ->get() + ->each(function($media) { + MediaDeletePipeline::dispatchNow($media); + }); + Mention::whereStatusId($status->id)->forceDelete(); + Report::whereObjectType('App\Status')->whereObjectId($status->id)->delete(); + StatusHashtag::whereStatusId($status->id)->delete(); + StatusView::whereStatusId($status->id)->delete(); + Status::whereReblogOfId($status->id)->forceDelete(); + $status->delete(); + } +} diff --git a/app/Jobs/InboxPipeline/DeleteWorker.php b/app/Jobs/InboxPipeline/DeleteWorker.php index 25dbde6dd..dead58163 100644 --- a/app/Jobs/InboxPipeline/DeleteWorker.php +++ b/app/Jobs/InboxPipeline/DeleteWorker.php @@ -200,7 +200,7 @@ class DeleteWorker implements ShouldQueue if(Helpers::validateUrl($actor->remote_url) == false) { return; } - $res = Zttp::timeout(5)->withHeaders([ + $res = Zttp::timeout(60)->withHeaders([ 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', 'User-Agent' => 'PixelfedBot v0.1 - https://pixelfed.org', ])->get($actor->remote_url); diff --git a/app/Jobs/InboxPipeline/InboxValidator.php b/app/Jobs/InboxPipeline/InboxValidator.php index 070746cd4..22a023304 100644 --- a/app/Jobs/InboxPipeline/InboxValidator.php +++ b/app/Jobs/InboxPipeline/InboxValidator.php @@ -70,58 +70,6 @@ class InboxValidator implements ShouldQueue return; } - if( $payload['type'] === 'Delete' && - ( ( is_string($payload['object']) && - $payload['object'] === $payload['actor'] ) || - ( is_array($payload['object']) && - isset($payload['object']['id'], $payload['object']['type']) && - $payload['object']['type'] === 'Person' && - $payload['actor'] === $payload['object']['id'] - )) - ) { - $actor = $payload['actor']; - $hash = strlen($actor) <= 48 ? - 'b:' . base64_encode($actor) : - 'h:' . hash('sha256', $actor); - - $lockKey = 'ap:inbox:actor-delete-exists:lock:' . $hash; - Cache::lock($lockKey, 10)->block(5, function () use( - $headers, - $payload, - $actor, - $hash, - $profile - ) { - $key = 'ap:inbox:actor-delete-exists:' . $hash; - $actorDelete = Cache::remember($key, now()->addMinutes(15), function() use($actor) { - return Profile::whereRemoteUrl($actor) - ->whereNotNull('domain') - ->exists(); - }); - if($actorDelete) { - if($this->verifySignature($headers, $profile, $payload) == true) { - Cache::set($key, false); - $profile = Profile::whereNotNull('domain') - ->whereNull('status') - ->whereRemoteUrl($actor) - ->first(); - if($profile) { - DeleteRemoteProfilePipeline::dispatchNow($profile); - } - return; - } else { - // Signature verification failed, exit. - return; - } - } else { - // Remote user doesn't exist, exit early. - return; - } - }); - - return; - } - if($profile->status != null) { return; } @@ -228,7 +176,7 @@ class InboxValidator implements ShouldQueue if(Helpers::validateUrl($actor->remote_url) == false) { return; } - $res = Zttp::timeout(5)->withHeaders([ + $res = Zttp::timeout(60)->withHeaders([ 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', 'User-Agent' => 'PixelfedBot v0.1 - https://pixelfed.org', ])->get($actor->remote_url); diff --git a/app/Jobs/InboxPipeline/InboxWorker.php b/app/Jobs/InboxPipeline/InboxWorker.php index 16ac4840a..23371c3ce 100644 --- a/app/Jobs/InboxPipeline/InboxWorker.php +++ b/app/Jobs/InboxPipeline/InboxWorker.php @@ -66,57 +66,6 @@ class InboxWorker implements ShouldQueue return; } - if( $payload['type'] === 'Delete' && - ( ( is_string($payload['object']) && - $payload['object'] === $payload['actor'] ) || - ( is_array($payload['object']) && - isset($payload['object']['id'], $payload['object']['type']) && - $payload['object']['type'] === 'Person' && - $payload['actor'] === $payload['object']['id'] - )) - ) { - $actor = $payload['actor']; - $hash = strlen($actor) <= 48 ? - 'b:' . base64_encode($actor) : - 'h:' . hash('sha256', $actor); - - $lockKey = 'ap:inbox:actor-delete-exists:lock:' . $hash; - Cache::lock($lockKey, 10)->block(5, function () use( - $headers, - $payload, - $actor, - $hash - ) { - $key = 'ap:inbox:actor-delete-exists:' . $hash; - $actorDelete = Cache::remember($key, now()->addMinutes(15), function() use($actor) { - return Profile::whereRemoteUrl($actor) - ->whereNotNull('domain') - ->exists(); - }); - if($actorDelete) { - if($this->verifySignature($headers, $payload) == true) { - Cache::set($key, false); - $profile = Profile::whereNotNull('domain') - ->whereNull('status') - ->whereRemoteUrl($actor) - ->first(); - if($profile) { - DeleteRemoteProfilePipeline::dispatchNow($profile); - } - return; - } else { - // Signature verification failed, exit. - return; - } - } else { - // Remote user doesn't exist, exit early. - return; - } - }); - - return; - } - if($this->verifySignature($headers, $payload) == true) { (new Inbox($headers, $profile, $payload))->handle(); return; @@ -217,7 +166,7 @@ class InboxWorker implements ShouldQueue if(Helpers::validateUrl($actor->remote_url) == false) { return; } - $res = Zttp::timeout(5)->withHeaders([ + $res = Zttp::timeout(60)->withHeaders([ 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', 'User-Agent' => 'PixelfedBot v0.1 - https://pixelfed.org', ])->get($actor->remote_url); diff --git a/app/Jobs/MediaPipeline/MediaDeletePipeline.php b/app/Jobs/MediaPipeline/MediaDeletePipeline.php index df91c8316..2b7a5f733 100644 --- a/app/Jobs/MediaPipeline/MediaDeletePipeline.php +++ b/app/Jobs/MediaPipeline/MediaDeletePipeline.php @@ -38,8 +38,14 @@ class MediaDeletePipeline implements ShouldQueue if(config_cache('pixelfed.cloud_storage') == true) { $disk = Storage::disk(config('filesystems.cloud')); - $disk->delete($path); - $disk->delete($thumb); + + if($path) { + $disk->delete($path); + } + + if($thumb) { + $disk->delete($thumb); + } if(count($e) > 4 && count($disk->files($i)) == 0) { $disk->deleteDirectory($i); @@ -47,10 +53,10 @@ class MediaDeletePipeline implements ShouldQueue } $disk = Storage::disk(config('filesystems.local')); - if($disk->exists($path)) { + if($path && $disk->exists($path)) { $disk->delete($path); } - if($disk->exists($thumb)) { + if($thumb && $disk->exists($thumb)) { $disk->delete($thumb); } if(count($e) > 4 && count($disk->files($i)) == 0) { diff --git a/app/Jobs/StatusPipeline/StatusDelete.php b/app/Jobs/StatusPipeline/StatusDelete.php index 64f5a1cba..4f395a520 100644 --- a/app/Jobs/StatusPipeline/StatusDelete.php +++ b/app/Jobs/StatusPipeline/StatusDelete.php @@ -5,12 +5,19 @@ namespace App\Jobs\StatusPipeline; use DB, Storage; use App\{ AccountInterstitial, + Bookmark, CollectionItem, + DirectMessage, + Like, + Media, MediaTag, + Mention, Notification, Report, Status, + StatusArchived, StatusHashtag, + StatusView }; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -28,7 +35,7 @@ use GuzzleHttp\Promise; use App\Util\ActivityPub\HttpSignature; use App\Services\CollectionService; use App\Services\StatusService; -use App\Services\MediaStorageService; +use App\Jobs\MediaPipeline\MediaDeletePipeline; class StatusDelete implements ShouldQueue { @@ -71,75 +78,65 @@ class StatusDelete implements ShouldQueue } if(config_cache('federation.activitypub.enabled') == true) { - $this->fanoutDelete($status); + return $this->fanoutDelete($status); } else { - $this->unlinkRemoveMedia($status); + return $this->unlinkRemoveMedia($status); } - } public function unlinkRemoveMedia($status) { - foreach ($status->media as $media) { - MediaStorageService::delete($media, true); - } - - if($status->in_reply_to_id) { - DB::transaction(function() use($status) { - $parent = Status::findOrFail($status->in_reply_to_id); - --$parent->reply_count; - $parent->save(); - }); - } - - DB::transaction(function() use($status) { - CollectionItem::whereObjectType('App\Status') - ->whereObjectId($status->id) - ->get() - ->each(function($col) { - $id = $col->collection_id; - $sid = $col->object_id; - $col->delete(); - CollectionService::removeItem($id, $sid); - }); + Media::whereStatusId($status->id) + ->get() + ->each(function($media) { + MediaDeletePipeline::dispatchNow($media); }); - DB::transaction(function() use($status) { - $comments = Status::where('in_reply_to_id', $status->id)->get(); - foreach ($comments as $comment) { - $comment->in_reply_to_id = null; - $comment->save(); - Notification::whereItemType('App\Status') - ->whereItemId($comment->id) - ->delete(); - } - $status->likes()->delete(); - Notification::whereItemType('App\Status') - ->whereItemId($status->id) - ->delete(); - StatusHashtag::whereStatusId($status->id)->delete(); - Report::whereObjectType('App\Status') - ->whereObjectId($status->id) - ->delete(); - MediaTag::where('status_id', $status->id) - ->cursor() - ->each(function($tag) { - Notification::where('item_type', 'App\MediaTag') - ->where('item_id', $tag->id) - ->forceDelete(); - $tag->delete(); - }); - AccountInterstitial::where('item_type', 'App\Status') - ->where('item_id', $status->id) - ->delete(); + if($status->in_reply_to_id) { + $parent = Status::findOrFail($status->in_reply_to_id); + --$parent->reply_count; + $parent->save(); + } - $status->forceDelete(); - }); + Bookmark::whereStatusId($status->id)->delete(); - return true; + CollectionItem::whereObjectType('App\Status') + ->whereObjectId($status->id) + ->get() + ->each(function($col) { + CollectionService::removeItem($col->collection_id, $col->object_id); + $col->delete(); + }); + + DirectMessage::whereStatusId($status->id)->delete(); + Like::whereStatusId($status->id)->delete(); + + MediaTag::where('status_id', $status->id)->delete(); + Mention::whereStatusId($status->id)->forceDelete(); + + Notification::whereItemType('App\Status') + ->whereItemId($status->id) + ->forceDelete(); + + Report::whereObjectType('App\Status') + ->whereObjectId($status->id) + ->delete(); + + StatusArchived::whereStatusId($status->id)->delete(); + StatusHashtag::whereStatusId($status->id)->delete(); + StatusView::whereStatusId($status->id)->delete(); + Status::whereInReplyToId($status->id)->update(['in_reply_to_id' => null]); + + AccountInterstitial::where('item_type', 'App\Status') + ->where('item_id', $status->id) + ->delete(); + + $status->forceDelete(); + + return 1; } - protected function fanoutDelete($status) + public function fanoutDelete($status) { $audience = $status->profile->getAudienceInbox(); $profile = $status->profile; @@ -189,5 +186,6 @@ class StatusDelete implements ShouldQueue $promise->wait(); + return 1; } } diff --git a/app/Models/ConfigCache.php b/app/Models/ConfigCache.php index 4698b1c6b..1b4a18108 100644 --- a/app/Models/ConfigCache.php +++ b/app/Models/ConfigCache.php @@ -10,5 +10,5 @@ class ConfigCache extends Model use HasFactory; protected $table = 'config_cache'; - public $fillable = ['*']; + public $guarded = []; } diff --git a/app/Models/Portfolio.php b/app/Models/Portfolio.php new file mode 100644 index 000000000..758e8db49 --- /dev/null +++ b/app/Models/Portfolio.php @@ -0,0 +1,39 @@ + 'json' + ]; + + public function url() + { + $account = AccountService::get($this->profile_id); + if(!$account) { + return null; + } + + return 'https://' . config('portfolio.domain') . config('portfolio.path') . '/' . $account['username']; + } +} diff --git a/app/Profile.php b/app/Profile.php index 491606031..f02144f09 100644 --- a/app/Profile.php +++ b/app/Profile.php @@ -164,15 +164,16 @@ class Profile extends Model if(substr($avatar->cdn_url, 0, 8) === 'https://') { return $avatar->cdn_url; } else { - return url($avatar->cdn_url); + return url('/storage/avatars/default.jpg'); } } - if($avatar->is_remote) { + $path = $avatar->media_path; + + if(substr($path, 0, 6) !== 'public') { return url('/storage/avatars/default.jpg'); } - - $path = $avatar->media_path; + $path = "{$path}?v={$avatar->change_count}"; return config('app.url') . Storage::url($path); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 2272efa5e..b08012f3e 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -29,6 +29,7 @@ use Illuminate\Support\Facades\Blade; use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; use Illuminate\Pagination\Paginator; +use Illuminate\Support\Facades\Validator; class AppServiceProvider extends ServiceProvider { @@ -54,6 +55,7 @@ class AppServiceProvider extends ServiceProvider Horizon::auth(function ($request) { return Auth::check() && $request->user()->is_admin; }); + Validator::includeUnvalidatedArrayKeys(); } /** diff --git a/app/Services/AccountService.php b/app/Services/AccountService.php index 13cccffab..eb744ff9d 100644 --- a/app/Services/AccountService.php +++ b/app/Services/AccountService.php @@ -19,19 +19,21 @@ class AccountService public static function get($id, $softFail = false) { - return Cache::remember(self::CACHE_KEY . $id, 43200, function() use($id, $softFail) { + $res = Cache::remember(self::CACHE_KEY . $id, 43200, function() use($id) { $fractal = new Fractal\Manager(); $fractal->setSerializer(new ArraySerializer()); $profile = Profile::find($id); - if(!$profile) { - if($softFail) { - return null; - } - abort(404); + if(!$profile || $profile->status === 'delete') { + return null; } $resource = new Fractal\Resource\Item($profile, new AccountTransformer()); return $fractal->createData($resource)->toArray(); - }); + }); + + if(!$res) { + return $softFail ? null : abort(404); + } + return $res; } public static function getMastodon($id, $softFail = false) diff --git a/app/Services/ConfigCacheService.php b/app/Services/ConfigCacheService.php index b334e9e33..0a9055287 100644 --- a/app/Services/ConfigCacheService.php +++ b/app/Services/ConfigCacheService.php @@ -55,6 +55,15 @@ class ConfigCacheService 'config.discover.features', 'instance.has_legal_notice', + + 'pixelfed.directory', + 'app.banner_image', + 'pixelfed.directory.submission-key', + 'pixelfed.directory.submission-ts', + 'pixelfed.directory.has_submitted', + 'pixelfed.directory.latest_response', + 'pixelfed.directory.is_synced', + 'pixelfed.directory.testimonials', // 'system.user_mode' ]; diff --git a/app/Services/MediaStorageService.php b/app/Services/MediaStorageService.php index e252aacf6..1c3272ec1 100644 --- a/app/Services/MediaStorageService.php +++ b/app/Services/MediaStorageService.php @@ -236,16 +236,19 @@ class MediaStorageService { $tmpBase = storage_path('app/remcache/'); $tmpPath = 'avatar_' . $avatar->profile_id . '-' . $path; $tmpName = $tmpBase . $tmpPath; - $data = file_get_contents($url, false, null, 0, $head['length']); + $data = @file_get_contents($url, false, null, 0, $head['length']); + if(!$data) { + return; + } file_put_contents($tmpName, $data); $disk = Storage::disk($driver); $file = $disk->putFileAs($base, new File($tmpName), $path, 'public'); $permalink = $disk->url($file); - $avatar->media_path = $base . $path; + $avatar->media_path = $base . '/' . $path; $avatar->is_remote = true; - $avatar->cdn_url = $permalink; + $avatar->cdn_url = $local ? config('app.url') . $permalink : $permalink; $avatar->size = $head['length']; $avatar->change_count = $avatar->change_count + 1; $avatar->last_fetched_at = now(); diff --git a/app/Transformer/ActivityPub/ProfileTransformer.php b/app/Transformer/ActivityPub/ProfileTransformer.php index 76d398ce1..29f53425c 100644 --- a/app/Transformer/ActivityPub/ProfileTransformer.php +++ b/app/Transformer/ActivityPub/ProfileTransformer.php @@ -23,14 +23,11 @@ class ProfileTransformer extends Fractal\TransformerAbstract 'followers' => $profile->permalink('/followers'), 'inbox' => $profile->permalink('/inbox'), 'outbox' => $profile->permalink('/outbox'), - //'featured' => $profile->permalink('/collections/featured'), 'preferredUsername' => $profile->username, 'name' => $profile->name, 'summary' => $profile->bio, 'url' => $profile->url(), 'manuallyApprovesFollowers' => (bool) $profile->is_private, - // 'follower_count' => $profile->followers()->count(), - // 'following_count' => $profile->following()->count(), 'publicKey' => [ 'id' => $profile->permalink().'#main-key', 'owner' => $profile->permalink(), diff --git a/app/Transformer/Api/NotificationTransformer.php b/app/Transformer/Api/NotificationTransformer.php index df8d0d30c..d4f84bbef 100644 --- a/app/Transformer/Api/NotificationTransformer.php +++ b/app/Transformer/Api/NotificationTransformer.php @@ -32,18 +32,22 @@ class NotificationTransformer extends Fractal\TransformerAbstract if($n->item_id && $n->item_type == 'App\ModLog') { $ml = $n->item; - $res['modlog'] = [ - 'id' => $ml->object_uid, - 'url' => url('/i/admin/users/modlogs/' . $ml->object_uid) - ]; + if($ml && $ml->object_uid) { + $res['modlog'] = [ + 'id' => $ml->object_uid, + 'url' => url('/i/admin/users/modlogs/' . $ml->object_uid) + ]; + } } if($n->item_id && $n->item_type == 'App\MediaTag') { $ml = $n->item; - $res['tagged'] = [ - 'username' => $ml->tagged_username, - 'post_url' => '/p/'.HashidService::encode($ml->status_id) - ]; + if($ml && $ml->tagged_username) { + $res['tagged'] = [ + 'username' => $ml->tagged_username, + 'post_url' => '/p/'.HashidService::encode($ml->status_id) + ]; + } } return $res; diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index 809a55707..1516478d0 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -419,9 +419,8 @@ class Helpers { $cw = true; } - $statusLockKey = 'helpers:status-lock:' . hash('sha256', $res['id']); - $status = Cache::lock($statusLockKey) - ->get(function () use( + if($res['type'] === 'Question') { + $status = self::storePoll( $profile, $res, $url, @@ -430,24 +429,11 @@ class Helpers { $cw, $scope, $id - ) { - - if($res['type'] === 'Question') { - $status = self::storePoll( - $profile, - $res, - $url, - $ts, - $reply_to, - $cw, - $scope, - $id - ); - return $status; - } - - return self::storeStatus($url, $profile, $res); - }); + ); + return $status; + } else { + $status = self::storeStatus($url, $profile, $res); + } return $status; } @@ -756,10 +742,10 @@ class Helpers { [ 'domain' => strtolower($domain), 'username' => Purify::clean($webfinger), - 'webfinger' => Purify::clean($webfinger), - 'key_id' => $res['publicKey']['id'], ], [ + 'webfinger' => Purify::clean($webfinger), + 'key_id' => $res['publicKey']['id'], 'remote_url' => $res['id'], 'name' => isset($res['name']) ? Purify::clean($res['name']) : 'user', 'bio' => isset($res['summary']) ? Purify::clean($res['summary']) : null, diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index 42d9c7a83..a8bfb87fe 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -24,6 +24,7 @@ use Illuminate\Support\Str; use App\Jobs\LikePipeline\LikePipeline; use App\Jobs\FollowPipeline\FollowPipeline; use App\Jobs\DeletePipeline\DeleteRemoteProfilePipeline; +use App\Jobs\DeletePipeline\DeleteRemoteStatusPipeline; use App\Jobs\StoryPipeline\StoryExpire; use App\Jobs\StoryPipeline\StoryFetch; @@ -191,7 +192,7 @@ class Inbox if(!isset($activity['to'])) { return; } - $to = $activity['to']; + $to = isset($activity['to']) ? $activity['to'] : []; $cc = isset($activity['cc']) ? $activity['cc'] : []; if($activity['type'] == 'Question') { @@ -199,7 +200,9 @@ class Inbox return; } - if(count($to) == 1 && + if( is_array($to) && + is_array($cc) && + count($to) == 1 && count($cc) == 0 && parse_url($to[0], PHP_URL_HOST) == config('pixelfed.domain.app') ) { @@ -622,7 +625,7 @@ class Inbox if(!$profile || $profile->private_key != null) { return; } - DeleteRemoteProfilePipeline::dispatchNow($profile); + DeleteRemoteProfilePipeline::dispatch($profile)->onQueue('delete'); return; } else { if(!isset($obj['id'], $this->payload['object'], $this->payload['object']['id'])) { @@ -643,7 +646,7 @@ class Inbox if(!$profile || $profile->private_key != null) { return; } - DeleteRemoteProfilePipeline::dispatchNow($profile); + DeleteRemoteProfilePipeline::dispatch($profile)->onQueue('delete'); return; break; @@ -660,18 +663,7 @@ class Inbox if(!$status) { return; } - NetworkTimelineService::del($status->id); - StatusService::del($status->id, true); - Notification::whereActorId($profile->id) - ->whereItemType('App\Status') - ->whereItemId($status->id) - ->forceDelete(); - $status->directMessage()->delete(); - $status->media()->delete(); - $status->likes()->delete(); - $status->shares()->delete(); - $status->delete(); - DecrementPostCount::dispatch($profile->id)->onQueue('low'); + DeleteRemoteStatusPipeline::dispatch($status)->onQueue('delete'); return; break; @@ -737,6 +729,9 @@ class Inbox $profile = self::actorFirstOrCreate($actor); $obj = $this->payload['object']; + if(!$profile) { + return; + } // TODO: Some implementations do not inline the object, skip for now if(!$obj || !is_array($obj) || !isset($obj['type'])) { return; @@ -796,7 +791,7 @@ class Inbox Like::whereProfileId($profile->id) ->whereStatusId($status->id) ->forceDelete(); - Notification::whereProfileId($status->profile->id) + Notification::whereProfileId($status->profile_id) ->whereActorId($profile->id) ->whereAction('like') ->whereItemId($status->id) diff --git a/composer.json b/composer.json index a4d5bca04..2ed6f796b 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "license": "AGPL-3.0-only", "type": "project", "require": { - "php": "^7.4|^8.0", + "php": "^8.0.2|^8.1", "ext-bcmath": "*", "ext-ctype": "*", "ext-curl": "*", @@ -18,37 +18,36 @@ "brick/math": "^0.9.3", "buzz/laravel-h-captcha": "1.0.3", "doctrine/dbal": "^2.7", - "fideloper/proxy": "^4.0", "fruitcake/laravel-cors": "^2.0", "intervention/image": "^2.4", "jenssegers/agent": "^2.6", - "laravel/framework": "^8.0", + "laravel/framework": "^9.0", "laravel/helpers": "^1.1", "laravel/horizon": "^5.0", "laravel/passport": "^10.0", "laravel/tinker": "^2.0", "laravel/ui": "^2.0|^3.4", - "league/flysystem-aws-s3-v3": "~1.0", - "league/flysystem-cached-adapter": "~1.0", + "league/flysystem-aws-s3-v3": "^3.0", "league/iso3166": "^2.1|^4.0", - "pbmedia/laravel-ffmpeg": "^7.0", + "pbmedia/laravel-ffmpeg": "^8.0", "phpseclib/phpseclib": "~2.0", "pixelfed/fractal": "^0.18.0", "pixelfed/laravel-snowflake": "^2.0", - "pixelfed/zttp": "^0.4", + "pixelfed/zttp": "^0.5", "pragmarx/google2fa": "^8.0", "predis/predis": "^1.1", - "spatie/laravel-backup": "^6.0.0", - "spatie/laravel-image-optimizer": "^1.1", - "stevebauman/purify": "3.0.*", - "symfony/http-kernel": "5.4.8" + "spatie/laravel-backup": "^8.0.0", + "spatie/laravel-image-optimizer": "^1.7", + "stevebauman/purify": "4.0.*", + "symfony/http-client": "^6.1", + "symfony/http-kernel": "^6.0.0", + "symfony/mailgun-mailer": "^6.1" }, "require-dev": { "brianium/paratest": "^6.1", - "facade/ignition": "^2.3.6", "laravel/telescope": "^4.9", "mockery/mockery": "^1.0", - "nunomaduro/collision": "^5.0", + "nunomaduro/collision": "^6.1", "phpunit/phpunit": "^9.0" }, "autoload": { diff --git a/composer.lock b/composer.lock index b6cfb4650..5a21cbd12 100644 --- a/composer.lock +++ b/composer.lock @@ -4,74 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ef3e91a0f0bf7bb70e15847abbdf72f8", + "content-hash": "b14c47abe1d75f3b98a57a6d718d933e", "packages": [ - { - "name": "alchemy/binary-driver", - "version": "v5.2.0", - "source": { - "type": "git", - "url": "https://github.com/alchemy-fr/BinaryDriver.git", - "reference": "e0615cdff315e6b4b05ada67906df6262a020d22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/alchemy-fr/BinaryDriver/zipball/e0615cdff315e6b4b05ada67906df6262a020d22", - "reference": "e0615cdff315e6b4b05ada67906df6262a020d22", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0|^2.0|^1.0", - "php": ">=5.5", - "psr/log": "^1.0", - "symfony/process": "^2.3|^3.0|^4.0|^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Alchemy": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Le Goff", - "email": "legoff.n@gmail.com" - }, - { - "name": "Romain Neutron", - "email": "imprec@gmail.com", - "homepage": "http://www.lickmychip.com/" - }, - { - "name": "Phraseanet Team", - "email": "info@alchemy.fr", - "homepage": "http://www.phraseanet.com/" - }, - { - "name": "Jens Hausdorf", - "email": "mail@jens-hausdorf.de", - "homepage": "https://jens-hausdorf.de", - "role": "Maintainer" - } - ], - "description": "A set of tools to build binary drivers", - "keywords": [ - "binary", - "driver" - ], - "support": { - "issues": "https://github.com/alchemy-fr/BinaryDriver/issues", - "source": "https://github.com/alchemy-fr/BinaryDriver/tree/master" - }, - "time": "2020-02-12T19:35:11+00:00" - }, { "name": "asm89/stack-cors", "version": "v2.1.1", @@ -180,16 +114,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.235.10", + "version": "3.240.11", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "943f96f50d19244584675c34fb3e4c8aa3eaddce" + "reference": "4ab7d004ca11298bf400f3291f144d820fb97cd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/943f96f50d19244584675c34fb3e4c8aa3eaddce", - "reference": "943f96f50d19244584675c34fb3e4c8aa3eaddce", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/4ab7d004ca11298bf400f3291f144d820fb97cd6", + "reference": "4ab7d004ca11298bf400f3291f144d820fb97cd6", "shasum": "" }, "require": { @@ -268,9 +202,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.235.10" + "source": "https://github.com/aws/aws-sdk-php/tree/3.240.11" }, - "time": "2022-09-16T18:18:42+00:00" + "time": "2022-11-07T19:23:11+00:00" }, { "name": "bacon/bacon-qr-code", @@ -717,16 +651,16 @@ }, { "name": "dflydev/dot-access-data", - "version": "v3.0.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c" + "reference": "f41715465d65213d644d3141a6a93081be5d3549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", "shasum": "" }, "require": { @@ -737,7 +671,7 @@ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", "scrutinizer/ocular": "1.6.0", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.14" + "vimeo/psalm": "^4.0.0" }, "type": "library", "extra": { @@ -786,9 +720,9 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" }, - "time": "2021-08-13T13:06:58+00:00" + "time": "2022-10-27T11:44:00+00:00" }, { "name": "doctrine/cache", @@ -1037,34 +971,35 @@ }, { "name": "doctrine/event-manager", - "version": "1.1.2", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683" + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", "shasum": "" }, "require": { + "doctrine/deprecations": "^0.5.3 || ^1", "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "~1.4.10 || ^1.5.4", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.24" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1108,7 +1043,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.2" + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" }, "funding": [ { @@ -1124,27 +1059,27 @@ "type": "tidelift" } ], - "time": "2022-07-27T22:18:11+00:00" + "time": "2022-10-12T20:51:15+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.5", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392" + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/ade2b3bbfb776f27f0558e26eed43b5d9fe1b392", - "reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^10", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.3", @@ -1199,7 +1134,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.5" + "source": "https://github.com/doctrine/inflector/tree/2.0.6" }, "funding": [ { @@ -1215,7 +1150,7 @@ "type": "tidelift" } ], - "time": "2022-09-07T09:01:28+00:00" + "time": "2022-10-20T09:10:12+00:00" }, { "name": "doctrine/lexer", @@ -1356,27 +1291,27 @@ }, { "name": "egulias/email-validator", - "version": "2.1.25", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", "shasum": "" }, "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" + "doctrine/lexer": "^1.2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" }, "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -1384,7 +1319,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -1412,7 +1347,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" }, "funding": [ { @@ -1420,7 +1355,7 @@ "type": "github" } ], - "time": "2020-12-29T14:50:06+00:00" + "time": "2022-06-18T20:57:19+00:00" }, { "name": "evenement/evenement", @@ -1583,64 +1518,6 @@ }, "time": "2020-10-16T08:27:54+00:00" }, - { - "name": "fideloper/proxy", - "version": "4.4.2", - "source": { - "type": "git", - "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "a751f2bc86dd8e6cfef12dc0cbdada82f5a18750" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/a751f2bc86dd8e6cfef12dc0cbdada82f5a18750", - "reference": "a751f2bc86dd8e6cfef12dc0cbdada82f5a18750", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", - "php": ">=5.4.0" - }, - "require-dev": { - "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^8.5.8|^9.3.3" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Fideloper\\Proxy\\TrustedProxyServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Fideloper\\Proxy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Fidao", - "email": "fideloper@gmail.com" - } - ], - "description": "Set trusted proxies for Laravel", - "keywords": [ - "load balancing", - "proxy", - "trusted proxy" - ], - "support": { - "issues": "https://github.com/fideloper/TrustedProxy/issues", - "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.2" - }, - "time": "2022-02-09T13:33:34+00:00" - }, { "name": "fig/http-message-util", "version": "1.1.5", @@ -1699,16 +1576,16 @@ }, { "name": "firebase/php-jwt", - "version": "v6.3.0", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "018dfc4e1da92ad8a1b90adc4893f476a3b41cb8" + "reference": "ddfaddcb520488b42bca3a75e17e9dd53c3667da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/018dfc4e1da92ad8a1b90adc4893f476a3b41cb8", - "reference": "018dfc4e1da92ad8a1b90adc4893f476a3b41cb8", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/ddfaddcb520488b42bca3a75e17e9dd53c3667da", + "reference": "ddfaddcb520488b42bca3a75e17e9dd53c3667da", "shasum": "" }, "require": { @@ -1755,9 +1632,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.3.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.3.1" }, - "time": "2022-07-15T16:48:45+00:00" + "time": "2022-11-01T21:20:08+00:00" }, { "name": "fruitcake/laravel-cors", @@ -1838,6 +1715,77 @@ ], "time": "2022-02-23T14:25:13+00:00" }, + { + "name": "fruitcake/php-cors", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, { "name": "graham-campbell/result-type", "version": "v1.1.0", @@ -1902,37 +1850,49 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.8", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981", - "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.9", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17" + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "6.5-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -1985,19 +1945,20 @@ } ], "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", "framework", "http", "http client", + "psr-18", + "psr-7", "rest", "web service" ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5.8" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -2013,7 +1974,7 @@ "type": "tidelift" } ], - "time": "2022-06-20T22:16:07+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", @@ -2101,43 +2062,47 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.9.0", + "version": "2.4.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318" + "reference": "67c26b443f348a51926030c83481b85718457d3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", - "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" }, "provide": { + "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "2.4-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Psr7\\": "src/" } @@ -2176,6 +2141,11 @@ "name": "Tobias Schultze", "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "PSR-7 message implementation that also provides common utility methods", @@ -2191,7 +2161,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.9.0" + "source": "https://github.com/guzzle/psr7/tree/2.4.3" }, "funding": [ { @@ -2207,7 +2177,7 @@ "type": "tidelift" } ], - "time": "2022-06-20T21:43:03+00:00" + "time": "2022-10-26T14:07:24+00:00" }, { "name": "intervention/image", @@ -2295,16 +2265,16 @@ }, { "name": "jaybizzle/crawler-detect", - "version": "v1.2.111", + "version": "v1.2.112", "source": { "type": "git", "url": "https://github.com/JayBizzle/Crawler-Detect.git", - "reference": "d572ed4a65a70a2d2871dc5137c9c5b7e69745ab" + "reference": "2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/d572ed4a65a70a2d2871dc5137c9c5b7e69745ab", - "reference": "d572ed4a65a70a2d2871dc5137c9c5b7e69745ab", + "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f", + "reference": "2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f", "shasum": "" }, "require": { @@ -2341,9 +2311,9 @@ ], "support": { "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", - "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.111" + "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.112" }, - "time": "2022-03-15T22:19:01+00:00" + "time": "2022-10-05T21:52:44+00:00" }, { "name": "jenssegers/agent", @@ -2430,56 +2400,57 @@ }, { "name": "laravel/framework", - "version": "v8.83.23", + "version": "v9.38.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "bdc707f8b9bcad289b24cd182d98ec7480ac4491" + "reference": "abf198e443e06696af3f356b44de67c0fa516107" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/bdc707f8b9bcad289b24cd182d98ec7480ac4491", - "reference": "bdc707f8b9bcad289b24cd182d98ec7480ac4491", + "url": "https://api.github.com/repos/laravel/framework/zipball/abf198e443e06696af3f356b44de67c0fa516107", + "reference": "abf198e443e06696af3f356b44de67c0fa516107", "shasum": "" }, "require": { - "doctrine/inflector": "^1.4|^2.0", - "dragonmantank/cron-expression": "^3.0.2", - "egulias/email-validator": "^2.1.10", - "ext-json": "*", + "doctrine/inflector": "^2.0", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1", "ext-mbstring": "*", "ext-openssl": "*", - "laravel/serializable-closure": "^1.0", - "league/commonmark": "^1.3|^2.0.2", - "league/flysystem": "^1.1", + "fruitcake/php-cors": "^1.2", + "laravel/serializable-closure": "^1.2.2", + "league/commonmark": "^2.2", + "league/flysystem": "^3.8.0", "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.53.1", - "opis/closure": "^3.6", - "php": "^7.3|^8.0", - "psr/container": "^1.0", - "psr/log": "^1.0|^2.0", - "psr/simple-cache": "^1.0", + "nesbot/carbon": "^2.62.1", + "nunomaduro/termwind": "^1.13", + "php": "^8.0.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.2.2", - "swiftmailer/swiftmailer": "^6.3", - "symfony/console": "^5.4", - "symfony/error-handler": "^5.4", - "symfony/finder": "^5.4", - "symfony/http-foundation": "^5.4", - "symfony/http-kernel": "^5.4", - "symfony/mime": "^5.4", - "symfony/process": "^5.4", - "symfony/routing": "^5.4", - "symfony/var-dumper": "^5.4", - "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "symfony/console": "^6.0.9", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/uid": "^6.0", + "symfony/var-dumper": "^6.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^1.6.1" + "voku/portable-ascii": "^2.0" }, "conflict": { "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.0", - "psr/simple-cache-implementation": "1.0" + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { "illuminate/auth": "self.version", @@ -2487,6 +2458,7 @@ "illuminate/bus": "self.version", "illuminate/cache": "self.version", "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", "illuminate/container": "self.version", @@ -2515,21 +2487,27 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.198.1", + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", "doctrine/dbal": "^2.13.3|^3.1.4", - "filp/whoops": "^2.14.3", - "guzzlehttp/guzzle": "^6.5.5|^7.0.1", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.4", - "orchestra/testbench-core": "^6.27", + "fakerphp/faker": "^1.9.2", + "guzzlehttp/guzzle": "^7.5", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.11", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.19|^9.5.8", - "predis/predis": "^1.1.9", - "symfony/cache": "^5.4" + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9|^2.0.2", + "symfony/cache": "^6.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", "brianium/paratest": "Required to run tests in parallel (^6.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", "ext-bcmath": "Required to use the multiple_of validation rule.", @@ -2541,27 +2519,31 @@ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (^1.4.4).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.5.1).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", - "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "8.x-dev" + "dev-master": "9.x-dev" } }, "autoload": { @@ -2575,7 +2557,8 @@ "Illuminate\\": "src/Illuminate/", "Illuminate\\Support\\": [ "src/Illuminate/Macroable/", - "src/Illuminate/Collections/" + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" ] } }, @@ -2599,7 +2582,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-07-26T13:30:00+00:00" + "time": "2022-11-01T14:05:55+00:00" }, { "name": "laravel/helpers", @@ -2659,16 +2642,16 @@ }, { "name": "laravel/horizon", - "version": "v5.10.1", + "version": "v5.10.3", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "1570c8a4612484a37392eca986f06d01b771cb96" + "reference": "22403726851d62c45051114c89106130c348decc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/1570c8a4612484a37392eca986f06d01b771cb96", - "reference": "1570c8a4612484a37392eca986f06d01b771cb96", + "url": "https://api.github.com/repos/laravel/horizon/zipball/22403726851d62c45051114c89106130c348decc", + "reference": "22403726851d62c45051114c89106130c348decc", "shasum": "" }, "require": { @@ -2730,9 +2713,9 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.10.1" + "source": "https://github.com/laravel/horizon/tree/v5.10.3" }, - "time": "2022-09-05T16:33:43+00:00" + "time": "2022-10-14T13:33:44+00:00" }, { "name": "laravel/passport", @@ -3002,31 +2985,31 @@ }, { "name": "lcobucci/clock", - "version": "2.0.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "353d83fe2e6ae95745b16b3d911813df6a05bfb3" + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/353d83fe2e6ae95745b16b3d911813df6a05bfb3", - "reference": "353d83fe2e6ae95745b16b3d911813df6a05bfb3", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/fb533e093fd61321bfcbac08b131ce805fe183d3", + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.0", + "stella-maris/clock": "^0.1.4" }, "require-dev": { - "infection/infection": "^0.17", - "lcobucci/coding-standard": "^6.0", - "phpstan/extension-installer": "^1.0", + "infection/infection": "^0.26", + "lcobucci/coding-standard": "^8.0", + "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^0.12", "phpstan/phpstan-deprecation-rules": "^0.12", "phpstan/phpstan-phpunit": "^0.12", "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/php-code-coverage": "9.1.4", - "phpunit/phpunit": "9.3.7" + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { @@ -3047,7 +3030,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/2.0.x" + "source": "https://github.com/lcobucci/clock/tree/2.2.0" }, "funding": [ { @@ -3059,7 +3042,7 @@ "type": "patreon" } ], - "time": "2020-08-27T18:56:02+00:00" + "time": "2022-04-19T19:34:17+00:00" }, { "name": "lcobucci/jwt", @@ -3137,16 +3120,16 @@ }, { "name": "league/commonmark", - "version": "2.3.5", + "version": "2.3.7", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257" + "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84d74485fdb7074f4f9dd6f02ab957b1de513257", - "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/a36bd2be4f5387c0f3a8792a0d76b7d68865abbf", + "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf", "shasum": "" }, "require": { @@ -3166,7 +3149,7 @@ "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4", + "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21", @@ -3239,7 +3222,7 @@ "type": "tidelift" } ], - "time": "2022-07-29T10:59:45+00:00" + "time": "2022-11-03T17:29:46+00:00" }, { "name": "league/config", @@ -3379,54 +3362,49 @@ }, { "name": "league/flysystem", - "version": "1.1.9", + "version": "3.10.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99" + "reference": "b9bd194b016114d6ff6765c09d40c7d427e4e3f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b9bd194b016114d6ff6765c09d40c7d427e4e3f6", + "reference": "b9bd194b016114d6ff6765c09d40c7d427e4e3f6", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" }, "conflict": { - "league/flysystem-sftp": "<1.0.6" + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" }, "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.198.1", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "League\\Flysystem\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3436,93 +3414,30 @@ "authors": [ { "name": "Frank de Jonge", - "email": "info@frenky.net" + "email": "info@frankdejonge.nl" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "description": "File storage abstraction for PHP", "keywords": [ - "Cloud Files", "WebDAV", - "abstraction", "aws", "cloud", - "copy.com", - "dropbox", - "file systems", + "file", "files", "filesystem", "filesystems", "ftp", - "rackspace", - "remote", "s3", "sftp", "storage" ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.9" + "source": "https://github.com/thephpleague/flysystem/tree/3.10.2" }, "funding": [ { - "url": "https://offset.earth/frankdejonge", - "type": "other" - } - ], - "time": "2021-12-09T09:40:50+00:00" - }, - { - "name": "league/flysystem-aws-s3-v3", - "version": "1.0.30", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "af286f291ebab6877bac0c359c6c2cb017eb061d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/af286f291ebab6877bac0c359c6c2cb017eb061d", - "reference": "af286f291ebab6877bac0c359c6c2cb017eb061d", - "shasum": "" - }, - "require": { - "aws/aws-sdk-php": "^3.20.0", - "league/flysystem": "^1.0.40", - "php": ">=5.5.0" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "~1.0.1", - "phpspec/phpspec": "^2.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Flysystem\\AwsS3v3\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Flysystem adapter for the AWS S3 SDK v3.x", - "support": { - "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/1.0.30" - }, - "funding": [ - { - "url": "https://offset.earth/frankdejonge", + "url": "https://ecologi.com/frankdejonge", "type": "custom" }, { @@ -3534,40 +3449,36 @@ "type": "tidelift" } ], - "time": "2022-07-02T13:51:38+00:00" + "time": "2022-10-25T07:01:47+00:00" }, { - "name": "league/flysystem-cached-adapter", - "version": "1.1.0", + "name": "league/flysystem-aws-s3-v3", + "version": "3.10.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem-cached-adapter.git", - "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff" + "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", + "reference": "95825edc5463006853e64338a4d96a977e8a10ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/d1925efb2207ac4be3ad0c40b8277175f99ffaff", - "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/95825edc5463006853e64338a4d96a977e8a10ca", + "reference": "95825edc5463006853e64338a4d96a977e8a10ca", "shasum": "" }, "require": { - "league/flysystem": "~1.0", - "psr/cache": "^1.0.0" + "aws/aws-sdk-php": "^3.132.4", + "league/flysystem": "^3.10.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" }, - "require-dev": { - "mockery/mockery": "~0.9", - "phpspec/phpspec": "^3.4", - "phpunit/phpunit": "^5.7", - "predis/predis": "~1.0", - "tedivm/stash": "~0.12" - }, - "suggest": { - "ext-phpredis": "Pure C implemented extension for PHP" + "conflict": { + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1" }, "type": "library", "autoload": { "psr-4": { - "League\\Flysystem\\Cached\\": "src/" + "League\\Flysystem\\AwsS3V3\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3576,16 +3487,39 @@ ], "authors": [ { - "name": "frankdejonge", - "email": "info@frenky.net" + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" } ], - "description": "An adapter decorator to enable meta-data caching.", + "description": "AWS S3 filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "aws", + "file", + "files", + "filesystem", + "s3", + "storage" + ], "support": { - "issues": "https://github.com/thephpleague/flysystem-cached-adapter/issues", - "source": "https://github.com/thephpleague/flysystem-cached-adapter/tree/master" + "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.10.0" }, - "time": "2020-07-25T15:56:04+00:00" + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-10-20T21:00:57+00:00" }, { "name": "league/iso3166", @@ -3790,37 +3724,38 @@ }, { "name": "league/uri", - "version": "6.7.2", + "version": "6.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "d3b50812dd51f3fbf176344cc2981db03d10fe06" + "reference": "a700b4656e4c54371b799ac61e300ab25a2d1d39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/d3b50812dd51f3fbf176344cc2981db03d10fe06", - "reference": "d3b50812dd51f3fbf176344cc2981db03d10fe06", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/a700b4656e4c54371b799ac61e300ab25a2d1d39", + "reference": "a700b4656e4c54371b799ac61e300ab25a2d1d39", "shasum": "" }, "require": { "ext-json": "*", "league/uri-interfaces": "^2.3", - "php": "^7.4 || ^8.0", - "psr/http-message": "^1.0" + "php": "^8.1", + "psr/http-message": "^1.0.1" }, "conflict": { "league/uri-schemes": "^1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^v3.3.2", - "nyholm/psr7": "^1.5", - "php-http/psr7-integration-tests": "^1.1", - "phpstan/phpstan": "^1.2.0", + "friendsofphp/php-cs-fixer": "^v3.9.5", + "nyholm/psr7": "^1.5.1", + "php-http/psr7-integration-tests": "^1.1.1", + "phpbench/phpbench": "^1.2.6", + "phpstan/phpstan": "^1.8.5", "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" + "phpstan/phpstan-phpunit": "^1.1.1", + "phpstan/phpstan-strict-rules": "^1.4.3", + "phpunit/phpunit": "^9.5.24", + "psr/http-factory": "^1.0.1" }, "suggest": { "ext-fileinfo": "Needed to create Data URI from a filepath", @@ -3877,7 +3812,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.7.2" + "source": "https://github.com/thephpleague/uri/tree/6.8.0" }, "funding": [ { @@ -3885,7 +3820,7 @@ "type": "github" } ], - "time": "2022-09-13T19:50:42+00:00" + "time": "2022-09-13T19:58:47+00:00" }, { "name": "league/uri-interfaces", @@ -4426,50 +4361,6 @@ }, "time": "2022-09-12T23:36:20+00:00" }, - { - "name": "neutron/temporary-filesystem", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/romainneutron/Temporary-Filesystem.git", - "reference": "55f3d4896eff3bf070e491916e6c564db5e640b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/romainneutron/Temporary-Filesystem/zipball/55f3d4896eff3bf070e491916e6c564db5e640b5", - "reference": "55f3d4896eff3bf070e491916e6c564db5e640b5", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "symfony/filesystem": "^2.3 || ^3.0 || ^4.0 || ^5.0 || ^6.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^5.0.4 || ^6.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Neutron": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Romain Neutron", - "email": "imprec@gmail.com" - } - ], - "description": "Symfony filesystem extension to handle temporary files", - "support": { - "issues": "https://github.com/romainneutron/Temporary-Filesystem/issues", - "source": "https://github.com/romainneutron/Temporary-Filesystem/tree/3.0.1" - }, - "time": "2021-12-14T07:30:33+00:00" - }, { "name": "nikic/php-parser", "version": "v4.15.1", @@ -4526,6 +4417,92 @@ }, "time": "2022-09-04T07:30:47+00:00" }, + { + "name": "nunomaduro/termwind", + "version": "v1.14.2", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "9a8218511eb1a0965629ff820dda25985440aefc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/9a8218511eb1a0965629ff820dda25985440aefc", + "reference": "9a8218511eb1a0965629ff820dda25985440aefc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.14.2" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2022-10-28T22:51:32+00:00" + }, { "name": "nyholm/psr7", "version": "1.5.1", @@ -4603,71 +4580,6 @@ ], "time": "2022-06-22T07:13:36+00:00" }, - { - "name": "opis/closure", - "version": "3.6.3", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Opis\\Closure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.3" - }, - "time": "2022-01-27T09:35:39+00:00" - }, { "name": "paragonie/constant_time_encoding", "version": "v2.6.3", @@ -4787,16 +4699,16 @@ }, { "name": "paragonie/sodium_compat", - "version": "v1.18.0", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "906e0b925895d3a5941eda25f371fbafb3cbc22f" + "reference": "cb15e403ecbe6a6cc515f855c310eb6b1872a933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/906e0b925895d3a5941eda25f371fbafb3cbc22f", - "reference": "906e0b925895d3a5941eda25f371fbafb3cbc22f", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/cb15e403ecbe6a6cc515f855c310eb6b1872a933", + "reference": "cb15e403ecbe6a6cc515f855c310eb6b1872a933", "shasum": "" }, "require": { @@ -4867,43 +4779,36 @@ ], "support": { "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v1.18.0" + "source": "https://github.com/paragonie/sodium_compat/tree/v1.19.0" }, - "time": "2022-09-13T20:54:27+00:00" + "time": "2022-09-26T03:40:35+00:00" }, { "name": "pbmedia/laravel-ffmpeg", - "version": "7.8.1", + "version": "8.1.2", "source": { "type": "git", "url": "https://github.com/protonemedia/laravel-ffmpeg.git", - "reference": "8fd5667b8898b30531b335ef43c0938d92b60e87" + "reference": "e6f93d8e3b1a917d6991a1747e0e5f73531f1e08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/protonemedia/laravel-ffmpeg/zipball/8fd5667b8898b30531b335ef43c0938d92b60e87", - "reference": "8fd5667b8898b30531b335ef43c0938d92b60e87", + "url": "https://api.github.com/repos/protonemedia/laravel-ffmpeg/zipball/e6f93d8e3b1a917d6991a1747e0e5f73531f1e08", + "reference": "e6f93d8e3b1a917d6991a1747e0e5f73531f1e08", "shasum": "" }, "require": { - "evenement/evenement": "^3.0", - "illuminate/bus": "^8.67", - "illuminate/config": "^8.67", - "illuminate/filesystem": "^8.67", - "illuminate/log": "^8.67", - "illuminate/support": "^8.67", - "league/flysystem": "^1.1.4", - "php": "^7.4 || ^8.0 || ^8.1", - "php-ffmpeg/php-ffmpeg": "^0.19 || ^1.0" + "illuminate/contracts": "^9.0", + "php": "^8.0|^8.1", + "php-ffmpeg/php-ffmpeg": "^1.0.1" }, "require-dev": { - "league/flysystem-memory": "^1.0", + "league/flysystem-memory": "^3.0", "mockery/mockery": "^1.3.3", - "orchestra/testbench": "^6.0", - "phpunit/phpunit": "9.4.*", - "spatie/image": "^1.7", - "spatie/phpunit-snapshot-assertions": "^4.2", - "twistor/flysystem-http": "^0.2.0" + "orchestra/testbench": "^7.0", + "phpunit/phpunit": "^9.5.10", + "spatie/image": "^2.0", + "spatie/phpunit-snapshot-assertions": "^4.2" }, "type": "library", "extra": { @@ -4934,20 +4839,17 @@ } ], "description": "FFMpeg for Laravel", - "homepage": "https://github.com/pascalbaljetmedia/laravel-ffmpeg", + "homepage": "https://github.com/protonemedia/laravel-ffmpeg", "keywords": [ "ffmpeg", "laravel", "laravel-ffmpeg", - "pascal baljet media", - "pascalbaljetmedia", - "pbmedia", "protone media", "protonemedia" ], "support": { "issues": "https://github.com/protonemedia/laravel-ffmpeg/issues", - "source": "https://github.com/protonemedia/laravel-ffmpeg/tree/7.8.1" + "source": "https://github.com/protonemedia/laravel-ffmpeg/tree/8.1.2" }, "funding": [ { @@ -4955,45 +4857,42 @@ "type": "github" } ], - "time": "2022-02-10T20:07:45+00:00" + "time": "2022-05-23T12:00:47+00:00" }, { "name": "php-ffmpeg/php-ffmpeg", - "version": "v0.19.0", + "version": "v1.0.1", "source": { "type": "git", "url": "https://github.com/PHP-FFMpeg/PHP-FFMpeg.git", - "reference": "22b71931fd1a97207788636b283eee1c0067eff7" + "reference": "bda300b69acecf791d2934cd5ed43a8ba24febf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/22b71931fd1a97207788636b283eee1c0067eff7", - "reference": "22b71931fd1a97207788636b283eee1c0067eff7", + "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/bda300b69acecf791d2934cd5ed43a8ba24febf6", + "reference": "bda300b69acecf791d2934cd5ed43a8ba24febf6", "shasum": "" }, "require": { - "alchemy/binary-driver": "^1.5 || ~2.0.0 || ^5.0", - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "neutron/temporary-filesystem": "^2.1.1 || ^3.0", - "php": ">=5.5.9", - "symfony/cache": "^3.1 || ^4.0 || ^5.0 || ^6.0" + "evenement/evenement": "^3.0", + "php": "^8.0 || ^8.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "spatie/temporary-directory": "^2.0", + "symfony/cache": "^5.4 || ^6.0", + "symfony/process": "^5.4 || ^6.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.0.4", - "symfony/process": "2.8 || 3.3" + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^9.5.10" }, "suggest": { "php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.x-dev" - } - }, "autoload": { - "psr-0": { - "FFMpeg": "src" + "psr-4": { + "FFMpeg\\": "src/FFMpeg", + "Alchemy\\BinaryDriver\\": "src/Alchemy/BinaryDriver" } }, "notification-url": "https://packagist.org/downloads/", @@ -5025,6 +4924,11 @@ "name": "Jens Hausdorf", "email": "hello@jens-hausdorf.de", "homepage": "https://jens-hausdorf.de" + }, + { + "name": "Pascal Baljet", + "email": "pascal@protone.media", + "homepage": "https://protone.media" } ], "description": "FFMpeg PHP, an Object Oriented library to communicate with AVconv / ffmpeg", @@ -5040,9 +4944,9 @@ ], "support": { "issues": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues", - "source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v0.19.0" + "source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v1.0.1" }, - "time": "2021-12-20T11:51:26+00:00" + "time": "2022-02-22T15:54:06+00:00" }, { "name": "php-http/message-factory", @@ -5175,16 +5079,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.38", + "version": "2.0.39", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "b03536539f43a4f9aa33c4f0b2f3a1c752088fcd" + "reference": "f3a0e2b715c40cf1fd270d444901b63311725d63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/b03536539f43a4f9aa33c4f0b2f3a1c752088fcd", - "reference": "b03536539f43a4f9aa33c4f0b2f3a1c752088fcd", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/f3a0e2b715c40cf1fd270d444901b63311725d63", + "reference": "f3a0e2b715c40cf1fd270d444901b63311725d63", "shasum": "" }, "require": { @@ -5265,7 +5169,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.38" + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.39" }, "funding": [ { @@ -5281,7 +5185,7 @@ "type": "tidelift" } ], - "time": "2022-09-02T17:04:26+00:00" + "time": "2022-10-24T10:49:03+00:00" }, { "name": "pixelfed/fractal", @@ -5411,20 +5315,20 @@ }, { "name": "pixelfed/zttp", - "version": "v0.4.1", + "version": "v0.5.0", "source": { "type": "git", "url": "https://github.com/pixelfed/zttp.git", - "reference": "9a95a42716eb3e71a0a88411805737965bb77c05" + "reference": "e78af39d75171f360ab4c32eed1c7a71b67b5e3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pixelfed/zttp/zipball/9a95a42716eb3e71a0a88411805737965bb77c05", - "reference": "9a95a42716eb3e71a0a88411805737965bb77c05", + "url": "https://api.github.com/repos/pixelfed/zttp/zipball/e78af39d75171f360ab4c32eed1c7a71b67b5e3b", + "reference": "e78af39d75171f360ab4c32eed1c7a71b67b5e3b", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^6.0", + "guzzlehttp/guzzle": "^6.0|^7.0", "php": ">=7.0", "tightenco/collect": "^5.4" }, @@ -5454,9 +5358,9 @@ "http" ], "support": { - "source": "https://github.com/pixelfed/zttp/tree/v0.4.1" + "source": "https://github.com/pixelfed/zttp/tree/v0.5.0" }, - "time": "2018-07-30T05:04:42+00:00" + "time": "2022-08-06T04:58:13+00:00" }, { "name": "pragmarx/google2fa", @@ -5578,20 +5482,20 @@ }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -5611,7 +5515,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -5621,28 +5525,33 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -5669,9 +5578,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -5723,6 +5632,58 @@ }, "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, { "name": "psr/http-factory", "version": "1.0.1", @@ -5833,30 +5794,30 @@ }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -5877,31 +5838,31 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "psr/simple-cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -5916,7 +5877,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -5928,22 +5889,22 @@ "simple-cache" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, - "time": "2017-10-23T01:57:42+00:00" + "time": "2021-10-29T13:26:27+00:00" }, { "name": "psy/psysh", - "version": "v0.11.8", + "version": "v0.11.9", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "f455acf3645262ae389b10e9beba0c358aa6994e" + "reference": "1acec99d6684a54ff92f8b548a4e41b566963778" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/f455acf3645262ae389b10e9beba0c358aa6994e", - "reference": "f455acf3645262ae389b10e9beba0c358aa6994e", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1acec99d6684a54ff92f8b548a4e41b566963778", + "reference": "1acec99d6684a54ff92f8b548a4e41b566963778", "shasum": "" }, "require": { @@ -6004,33 +5965,35 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.8" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.9" }, - "time": "2022-07-28T14:25:11+00:00" + "time": "2022-11-06T15:29:46+00:00" }, { "name": "pusher/pusher-php-server", - "version": "5.0.3", + "version": "7.2.1", "source": { "type": "git", "url": "https://github.com/pusher/pusher-http-php.git", - "reference": "1024077ff60beebaf5706b4e0208a1e648d20cf4" + "reference": "5d708d43d774218e1068037c56a887658a4930ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/1024077ff60beebaf5706b4e0208a1e648d20cf4", - "reference": "1024077ff60beebaf5706b4e0208a1e648d20cf4", + "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/5d708d43d774218e1068037c56a887658a4930ac", + "reference": "5d708d43d774218e1068037c56a887658a4930ac", "shasum": "" }, "require": { "ext-curl": "*", + "ext-json": "*", + "guzzlehttp/guzzle": "^7.2", "paragonie/sodium_compat": "^1.6", - "php": "^7.1|^8.0", - "psr/log": "^1.0" + "php": "^7.3|^8.0", + "psr/log": "^1.0|^2.0|^3.0" }, "require-dev": { "overtrue/phplint": "^2.3", - "phpunit/phpunit": "^7.2|^8.5|^9.3" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -6063,9 +6026,9 @@ ], "support": { "issues": "https://github.com/pusher/pusher-http-php/issues", - "source": "https://github.com/pusher/pusher-http-php/tree/5.0.3" + "source": "https://github.com/pusher/pusher-http-php/tree/7.2.1" }, - "time": "2021-03-15T09:17:01+00:00" + "time": "2022-10-17T08:33:16+00:00" }, { "name": "ralouphie/getallheaders", @@ -6192,25 +6155,23 @@ }, { "name": "ramsey/uuid", - "version": "4.2.3", + "version": "4.6.0", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/ad63bc700e7d021039e30ce464eba384c4a1d40f", + "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", + "brick/math": "^0.8.8 || ^0.9 || ^0.10", "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" + "php": "^8.0", + "ramsey/collection": "^1.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -6222,24 +6183,23 @@ "doctrine/annotations": "^1.8", "ergebnis/composer-normalize": "^2.15", "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", "paragonie/random-lib": "^2", "php-mock/php-mock": "^2.2", "php-mock/php-mock-mockery": "^1.3", "php-parallel-lint/php-parallel-lint": "^1.1", "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.5", "vimeo/psalm": "^4.9" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", @@ -6247,9 +6207,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, "captainhook": { "force-install": true } @@ -6274,7 +6231,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" + "source": "https://github.com/ramsey/uuid/tree/4.6.0" }, "funding": [ { @@ -6286,7 +6243,7 @@ "type": "tidelift" } ], - "time": "2021-09-25T23:10:38+00:00" + "time": "2022-11-05T23:03:38+00:00" }, { "name": "ratchet/rfc6455", @@ -6581,16 +6538,16 @@ }, { "name": "react/http", - "version": "v1.7.0", + "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/reactphp/http.git", - "reference": "4a1e85382e8c2a9e0fdb8ac04e94585da2083bfa" + "reference": "aa7512ee17258c88466de30f9cb44ec5f9df3ff3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/http/zipball/4a1e85382e8c2a9e0fdb8ac04e94585da2083bfa", - "reference": "4a1e85382e8c2a9e0fdb8ac04e94585da2083bfa", + "url": "https://api.github.com/repos/reactphp/http/zipball/aa7512ee17258c88466de30f9cb44ec5f9df3ff3", + "reference": "aa7512ee17258c88466de30f9cb44ec5f9df3ff3", "shasum": "" }, "require": { @@ -6599,16 +6556,16 @@ "php": ">=5.3.0", "psr/http-message": "^1.0", "react/event-loop": "^1.2", - "react/promise": "^2.3 || ^1.2.1", - "react/promise-stream": "^1.1", - "react/socket": "^1.9", + "react/promise": "^3 || ^2.3 || ^1.2.1", + "react/promise-stream": "^1.4", + "react/socket": "^1.12", "react/stream": "^1.2", "ringcentral/psr7": "^1.2" }, "require-dev": { - "clue/http-proxy-react": "^1.7", - "clue/reactphp-ssh-proxy": "^1.3", - "clue/socks-react": "^1.3", + "clue/http-proxy-react": "^1.8", + "clue/reactphp-ssh-proxy": "^1.4", + "clue/socks-react": "^1.4", "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", "react/async": "^4 || ^3 || ^2", "react/promise-timer": "^1.9" @@ -6661,7 +6618,7 @@ ], "support": { "issues": "https://github.com/reactphp/http/issues", - "source": "https://github.com/reactphp/http/tree/v1.7.0" + "source": "https://github.com/reactphp/http/tree/v1.8.0" }, "funding": [ { @@ -6673,7 +6630,7 @@ "type": "github" } ], - "time": "2022-08-23T12:31:28+00:00" + "time": "2022-09-29T12:55:52+00:00" }, { "name": "react/promise", @@ -7146,24 +7103,24 @@ }, { "name": "spatie/db-dumper", - "version": "2.21.1", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/spatie/db-dumper.git", - "reference": "05e5955fb882008a8947c5a45146d86cfafa10d1" + "reference": "129b8254b2c9f10881a754a692bd9507b09a1893" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/db-dumper/zipball/05e5955fb882008a8947c5a45146d86cfafa10d1", - "reference": "05e5955fb882008a8947c5a45146d86cfafa10d1", + "url": "https://api.github.com/repos/spatie/db-dumper/zipball/129b8254b2c9f10881a754a692bd9507b09a1893", + "reference": "129b8254b2c9f10881a754a692bd9507b09a1893", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "symfony/process": "^4.2|^5.0" + "php": "^8.0", + "symfony/process": "^5.0|^6.0" }, "require-dev": { - "phpunit/phpunit": "^7.0|^8.0|^9.0" + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { @@ -7193,16 +7150,19 @@ "spatie" ], "support": { - "issues": "https://github.com/spatie/db-dumper/issues", - "source": "https://github.com/spatie/db-dumper/tree/2.21.1" + "source": "https://github.com/spatie/db-dumper/tree/3.3.0" }, "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, { "url": "https://github.com/spatie", "type": "github" } ], - "time": "2021-02-24T14:56:42+00:00" + "time": "2022-09-01T20:20:26+00:00" }, { "name": "spatie/image-optimizer", @@ -7260,38 +7220,47 @@ }, { "name": "spatie/laravel-backup", - "version": "6.16.5", + "version": "8.1.5", "source": { "type": "git", "url": "https://github.com/spatie/laravel-backup.git", - "reference": "332fae80b12cacb9e4161824ba195d984b28c8fb" + "reference": "cf367fbe50ff3b1ae9a79638cc5ef66f3cc9c7fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/332fae80b12cacb9e4161824ba195d984b28c8fb", - "reference": "332fae80b12cacb9e4161824ba195d984b28c8fb", + "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/cf367fbe50ff3b1ae9a79638cc5ef66f3cc9c7fa", + "reference": "cf367fbe50ff3b1ae9a79638cc5ef66f3cc9c7fa", "shasum": "" }, "require": { "ext-zip": "^1.14.0", - "illuminate/console": "^6.0|^7.0|^8.0", - "illuminate/contracts": "^6.0|^7.0|^8.0", - "illuminate/events": "^6.0|^7.0|^8.0", - "illuminate/filesystem": "^6.0|^7.0|^8.0", - "illuminate/notifications": "^6.0|^7.0|^8.0", - "illuminate/support": "^6.0|^7.0|^8.0", - "league/flysystem": "^1.0.49", - "php": "^7.3|^8.0", - "spatie/db-dumper": "^2.12", - "spatie/temporary-directory": "^1.1", - "symfony/finder": "^4.2|^5.0" + "illuminate/console": "^9.0", + "illuminate/contracts": "^9.0", + "illuminate/events": "^9.0", + "illuminate/filesystem": "^9.0", + "illuminate/notifications": "^9.0", + "illuminate/support": "^9.0", + "league/flysystem": "^3.0", + "php": "^8.0", + "spatie/db-dumper": "^3.0", + "spatie/laravel-package-tools": "^1.6.2", + "spatie/laravel-signal-aware-command": "^1.2", + "spatie/temporary-directory": "^2.0", + "symfony/console": "^6.0", + "symfony/finder": "^6.0" }, "require-dev": { - "laravel/slack-notification-channel": "^2.3", - "league/flysystem-aws-s3-v3": "^1.0", - "mockery/mockery": "^1.4.2", - "orchestra/testbench": "4.*|5.*|6.*", - "phpunit/phpunit": "^8.4|^9.0" + "composer-runtime-api": "^2.0", + "ext-pcntl": "*", + "laravel/slack-notification-channel": "^2.4", + "league/flysystem-aws-s3-v3": "^2.0|^3.0", + "mockery/mockery": "^1.4", + "nunomaduro/larastan": "^2.1", + "orchestra/testbench": "^7.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.1" }, "suggest": { "laravel/slack-notification-channel": "Required for sending notifications via Slack" @@ -7334,7 +7303,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-backup/issues", - "source": "https://github.com/spatie/laravel-backup/tree/6.16.5" + "source": "https://github.com/spatie/laravel-backup/tree/8.1.5" }, "funding": [ { @@ -7346,30 +7315,30 @@ "type": "other" } ], - "time": "2021-09-12T10:04:18+00:00" + "time": "2022-10-19T13:01:58+00:00" }, { "name": "spatie/laravel-image-optimizer", - "version": "1.6.4", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-image-optimizer.git", - "reference": "c39e9ea77dee6b6eddfc26800adb1aa06a624294" + "reference": "6f9e8520485df7bfceb62824ef5ec7c8d25b3521" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-image-optimizer/zipball/c39e9ea77dee6b6eddfc26800adb1aa06a624294", - "reference": "c39e9ea77dee6b6eddfc26800adb1aa06a624294", + "url": "https://api.github.com/repos/spatie/laravel-image-optimizer/zipball/6f9e8520485df7bfceb62824ef5ec7c8d25b3521", + "reference": "6f9e8520485df7bfceb62824ef5ec7c8d25b3521", "shasum": "" }, "require": { - "laravel/framework": "^6.0|^7.0|^8.0", - "php": "^7.2|^8.0", + "laravel/framework": "^8.0|^9.0", + "php": "^8.0", "spatie/image-optimizer": "^1.2.0" }, "require-dev": { - "orchestra/testbench": "^4.0|^5.0|^6.0", - "phpunit/phpunit": "^9.0" + "orchestra/testbench": "^6.23|^7.0", + "phpunit/phpunit": "^9.4" }, "type": "library", "extra": { @@ -7407,7 +7376,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-image-optimizer/issues", - "source": "https://github.com/spatie/laravel-image-optimizer/tree/1.6.4" + "source": "https://github.com/spatie/laravel-image-optimizer/tree/1.7.0" }, "funding": [ { @@ -7415,27 +7384,159 @@ "type": "custom" } ], - "time": "2020-11-27T18:27:06+00:00" + "time": "2022-01-14T08:03:30+00:00" }, { - "name": "spatie/temporary-directory", - "version": "1.3.0", + "name": "spatie/laravel-package-tools", + "version": "1.13.6", "source": { "type": "git", - "url": "https://github.com/spatie/temporary-directory.git", - "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6" + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "c377cc7223655c2278c148c1685b8b5a78af5c65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/f517729b3793bca58f847c5fd383ec16f03ffec6", - "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/c377cc7223655c2278c148c1685b8b5a78af5c65", + "reference": "c377cc7223655c2278c148c1685b8b5a78af5c65", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "illuminate/contracts": "^9.28", + "php": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^8.0|^9.0" + "mockery/mockery": "^1.5", + "orchestra/testbench": "^7.7", + "phpunit/phpunit": "^9.5.24", + "spatie/test-time": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.13.6" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-10-11T06:37:42+00:00" + }, + { + "name": "spatie/laravel-signal-aware-command", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-signal-aware-command.git", + "reference": "d15a5b69bf715fc557b7034b4abd5a1472ae7ec8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-signal-aware-command/zipball/d15a5b69bf715fc557b7034b4abd5a1472ae7ec8", + "reference": "d15a5b69bf715fc557b7034b4abd5a1472ae7ec8", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^8.35|^9.0", + "php": "^8.0", + "spatie/laravel-package-tools": "^1.4.3" + }, + "require-dev": { + "brianium/paratest": "^6.2", + "ext-pcntl": "*", + "nunomaduro/collision": "^5.3|^6.0", + "orchestra/testbench": "^6.16|^7.0", + "phpunit/phpunit": "^9.5", + "spatie/laravel-ray": "^1.17" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\SignalAwareCommand\\SignalAwareCommandServiceProvider" + ], + "aliases": { + "Signal": "Spatie\\SignalAwareCommand\\Facades\\Signal" + } + } + }, + "autoload": { + "psr-4": { + "Spatie\\SignalAwareCommand\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Handle signals in artisan commands", + "homepage": "https://github.com/spatie/laravel-signal-aware-command", + "keywords": [ + "laravel", + "laravel-signal-aware-command", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-signal-aware-command/issues", + "source": "https://github.com/spatie/laravel-signal-aware-command/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-01-12T19:42:44+00:00" + }, + { + "name": "spatie/temporary-directory", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/temporary-directory.git", + "reference": "e2818d871783d520b319c2d38dc37c10ecdcde20" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/e2818d871783d520b319c2d38dc37c10ecdcde20", + "reference": "e2818d871783d520b319c2d38dc37c10ecdcde20", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { @@ -7464,32 +7565,89 @@ ], "support": { "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/1.3.0" + "source": "https://github.com/spatie/temporary-directory/tree/2.1.1" }, - "time": "2020-11-09T15:54:21+00:00" + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-08-23T07:15:15+00:00" }, { - "name": "stevebauman/purify", - "version": "v3.0.3", + "name": "stella-maris/clock", + "version": "0.1.6", "source": { "type": "git", - "url": "https://github.com/stevebauman/purify.git", - "reference": "08e8830f0ab9d302f8d76d4f5854910b24bacbb3" + "url": "https://github.com/stella-maris-solutions/clock.git", + "reference": "a94228dac03c9a8411198ce8c8dacbbe99c930c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stevebauman/purify/zipball/08e8830f0ab9d302f8d76d4f5854910b24bacbb3", - "reference": "08e8830f0ab9d302f8d76d4f5854910b24bacbb3", + "url": "https://api.github.com/repos/stella-maris-solutions/clock/zipball/a94228dac03c9a8411198ce8c8dacbbe99c930c3", + "reference": "a94228dac03c9a8411198ce8c8dacbbe99c930c3", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "StellaMaris\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Heigl", + "role": "Maintainer" + } + ], + "description": "A pre-release of the proposed PSR-20 Clock-Interface", + "homepage": "https://gitlab.com/stella-maris/clock", + "keywords": [ + "clock", + "datetime", + "point in time", + "psr20" + ], + "support": { + "issues": "https://github.com/stella-maris-solutions/clock/issues", + "source": "https://github.com/stella-maris-solutions/clock/tree/0.1.6" + }, + "time": "2022-09-27T15:03:11+00:00" + }, + { + "name": "stevebauman/purify", + "version": "v4.0.1", + "source": { + "type": "git", + "url": "https://github.com/stevebauman/purify.git", + "reference": "e56289062ed8a25c78c88f35e9106f00d01369c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stevebauman/purify/zipball/e56289062ed8a25c78c88f35e9106f00d01369c1", + "reference": "e56289062ed8a25c78c88f35e9106f00d01369c1", "shasum": "" }, "require": { "ezyang/htmlpurifier": "^4.9.0", - "illuminate/support": "~5.5|~6.0|~7.0|~8.0", + "illuminate/support": "~5.5|~6.0|~7.0|~8.0|~9.0", "php": ">=7.1" }, "require-dev": { - "orchestra/testbench": "~3.7", - "phpunit/phpunit": "~7.0" + "orchestra/testbench": "~3.7|~4.0|~5.0|~6.0|~7.0", + "phpunit/phpunit": "~7.0|~8.0|~9.0" }, "type": "library", "extra": { @@ -7529,140 +7687,63 @@ ], "support": { "issues": "https://github.com/stevebauman/purify/issues", - "source": "https://github.com/stevebauman/purify/tree/v3.0.3" + "source": "https://github.com/stevebauman/purify/tree/v4.0.1" }, - "time": "2020-09-08T20:33:16+00:00" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.4" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" - } - ], - "abandoned": "symfony/mailer", - "time": "2021-10-18T15:26:12+00:00" + "time": "2022-01-21T21:41:41+00:00" }, { "name": "symfony/cache", - "version": "v5.4.11", + "version": "v6.1.7", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "5a0fff46df349f0db3fe242263451fddf5277362" + "reference": "ee5d5b88162684a1377706f9c25125e97685ee61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/5a0fff46df349f0db3fe242263451fddf5277362", - "reference": "5a0fff46df349f0db3fe242263451fddf5277362", + "url": "https://api.github.com/repos/symfony/cache/zipball/ee5d5b88162684a1377706f9c25125e97685ee61", + "reference": "ee5d5b88162684a1377706f9c25125e97685ee61", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0", + "php": ">=8.1", + "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^1.1.7|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", + "symfony/cache-contracts": "^1.1.7|^2|^3", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/var-exporter": "^5.4|^6.0" }, "conflict": { "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<4.4", - "symfony/http-kernel": "<4.4", - "symfony/var-dumper": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" }, "provide": { - "psr/cache-implementation": "1.0|2.0", - "psr/simple-cache-implementation": "1.0|2.0", - "symfony/cache-implementation": "1.0|2.0" + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "^1.6|^2.0", "doctrine/dbal": "^2.13.1|^3.0", "predis/predis": "^1.1", - "psr/simple-cache": "^1.0|^2.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Cache\\": "" }, + "classmap": [ + "Traits/ValueWrapper.php" + ], "exclude-from-classmap": [ "/Tests/" ] @@ -7681,14 +7762,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", "homepage": "https://symfony.com", "keywords": [ "caching", "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.4.11" + "source": "https://github.com/symfony/cache/tree/v6.1.7" }, "funding": [ { @@ -7704,25 +7785,25 @@ "type": "tidelift" } ], - "time": "2022-07-28T15:25:17+00:00" + "time": "2022-10-28T16:23:08+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.5.2", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc" + "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", - "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2eab7fa459af6d75c6463e63e633b667a9b761d3", + "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0|^3.0" + "php": ">=8.1", + "psr/cache": "^3.0" }, "suggest": { "symfony/cache-implementation": "" @@ -7730,7 +7811,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -7767,7 +7848,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/cache-contracts/tree/v3.1.1" }, "funding": [ { @@ -7783,50 +7864,47 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/console", - "version": "v5.4.12", + "version": "v6.1.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1" + "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c072aa8f724c3af64e2c7a96b796a4863d24dba1", - "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1", + "url": "https://api.github.com/repos/symfony/console/zipball/a1282bd0c096e0bdb8800b104177e2ce404d8815", + "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/string": "^5.4|^6.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -7866,7 +7944,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.12" + "source": "https://github.com/symfony/console/tree/v6.1.7" }, "funding": [ { @@ -7882,25 +7960,24 @@ "type": "tidelift" } ], - "time": "2022-08-17T13:18:05+00:00" + "time": "2022-10-26T21:42:49+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.11", + "version": "v6.1.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "c1681789f059ab756001052164726ae88512ae3d" + "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/c1681789f059ab756001052164726ae88512ae3d", - "reference": "c1681789f059ab756001052164726ae88512ae3d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/0dd5e36b80e1de97f8f74ed7023ac2b837a36443", + "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -7932,7 +8009,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.11" + "source": "https://github.com/symfony/css-selector/tree/v6.1.3" }, "funding": [ { @@ -7948,29 +8025,29 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2022-06-27T17:24:16+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -7999,7 +8076,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" }, "funding": [ { @@ -8015,31 +8092,31 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.11", + "version": "v6.1.7", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "f75d17cb4769eb38cd5fccbda95cd80a054d35c8" + "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/f75d17cb4769eb38cd5fccbda95cd80a054d35c8", - "reference": "f75d17cb4769eb38cd5fccbda95cd80a054d35c8", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/699a26ce5ec656c198bf6e26398b0f0818c7e504", + "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "symfony/var-dumper": "^5.4|^6.0" }, "require-dev": { "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -8070,7 +8147,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.11" + "source": "https://github.com/symfony/error-handler/tree/v6.1.7" }, "funding": [ { @@ -8086,44 +8163,42 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:37:50+00:00" + "time": "2022-10-28T16:23:08+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.9", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -8155,7 +8230,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.9" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" }, "funding": [ { @@ -8171,24 +8246,24 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:45:39+00:00" + "time": "2022-05-05T16:51:07+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.2", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, "suggest": { @@ -8197,7 +8272,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -8234,7 +8309,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1" }, "funding": [ { @@ -8250,90 +8325,27 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v5.4.12", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/2d67c1f9a1937406a9be3171b4b22250c0a11447", - "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.12" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-08-02T13:48:16+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/finder", - "version": "v5.4.11", + "version": "v6.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", + "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" }, "type": "library", "autoload": { @@ -8361,7 +8373,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.11" + "source": "https://github.com/symfony/finder/tree/v6.1.3" }, "funding": [ { @@ -8377,35 +8389,199 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:37:50+00:00" + "time": "2022-07-29T07:42:06+00:00" }, { - "name": "symfony/http-foundation", - "version": "v5.4.12", + "name": "symfony/http-client", + "version": "v6.1.7", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791" + "url": "https://github.com/symfony/http-client.git", + "reference": "f515d066728774efb34347a87580621416ca8968" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4bfe9611b113b15d98a43da68ec9b5a00d56791", - "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791", + "url": "https://api.github.com/repos/symfony/http-client/zipball/f515d066728774efb34347a87580621416ca8968", + "reference": "f515d066728774efb34347a87580621416ca8968", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/http-client-contracts": "^3", + "symfony/service-contracts": "^1.0|^2|^3" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-client/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T16:23:08+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/fd038f08c623ab5d22b26e9ba35afe8c79071800", + "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-22T07:30:54+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/792a1856d2b95273f0e1c3435785f1d01a60ecc6", + "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6", + "shasum": "" + }, + "require": { + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/cache": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^5.4|^6.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/mime": "^5.4|^6.0", "symfony/rate-limiter": "^5.2|^6.0" }, "suggest": { @@ -8437,7 +8613,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.12" + "source": "https://github.com/symfony/http-foundation/tree/v6.1.7" }, "funding": [ { @@ -8453,68 +8629,66 @@ "type": "tidelift" } ], - "time": "2022-08-19T07:33:17+00:00" + "time": "2022-10-12T09:44:59+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.8", + "version": "v6.1.7", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "cf7e61106abfc19b305ca0aedc41724ced89a02a" + "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/cf7e61106abfc19b305ca0aedc41724ced89a02a", - "reference": "cf7e61106abfc19b305ca0aedc41724ced89a02a", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8fc1ffe753948c47a103a809cdd6a4a8458b3254", + "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.3.7|^6.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.1", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.1", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -8549,7 +8723,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.8" + "source": "https://github.com/symfony/http-kernel/tree/v6.1.7" }, "funding": [ { @@ -8565,41 +8739,178 @@ "type": "tidelift" } ], - "time": "2022-04-27T17:22:21+00:00" + "time": "2022-10-28T18:06:36+00:00" }, { - "name": "symfony/mime", - "version": "v5.4.12", + "name": "symfony/mailer", + "version": "v6.1.7", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90" + "url": "https://github.com/symfony/mailer.git", + "reference": "7e19813c0b43387c55665780c4caea505cc48391" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/03876e9c5a36f5b45e7d9a381edda5421eff8a90", - "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7e19813c0b43387c55665780c4caea505cc48391", + "reference": "7e19813c0b43387c55665780c4caea505cc48391", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "egulias/email-validator": "^2.1.10|^3", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4" + }, + "require-dev": { + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T16:23:08+00:00" + }, + { + "name": "symfony/mailgun-mailer", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailgun-mailer.git", + "reference": "44d3c15049d84f5165917a6190f06adbe64d71dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/44d3c15049d84f5165917a6190f06adbe64d71dd", + "reference": "44d3c15049d84f5165917a6190f06adbe64d71dd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/mailer": "^5.4|^6.0" + }, + "require-dev": { + "symfony/http-client": "^5.4|^6.0" + }, + "type": "symfony-mailer-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\Bridge\\Mailgun\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Mailgun Mailer Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailgun-mailer/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-01T07:15:35+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "f440f066d57691088d998d6e437ce98771144618" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/f440f066d57691088d998d6e437ce98771144618", + "reference": "f440f066d57691088d998d6e437ce98771144618", + "shasum": "" + }, + "require": { + "php": ">=8.1", "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" + "symfony/mailer": "<5.4" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", "symfony/serializer": "^5.2|^6.0" }, "type": "library", @@ -8632,7 +8943,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.12" + "source": "https://github.com/symfony/mime/tree/v6.1.7" }, "funding": [ { @@ -8648,7 +8959,7 @@ "type": "tidelift" } ], - "time": "2022-08-19T14:24:03+00:00" + "time": "2022-10-19T08:10:53+00:00" }, { "name": "symfony/polyfill-ctype", @@ -8732,89 +9043,6 @@ ], "time": "2022-05-24T11:49:31+00:00" }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "143f1881e655bebca1312722af8068de235ae5dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", - "reference": "143f1881e655bebca1312722af8068de235ae5dc", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-iconv": "*" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, { "name": "symfony/polyfill-intl-grapheme", "version": "v1.26.0", @@ -9226,85 +9454,6 @@ ], "time": "2022-05-24T11:49:31+00:00" }, - { - "name": "symfony/polyfill-php73", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, { "name": "symfony/polyfill-php80", "version": "v1.26.0", @@ -9468,22 +9617,103 @@ "time": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/process", - "version": "v5.4.11", + "name": "symfony/polyfill-uuid", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/a41886c1c81dc075a09c71fe6db5b9d68c79de23", + "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/process", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/a6506e99cfad7059b1ab5cab395854a0a0c21292", + "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292", + "shasum": "" + }, + "require": { + "php": ">=8.1" }, "type": "library", "autoload": { @@ -9511,7 +9741,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.11" + "source": "https://github.com/symfony/process/tree/v6.1.3" }, "funding": [ { @@ -9527,7 +9757,7 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2022-06-27T17:24:16+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -9619,37 +9849,35 @@ }, { "name": "symfony/routing", - "version": "v5.4.11", + "version": "v6.1.7", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226" + "reference": "95effeb9d6e2cec861cee06bf5bbf82d09aea7f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3e01ccd9b2a3a4167ba2b3c53612762300300226", - "reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226", + "url": "https://api.github.com/repos/symfony/routing/zipball/95effeb9d6e2cec861cee06bf5bbf82d09aea7f5", + "reference": "95effeb9d6e2cec861cee06bf5bbf82d09aea7f5", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.12", "psr/log": "^1|^2|^3", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/config": "For using the all-in-one router or any loader", @@ -9689,7 +9917,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.11" + "source": "https://github.com/symfony/routing/tree/v6.1.7" }, "funding": [ { @@ -9705,26 +9933,25 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2022-10-18T13:12:43+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.2", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -9735,7 +9962,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -9745,7 +9972,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9772,7 +10002,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.1.1" }, "funding": [ { @@ -9788,38 +10018,37 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:29+00:00" + "time": "2022-05-30T19:18:58+00:00" }, { "name": "symfony/string", - "version": "v5.4.12", + "version": "v6.1.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058" + "reference": "823f143370880efcbdfa2dbca946b3358c4707e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/2fc515e512d721bf31ea76bd02fe23ada4640058", - "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058", + "url": "https://api.github.com/repos/symfony/string/zipball/823f143370880efcbdfa2dbca946b3358c4707e5", + "reference": "823f143370880efcbdfa2dbca946b3358c4707e5", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -9858,7 +10087,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.12" + "source": "https://github.com/symfony/string/tree/v6.1.7" }, "funding": [ { @@ -9874,52 +10103,51 @@ "type": "tidelift" } ], - "time": "2022-08-12T17:03:11+00:00" + "time": "2022-10-10T09:34:31+00:00" }, { "name": "symfony/translation", - "version": "v5.4.12", + "version": "v6.1.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "42ecc77eb4f229ce2df702a648ec93b8478d76ae" + "reference": "e6cd330e5a072518f88d65148f3f165541807494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/42ecc77eb4f229ce2df702a648ec93b8478d76ae", - "reference": "42ecc77eb4f229ce2df702a648ec93b8478d76ae", + "url": "https://api.github.com/repos/symfony/translation/zipball/e6cd330e5a072518f88d65148f3f165541807494", + "reference": "e6cd330e5a072518f88d65148f3f165541807494", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.3|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -9955,7 +10183,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.12" + "source": "https://github.com/symfony/translation/tree/v6.1.6" }, "funding": [ { @@ -9971,24 +10199,24 @@ "type": "tidelift" } ], - "time": "2022-08-02T15:52:22+00:00" + "time": "2022-10-07T08:04:03+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.2", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/606be0f48e05116baef052f7f3abdb345c8e02cc", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.1" }, "suggest": { "symfony/translation-implementation": "" @@ -9996,7 +10224,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -10006,7 +10234,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -10033,7 +10264,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/translation-contracts/tree/v3.1.1" }, "funding": [ { @@ -10049,36 +10280,109 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2022-06-27T17:24:16+00:00" }, { - "name": "symfony/var-dumper", - "version": "v5.4.11", + "name": "symfony/uid", + "version": "v6.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861" + "url": "https://github.com/symfony/uid.git", + "reference": "e03519f7b1ce1d3c0b74f751892bb41d549a2d98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8f306d7b8ef34fb3db3305be97ba8e088fb4861", - "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861", + "url": "https://api.github.com/repos/symfony/uid/zipball/e03519f7b1ce1d3c0b74f751892bb41d549a2d98", + "reference": "e03519f7b1ce1d3c0b74f751892bb41d549a2d98", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.1.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-09-09T09:34:27+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0f0adde127f24548e23cbde83bcaeadc491c551f", + "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" + "symfony/console": "<5.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -10122,7 +10426,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.11" + "source": "https://github.com/symfony/var-dumper/tree/v6.1.6" }, "funding": [ { @@ -10138,28 +10442,27 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2022-10-07T08:04:03+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.4.10", + "version": "v6.1.3", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340" + "reference": "b49350f45cebbba6e5286485264b912f2bcfc9ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/8fc03ee75eeece3d9be1ef47d26d79bea1afb340", - "reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b49350f45cebbba6e5286485264b912f2bcfc9ef", + "reference": "b49350f45cebbba6e5286485264b912f2bcfc9ef", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "require-dev": { - "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -10195,7 +10498,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.4.10" + "source": "https://github.com/symfony/var-exporter/tree/v6.1.3" }, "funding": [ { @@ -10211,7 +10514,7 @@ "type": "tidelift" } ], - "time": "2022-05-27T12:56:18+00:00" + "time": "2022-07-04T16:01:56+00:00" }, { "name": "tightenco/collect", @@ -10322,16 +10625,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.4.1", + "version": "v5.5.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", "shasum": "" }, "require": { @@ -10346,15 +10649,19 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" }, "suggest": { "ext-filter": "Required to use the boolean validator." }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "5.5-dev" } }, "autoload": { @@ -10386,7 +10693,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" }, "funding": [ { @@ -10398,20 +10705,20 @@ "type": "tidelift" } ], - "time": "2021-12-12T23:22:04+00:00" + "time": "2022-10-16T01:01:54+00:00" }, { "name": "voku/portable-ascii", - "version": "1.6.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" + "reference": "b56450eed252f6801410d810c8e1727224ae0743" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", "shasum": "" }, "require": { @@ -10448,7 +10755,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.6.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" }, "funding": [ { @@ -10472,7 +10779,7 @@ "type": "tidelift" } ], - "time": "2022-01-24T18:55:24+00:00" + "time": "2022-03-08T17:03:00+00:00" }, { "name": "webmozart/assert", @@ -10536,16 +10843,16 @@ "packages-dev": [ { "name": "brianium/paratest", - "version": "v6.6.4", + "version": "v6.6.5", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "4ce800dc32fd0292a4f05c00f347142dce1ecdda" + "reference": "31fd5d69b41725f383c9a083831eefcc7ecd9061" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/4ce800dc32fd0292a4f05c00f347142dce1ecdda", - "reference": "4ce800dc32fd0292a4f05c00f347142dce1ecdda", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/31fd5d69b41725f383c9a083831eefcc7ecd9061", + "reference": "31fd5d69b41725f383c9a083831eefcc7ecd9061", "shasum": "" }, "require": { @@ -10612,7 +10919,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.6.4" + "source": "https://github.com/paratestphp/paratest/tree/v6.6.5" }, "funding": [ { @@ -10624,7 +10931,7 @@ "type": "paypal" } ], - "time": "2022-09-13T10:47:01+00:00" + "time": "2022-10-28T12:22:26+00:00" }, { "name": "doctrine/instantiator", @@ -10696,161 +11003,18 @@ ], "time": "2022-03-03T08:28:38+00:00" }, - { - "name": "facade/flare-client-php", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/facade/flare-client-php.git", - "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", - "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", - "shasum": "" - }, - "require": { - "facade/ignition-contracts": "~1.0", - "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", - "php": "^7.1|^8.0", - "symfony/http-foundation": "^3.3|^4.1|^5.0", - "symfony/mime": "^3.4|^4.0|^5.1", - "symfony/var-dumper": "^3.4|^4.0|^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "phpunit/phpunit": "^7.5", - "spatie/phpunit-snapshot-assertions": "^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Facade\\FlareClient\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/facade/flare-client-php", - "keywords": [ - "exception", - "facade", - "flare", - "reporting" - ], - "support": { - "issues": "https://github.com/facade/flare-client-php/issues", - "source": "https://github.com/facade/flare-client-php/tree/1.10.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2022-08-09T11:23:57+00:00" - }, - { - "name": "facade/ignition", - "version": "2.17.6", - "source": { - "type": "git", - "url": "https://github.com/facade/ignition.git", - "reference": "6acd82e986a2ecee89e2e68adfc30a1936d1ab7c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/6acd82e986a2ecee89e2e68adfc30a1936d1ab7c", - "reference": "6acd82e986a2ecee89e2e68adfc30a1936d1ab7c", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "facade/flare-client-php": "^1.9.1", - "facade/ignition-contracts": "^1.0.2", - "illuminate/support": "^7.0|^8.0", - "monolog/monolog": "^2.0", - "php": "^7.2.5|^8.0", - "symfony/console": "^5.0", - "symfony/var-dumper": "^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "livewire/livewire": "^2.4", - "mockery/mockery": "^1.3", - "orchestra/testbench": "^5.0|^6.0", - "psalm/plugin-laravel": "^1.2" - }, - "suggest": { - "laravel/telescope": "^3.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Facade\\Ignition\\IgnitionServiceProvider" - ], - "aliases": { - "Flare": "Facade\\Ignition\\Facades\\Flare" - } - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Facade\\Ignition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://github.com/facade/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/facade/ignition/issues", - "source": "https://github.com/facade/ignition" - }, - "time": "2022-06-30T18:26:59+00:00" - }, { "name": "filp/whoops", - "version": "2.14.5", + "version": "2.14.6", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + "reference": "f7948baaa0330277c729714910336383286305da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da", + "reference": "f7948baaa0330277c729714910336383286305da", "shasum": "" }, "require": { @@ -10900,7 +11064,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.14.5" + "source": "https://github.com/filp/whoops/tree/2.14.6" }, "funding": [ { @@ -10908,7 +11072,7 @@ "type": "github" } ], - "time": "2022-01-07T12:00:00+00:00" + "time": "2022-11-02T16:23:29+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -11022,16 +11186,16 @@ }, { "name": "laravel/telescope", - "version": "v4.9.3", + "version": "v4.9.5", "source": { "type": "git", "url": "https://github.com/laravel/telescope.git", - "reference": "c41476272bc03e470d3be1d718885a947adb7c49" + "reference": "a316d6d15793b559c51ccb4b5dc59b223da500e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/telescope/zipball/c41476272bc03e470d3be1d718885a947adb7c49", - "reference": "c41476272bc03e470d3be1d718885a947adb7c49", + "url": "https://api.github.com/repos/laravel/telescope/zipball/a316d6d15793b559c51ccb4b5dc59b223da500e5", + "reference": "a316d6d15793b559c51ccb4b5dc59b223da500e5", "shasum": "" }, "require": { @@ -11084,9 +11248,9 @@ ], "support": { "issues": "https://github.com/laravel/telescope/issues", - "source": "https://github.com/laravel/telescope/tree/v4.9.3" + "source": "https://github.com/laravel/telescope/tree/v4.9.5" }, - "time": "2022-09-12T13:47:59+00:00" + "time": "2022-10-06T14:01:10+00:00" }, { "name": "mockery/mockery", @@ -11221,37 +11385,38 @@ }, { "name": "nunomaduro/collision", - "version": "v5.11.0", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" + "reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/0f6349c3ed5dd28467087b08fb59384bb458a22b", + "reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b", "shasum": "" }, "require": { - "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.14.3", - "php": "^7.3 || ^8.0", - "symfony/console": "^5.0" + "filp/whoops": "^2.14.5", + "php": "^8.0.0", + "symfony/console": "^6.0.2" }, "require-dev": { - "brianium/paratest": "^6.1", - "fideloper/proxy": "^4.4.1", - "fruitcake/laravel-cors": "^2.0.3", - "laravel/framework": "8.x-dev", - "nunomaduro/larastan": "^0.6.2", - "nunomaduro/mock-final-classes": "^1.0", - "orchestra/testbench": "^6.0", - "phpstan/phpstan": "^0.12.64", - "phpunit/phpunit": "^9.5.0" + "brianium/paratest": "^6.4.1", + "laravel/framework": "^9.26.1", + "laravel/pint": "^1.1.1", + "nunomaduro/larastan": "^1.0.3", + "nunomaduro/mock-final-classes": "^1.1.0", + "orchestra/testbench": "^7.7", + "phpunit/phpunit": "^9.5.23", + "spatie/ignition": "^1.4.1" }, "type": "library", "extra": { + "branch-alias": { + "dev-develop": "6.x-dev" + }, "laravel": { "providers": [ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" @@ -11304,7 +11469,7 @@ "type": "patreon" } ], - "time": "2022-01-10T16:22:52+00:00" + "time": "2022-09-29T12:29:49+00:00" }, { "name": "phar-io/manifest", @@ -11419,16 +11584,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.17", + "version": "9.2.18", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" + "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/12fddc491826940cf9b7e88ad9664cf51f0f6d0a", + "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a", "shasum": "" }, "require": { @@ -11484,7 +11649,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.18" }, "funding": [ { @@ -11492,7 +11657,7 @@ "type": "github" } ], - "time": "2022-08-30T12:24:04+00:00" + "time": "2022-10-27T13:35:33+00:00" }, { "name": "phpunit/php-file-iterator", @@ -11737,16 +11902,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.24", + "version": "9.5.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", "shasum": "" }, "require": { @@ -11768,14 +11933,14 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.1", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, "suggest": { @@ -11819,7 +11984,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26" }, "funding": [ { @@ -11829,9 +11994,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-08-30T07:42:16+00:00" + "time": "2022-10-28T06:00:21+00:00" }, { "name": "sebastian/cli-parser", @@ -12854,7 +13023,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^7.4|^8.0", + "php": "^8.0.2|^8.1", "ext-bcmath": "*", "ext-ctype": "*", "ext-curl": "*", diff --git a/config/federation.php b/config/federation.php index 91575abd9..4b6795687 100644 --- a/config/federation.php +++ b/config/federation.php @@ -16,7 +16,7 @@ return [ 'inbox' => env('AP_INBOX', true), 'sharedInbox' => env('AP_SHAREDINBOX', true), - 'remoteFollow' => env('AP_REMOTE_FOLLOW', false), + 'remoteFollow' => env('AP_REMOTE_FOLLOW', true), 'delivery' => [ 'timeout' => env('ACTIVITYPUB_DELIVERY_TIMEOUT', 30.0), diff --git a/config/filesystems.php b/config/filesystems.php index 592c237cd..cc0ce35a4 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -53,6 +53,7 @@ return [ 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', + 'throw' => true, ], 's3' => [ @@ -65,6 +66,7 @@ return [ 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => true, ], 'spaces' => [ @@ -79,6 +81,7 @@ return [ 'CacheControl' => 'max-age=31536000' ], 'root' => env('DO_SPACES_ROOT','/'), + 'throw' => true, ], 'backup' => [ diff --git a/config/instance.php b/config/instance.php index 3347e8f83..9a7c48e32 100644 --- a/config/instance.php +++ b/config/instance.php @@ -27,7 +27,7 @@ return [ ], 'network' => [ - 'cached' => env('PF_NETWORK_TIMELINE') ? env('INSTANCE_NETWORK_TIMELINE_CACHED', false) : false, + 'cached' => env('PF_NETWORK_TIMELINE') ? env('INSTANCE_NETWORK_TIMELINE_CACHED', true) : false, 'cache_dropoff' => env('INSTANCE_NETWORK_TIMELINE_CACHE_DROPOFF', 100), 'max_hours_old' => env('INSTANCE_NETWORK_TIMELINE_CACHE_MAX_HOUR_INGEST', 6) ] diff --git a/config/laravel-ffmpeg.php b/config/laravel-ffmpeg.php index 21315f199..44cd1b6eb 100644 --- a/config/laravel-ffmpeg.php +++ b/config/laravel-ffmpeg.php @@ -13,9 +13,9 @@ return [ 'timeout' => 3600, - 'enable_logging' => env('FFMPEG_LOG', false), - - 'set_command_and_error_output_on_exception' => false, + 'log_channel' => env('FFMPEG_LOG_CHANNEL', false), // set to false to completely disable logging 'temporary_files_root' => env('FFMPEG_TEMPORARY_FILES_ROOT', sys_get_temp_dir()), + + 'temporary_files_encrypted_hls' => env('FFMPEG_TEMPORARY_ENCRYPTED_HLS', env('FFMPEG_TEMPORARY_FILES_ROOT', sys_get_temp_dir())), ]; diff --git a/config/portfolio.php b/config/portfolio.php new file mode 100644 index 000000000..9b4cd8f4b --- /dev/null +++ b/config/portfolio.php @@ -0,0 +1,31 @@ + env('PORTFOLIO_DOMAIN', config('pixelfed.domain.app')), + + /* + |-------------------------------------------------------------------------- + | Portfolio Path + |-------------------------------------------------------------------------- + | + | This value is the path used for the portfolio feature. Only change + | the default value if you have a subdomain configured. If you want + | to use the root path of the subdomain, leave this value empty. + | + | WARNING: SETTING THIS VALUE WITHOUT A SUBDOMAIN COULD BREAK YOUR + | INSTANCE, SO ONLY CHANGE THIS IF YOU KNOW WHAT YOU'RE DOING. + | + */ + 'path' => env('PORTFOLIO_PATH', '/i/portfolio'), +]; diff --git a/database/migrations/2022_01_16_060052_create_portfolios_table.php b/database/migrations/2022_01_16_060052_create_portfolios_table.php new file mode 100644 index 000000000..73d639cc4 --- /dev/null +++ b/database/migrations/2022_01_16_060052_create_portfolios_table.php @@ -0,0 +1,45 @@ +id(); + $table->unsignedInteger('user_id')->nullable()->unique()->index(); + $table->bigInteger('profile_id')->unsigned()->unique()->index(); + $table->boolean('active')->nullable()->index(); + $table->boolean('show_captions')->default(true)->nullable(); + $table->boolean('show_license')->default(true)->nullable(); + $table->boolean('show_location')->default(true)->nullable(); + $table->boolean('show_timestamp')->default(true)->nullable(); + $table->boolean('show_link')->default(true)->nullable(); + $table->string('profile_source')->default('recent')->nullable(); + $table->boolean('show_avatar')->default(true)->nullable(); + $table->boolean('show_bio')->default(true)->nullable(); + $table->string('profile_layout')->default('grid')->nullable(); + $table->string('profile_container')->default('fixed')->nullable(); + $table->json('metadata')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('portfolios'); + } +} diff --git a/database/migrations/2022_10_07_045520_add_reblog_of_id_index_to_statuses_table.php b/database/migrations/2022_10_07_045520_add_reblog_of_id_index_to_statuses_table.php new file mode 100644 index 000000000..b577063fb --- /dev/null +++ b/database/migrations/2022_10_07_045520_add_reblog_of_id_index_to_statuses_table.php @@ -0,0 +1,34 @@ +index('in_reply_to_id'); + $table->index('reblog_of_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('statuses', function (Blueprint $table) { + $table->dropIndex('statuses_in_reply_to_id_index'); + $table->dropIndex('statuses_reblog_of_id_index'); + }); + } +} diff --git a/database/migrations/2022_10_07_055133_remove_old_compound_index_from_statuses_table.php b/database/migrations/2022_10_07_055133_remove_old_compound_index_from_statuses_table.php new file mode 100644 index 000000000..ae9b84bbc --- /dev/null +++ b/database/migrations/2022_10_07_055133_remove_old_compound_index_from_statuses_table.php @@ -0,0 +1,35 @@ +getDoctrineSchemaManager(); + if(array_key_exists('statuses_in_reply_to_id_reblog_of_id_index', $sc->listTableIndexes('statuses'))) { + $table->dropIndex('statuses_in_reply_to_id_reblog_of_id_index'); + } + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('statuses', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2022_10_07_072311_add_status_id_index_to_bookmarks_table.php b/database/migrations/2022_10_07_072311_add_status_id_index_to_bookmarks_table.php new file mode 100644 index 000000000..d04fd9333 --- /dev/null +++ b/database/migrations/2022_10_07_072311_add_status_id_index_to_bookmarks_table.php @@ -0,0 +1,31 @@ +index('status_id'); + $table->index('profile_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_10_07_072555_add_status_id_index_to_direct_messages_table.php b/database/migrations/2022_10_07_072555_add_status_id_index_to_direct_messages_table.php new file mode 100644 index 000000000..cc66bb77f --- /dev/null +++ b/database/migrations/2022_10_07_072555_add_status_id_index_to_direct_messages_table.php @@ -0,0 +1,31 @@ +index('status_id'); + $table->index('group_message'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_10_07_072859_add_status_id_index_to_mentions_table.php b/database/migrations/2022_10_07_072859_add_status_id_index_to_mentions_table.php new file mode 100644 index 000000000..91ad7a594 --- /dev/null +++ b/database/migrations/2022_10_07_072859_add_status_id_index_to_mentions_table.php @@ -0,0 +1,31 @@ +index('status_id'); + $table->index('profile_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_10_07_073337_add_indexes_to_reports_table.php b/database/migrations/2022_10_07_073337_add_indexes_to_reports_table.php new file mode 100644 index 000000000..cfe7d5a7e --- /dev/null +++ b/database/migrations/2022_10_07_073337_add_indexes_to_reports_table.php @@ -0,0 +1,33 @@ +index('user_id'); + $table->index('profile_id'); + $table->index('object_id'); + $table->index('object_type'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_10_07_110644_add_item_id_and_item_type_indexes_to_notifications_table.php b/database/migrations/2022_10_07_110644_add_item_id_and_item_type_indexes_to_notifications_table.php new file mode 100644 index 000000000..8eac8f2ad --- /dev/null +++ b/database/migrations/2022_10_07_110644_add_item_id_and_item_type_indexes_to_notifications_table.php @@ -0,0 +1,33 @@ +index('item_id'); + $table->index('item_type'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('notifications', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2022_10_09_043758_fix_cdn_url_in_avatars_table.php b/database/migrations/2022_10_09_043758_fix_cdn_url_in_avatars_table.php new file mode 100644 index 000000000..65b19496b --- /dev/null +++ b/database/migrations/2022_10_09_043758_fix_cdn_url_in_avatars_table.php @@ -0,0 +1,41 @@ +chunk(50, function($avatars) use($baseUrl) { + foreach($avatars as $avatar) { + if(substr($avatar->cdn_url, 0, 23) === '/storage/cache/avatars/') { + $avatar->cdn_url = $baseUrl . $avatar->cdn_url; + $avatar->save(); + } + Cache::forget('avatar:' . $avatar->profile_id); + AccountService::del($avatar->profile_id); + } + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + } +} diff --git a/database/migrations/2022_10_31_043257_add_actors_last_synced_at_to_instances_table.php b/database/migrations/2022_10_31_043257_add_actors_last_synced_at_to_instances_table.php new file mode 100644 index 000000000..3a0c309c6 --- /dev/null +++ b/database/migrations/2022_10_31_043257_add_actors_last_synced_at_to_instances_table.php @@ -0,0 +1,32 @@ +timestamp('actors_last_synced_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('instances', function (Blueprint $table) { + $table->dropColumn('actors_last_synced_at'); + }); + } +}; diff --git a/public/css/admin.css b/public/css/admin.css index d84571aad..2df11cc56 100644 Binary files a/public/css/admin.css and b/public/css/admin.css differ diff --git a/public/css/app.css b/public/css/app.css index 5fd41e309..73ede6144 100644 Binary files a/public/css/app.css and b/public/css/app.css differ diff --git a/public/css/appdark.css b/public/css/appdark.css index 8af92116e..c71ee30c2 100644 Binary files a/public/css/appdark.css and b/public/css/appdark.css differ diff --git a/public/css/landing.css b/public/css/landing.css index c72597a2f..0e0d64338 100644 Binary files a/public/css/landing.css and b/public/css/landing.css differ diff --git a/public/css/portfolio.css b/public/css/portfolio.css new file mode 100644 index 000000000..13ce29647 Binary files /dev/null and b/public/css/portfolio.css differ diff --git a/public/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2 b/public/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2 new file mode 100644 index 000000000..980853fec Binary files /dev/null and b/public/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2 differ diff --git a/public/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7W0Q5n-wU.woff2 b/public/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7W0Q5n-wU.woff2 new file mode 100644 index 000000000..edd834682 Binary files /dev/null and b/public/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7W0Q5n-wU.woff2 differ diff --git a/public/js/admin.js b/public/js/admin.js index a9626e9fc..c84e6e2fe 100644 Binary files a/public/js/admin.js and b/public/js/admin.js differ diff --git a/public/js/app.js b/public/js/app.js index 7194d17ed..d0a7b5aec 100644 Binary files a/public/js/app.js and b/public/js/app.js differ diff --git a/public/js/collections.js b/public/js/collections.js index 5ccf259cd..464137348 100644 Binary files a/public/js/collections.js and b/public/js/collections.js differ diff --git a/public/js/components.js b/public/js/components.js index 992e5e7c0..8da4bedb2 100644 Binary files a/public/js/components.js and b/public/js/components.js differ diff --git a/public/js/compose-17lx4qxke.js b/public/js/compose-17lx4qxke.js deleted file mode 100644 index ad3d45a7b..000000000 Binary files a/public/js/compose-17lx4qxke.js and /dev/null differ diff --git a/public/js/compose-classic.js b/public/js/compose-classic.js index 409cfaa27..dd01392e2 100644 Binary files a/public/js/compose-classic.js and b/public/js/compose-classic.js differ diff --git a/public/js/compose-llsjbikoc.js b/public/js/compose-llsjbikoc.js new file mode 100644 index 000000000..340ac4452 Binary files /dev/null and b/public/js/compose-llsjbikoc.js differ diff --git a/public/js/compose.js b/public/js/compose.js index 4b9ec6322..b9047f035 100644 Binary files a/public/js/compose.js and b/public/js/compose.js differ diff --git a/public/js/daci-17lx4qxke.js b/public/js/daci-17lx4qxke.js deleted file mode 100644 index 3cc6c601c..000000000 Binary files a/public/js/daci-17lx4qxke.js and /dev/null differ diff --git a/public/js/daci-llsjbikoc.js b/public/js/daci-llsjbikoc.js new file mode 100644 index 000000000..74724865c Binary files /dev/null and b/public/js/daci-llsjbikoc.js differ diff --git a/public/js/developers.js b/public/js/developers.js index aede36d98..1bf771c75 100644 Binary files a/public/js/developers.js and b/public/js/developers.js differ diff --git a/public/js/dffc-17lx4qxke.js b/public/js/dffc-17lx4qxke.js deleted file mode 100644 index d82b6e0f8..000000000 Binary files a/public/js/dffc-17lx4qxke.js and /dev/null differ diff --git a/public/js/dffc-llsjbikoc.js b/public/js/dffc-llsjbikoc.js new file mode 100644 index 000000000..8eef79771 Binary files /dev/null and b/public/js/dffc-llsjbikoc.js differ diff --git a/public/js/direct.js b/public/js/direct.js index 13dfac951..d2ca7a573 100644 Binary files a/public/js/direct.js and b/public/js/direct.js differ diff --git a/public/js/discover-17lx4qxke.js b/public/js/discover-17lx4qxke.js deleted file mode 100644 index fc4f353b4..000000000 Binary files a/public/js/discover-17lx4qxke.js and /dev/null differ diff --git a/public/js/discover-llsjbikoc.js b/public/js/discover-llsjbikoc.js new file mode 100644 index 000000000..14e6c186e Binary files /dev/null and b/public/js/discover-llsjbikoc.js differ diff --git a/public/js/dms-17lx4qxke.js b/public/js/dms-17lx4qxke.js deleted file mode 100644 index 487a40d15..000000000 Binary files a/public/js/dms-17lx4qxke.js and /dev/null differ diff --git a/public/js/dms-llsjbikoc.js b/public/js/dms-llsjbikoc.js new file mode 100644 index 000000000..791c817a8 Binary files /dev/null and b/public/js/dms-llsjbikoc.js differ diff --git a/public/js/dmsg-17lx4qxke.js b/public/js/dmsg-17lx4qxke.js deleted file mode 100644 index 3fca6b739..000000000 Binary files a/public/js/dmsg-17lx4qxke.js and /dev/null differ diff --git a/public/js/dmsg-llsjbikoc.js b/public/js/dmsg-llsjbikoc.js new file mode 100644 index 000000000..77028f7ba Binary files /dev/null and b/public/js/dmsg-llsjbikoc.js differ diff --git a/public/js/dmyh-17lx4qxke.js b/public/js/dmyh-17lx4qxke.js deleted file mode 100644 index 73e4fb432..000000000 Binary files a/public/js/dmyh-17lx4qxke.js and /dev/null differ diff --git a/public/js/dmyh-llsjbikoc.js b/public/js/dmyh-llsjbikoc.js new file mode 100644 index 000000000..8ca2e3876 Binary files /dev/null and b/public/js/dmyh-llsjbikoc.js differ diff --git a/public/js/dmym-17lx4qxke.js b/public/js/dmym-17lx4qxke.js deleted file mode 100644 index f1fc8fa12..000000000 Binary files a/public/js/dmym-17lx4qxke.js and /dev/null differ diff --git a/public/js/dmym-llsjbikoc.js b/public/js/dmym-llsjbikoc.js new file mode 100644 index 000000000..fbbe4759d Binary files /dev/null and b/public/js/dmym-llsjbikoc.js differ diff --git a/public/js/dsfc-17lx4qxke.js b/public/js/dsfc-17lx4qxke.js deleted file mode 100644 index b70e5fd61..000000000 Binary files a/public/js/dsfc-17lx4qxke.js and /dev/null differ diff --git a/public/js/dsfc-llsjbikoc.js b/public/js/dsfc-llsjbikoc.js new file mode 100644 index 000000000..8e36c12c0 Binary files /dev/null and b/public/js/dsfc-llsjbikoc.js differ diff --git a/public/js/dssc-17lx4qxke.js b/public/js/dssc-17lx4qxke.js deleted file mode 100644 index 752f543f7..000000000 Binary files a/public/js/dssc-17lx4qxke.js and /dev/null differ diff --git a/public/js/dssc-llsjbikoc.js b/public/js/dssc-llsjbikoc.js new file mode 100644 index 000000000..a5a52e591 Binary files /dev/null and b/public/js/dssc-llsjbikoc.js differ diff --git a/public/js/hashtag.js b/public/js/hashtag.js index 7413a3970..c6d5bd12d 100644 Binary files a/public/js/hashtag.js and b/public/js/hashtag.js differ diff --git a/public/js/home-17lx4qxke.js b/public/js/home-17lx4qxke.js deleted file mode 100644 index db7155436..000000000 Binary files a/public/js/home-17lx4qxke.js and /dev/null differ diff --git a/public/js/home-llsjbikoc.js b/public/js/home-llsjbikoc.js new file mode 100644 index 000000000..b91e781c0 Binary files /dev/null and b/public/js/home-llsjbikoc.js differ diff --git a/public/js/installer.js b/public/js/installer.js index 1c0b4aa2f..b9e55e2c5 100644 Binary files a/public/js/installer.js and b/public/js/installer.js differ diff --git a/public/js/live-player.js b/public/js/live-player.js index 72ef56dc4..9603d0273 100644 Binary files a/public/js/live-player.js and b/public/js/live-player.js differ diff --git a/public/js/manifest.js b/public/js/manifest.js index 8cffe5206..1e85ce338 100644 Binary files a/public/js/manifest.js and b/public/js/manifest.js differ diff --git a/public/js/notifications-17lx4qxke.js b/public/js/notifications-llsjbikoc.js similarity index 98% rename from public/js/notifications-17lx4qxke.js rename to public/js/notifications-llsjbikoc.js index 7976cdf3d..5c564bfe1 100644 Binary files a/public/js/notifications-17lx4qxke.js and b/public/js/notifications-llsjbikoc.js differ diff --git a/public/js/portfolio.js b/public/js/portfolio.js new file mode 100644 index 000000000..2d11cf4fa Binary files /dev/null and b/public/js/portfolio.js differ diff --git a/public/js/post-17lx4qxke.js b/public/js/post-17lx4qxke.js deleted file mode 100644 index d85b20a8e..000000000 Binary files a/public/js/post-17lx4qxke.js and /dev/null differ diff --git a/public/js/post-llsjbikoc.js b/public/js/post-llsjbikoc.js new file mode 100644 index 000000000..0a8433033 Binary files /dev/null and b/public/js/post-llsjbikoc.js differ diff --git a/public/js/profile-17lx4qxke.js b/public/js/profile-17lx4qxke.js deleted file mode 100644 index 8468a210b..000000000 Binary files a/public/js/profile-17lx4qxke.js and /dev/null differ diff --git a/public/js/profile-llsjbikoc.js b/public/js/profile-llsjbikoc.js new file mode 100644 index 000000000..88529d464 Binary files /dev/null and b/public/js/profile-llsjbikoc.js differ diff --git a/public/js/profile.js b/public/js/profile.js index c4c2b3f6a..d85b83e08 100644 Binary files a/public/js/profile.js and b/public/js/profile.js differ diff --git a/public/js/rempos.js b/public/js/rempos.js index d7dbc5885..861c30a0e 100644 Binary files a/public/js/rempos.js and b/public/js/rempos.js differ diff --git a/public/js/rempro.js b/public/js/rempro.js index a9ad342fa..e0b20925b 100644 Binary files a/public/js/rempro.js and b/public/js/rempro.js differ diff --git a/public/js/search.js b/public/js/search.js index c61cb5942..e394074ea 100644 Binary files a/public/js/search.js and b/public/js/search.js differ diff --git a/public/js/spa.js b/public/js/spa.js index 88f3980b7..209c9b0b8 100644 Binary files a/public/js/spa.js and b/public/js/spa.js differ diff --git a/public/js/status.js b/public/js/status.js index 41c470a5b..8fe4ad5f5 100644 Binary files a/public/js/status.js and b/public/js/status.js differ diff --git a/public/js/stories.js b/public/js/stories.js index e2ce13c76..a4b51342c 100644 Binary files a/public/js/stories.js and b/public/js/stories.js differ diff --git a/public/js/story-compose.js b/public/js/story-compose.js index 4635ba604..56c943f18 100644 Binary files a/public/js/story-compose.js and b/public/js/story-compose.js differ diff --git a/public/js/timeline.js b/public/js/timeline.js index 5a100a919..5174adeb8 100644 Binary files a/public/js/timeline.js and b/public/js/timeline.js differ diff --git a/public/js/vendor.js b/public/js/vendor.js index 85c49a842..d74dcb017 100644 Binary files a/public/js/vendor.js and b/public/js/vendor.js differ diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 35782727f..7cada2bac 100644 Binary files a/public/mix-manifest.json and b/public/mix-manifest.json differ diff --git a/resources/assets/js/components/PortfolioPost.vue b/resources/assets/js/components/PortfolioPost.vue new file mode 100644 index 000000000..595485e41 --- /dev/null +++ b/resources/assets/js/components/PortfolioPost.vue @@ -0,0 +1,122 @@ + + + diff --git a/resources/assets/js/components/PortfolioProfile.vue b/resources/assets/js/components/PortfolioProfile.vue new file mode 100644 index 000000000..ecd38ffe2 --- /dev/null +++ b/resources/assets/js/components/PortfolioProfile.vue @@ -0,0 +1,223 @@ + + + diff --git a/resources/assets/js/components/PortfolioSettings.vue b/resources/assets/js/components/PortfolioSettings.vue new file mode 100644 index 000000000..a9ede8bdc --- /dev/null +++ b/resources/assets/js/components/PortfolioSettings.vue @@ -0,0 +1,459 @@ + + + diff --git a/resources/assets/js/portfolio.js b/resources/assets/js/portfolio.js new file mode 100644 index 000000000..3d9980ae3 --- /dev/null +++ b/resources/assets/js/portfolio.js @@ -0,0 +1,19 @@ +import Vue from 'vue'; +window.Vue = Vue; +import BootstrapVue from 'bootstrap-vue' +Vue.use(BootstrapVue); + +Vue.component( + 'portfolio-post', + require('./components/PortfolioPost.vue').default +); + +Vue.component( + 'portfolio-profile', + require('./components/PortfolioProfile.vue').default +); + +Vue.component( + 'portfolio-settings', + require('./components/PortfolioSettings.vue').default +); diff --git a/resources/assets/sass/lib/inter.scss b/resources/assets/sass/lib/inter.scss new file mode 100644 index 000000000..f360b88ef --- /dev/null +++ b/resources/assets/sass/lib/inter.scss @@ -0,0 +1,54 @@ +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url(/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url(/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/fonts/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/resources/assets/sass/portfolio.scss b/resources/assets/sass/portfolio.scss new file mode 100644 index 000000000..073fe96e8 --- /dev/null +++ b/resources/assets/sass/portfolio.scss @@ -0,0 +1,173 @@ +@import "lib/inter"; + +body { + background: #000000; + font-family: 'Inter', sans-serif; + font-weight: 400 !important; + color: #d4d4d8; +} + +.text-primary { + color: #3B82F6 !important; +} + +.lead, +.font-weight-light { + font-weight: 400 !important; +} + +a { + color: #3B82F6; + text-decoration: none; +} + +.text-gradient-primary { + background: linear-gradient(to right, #6366f1, #8B5CF6, #D946EF); + -webkit-background-clip: text; + -webkit-text-fill-color: rgba(0,0,0,0); +} + +.logo-mark { + border-radius: 1rem; + font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif!important; + font-weight: 700 !important; + letter-spacing: -1.5px; + border: 6px solid #212529; + + font-size: 2.5rem; + line-height: 1.2; + + user-select: none; + color: #fff !important; + text-decoration: none !important; + background: #212529; + + @media (min-width: 768px) { + font-size: 4.5rem; + } + + &-sm { + font-size: 16px !important; + border-width: 3px; + border-radius: 10px; + letter-spacing: -1px; + background: #212529; + } +} + +.display-4.font-weight-bold { + letter-spacing: -0.3px; + text-transform: uppercase; + + @media (min-width: 768px) { + letter-spacing: -3px; + } + + a { + color: #d1d5db; + text-decoration: underline; + } +} + +.display-4 { + font-size: 1.5rem; + + @media (min-width: 768px) { + font-size: 3.5rem; + } +} + +.btn-primary { + background-color: #3B82F6; +} + +.card-columns { + -moz-column-count: 3; + column-count: 3; + -moz-column-gap: 0px; + column-gap: 0px; + orphans: 1; + widows: 1; +} + +.portfolio-settings { + .nav-pills { + .nav-item { + &.disabled { + span { + pointer-events: none; + color: #3f3f46; + } + } + } + + .nav-link { + font-size: 15px; + color: #9ca3af; + font-weight: 400; + + &.active { + color: #fff; + background-image: linear-gradient(to right, #4f46e5 0%, #2F80ED 51%, #4f46e5 100%); + background-size: 200% auto; + font-weight: 100; + transition: 0.5s; + + &:hover { + background-position: right center; + } + } + } + } + + .card { + &-header { + background-color: #000; + border: 1px solid var(--dark); + font-size: 14px; + font-weight: 400; + text-transform: uppercase; + color: var(--muted); + } + + .list-group-item { + background: transparent; + } + } + + .custom-select { + border-radius: 10px; + font-weight: 700; + padding-left: 20px; + color: #fff; + background: #000 url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat; + border-color: var(--dark); + } + + .selected-badge { + width: 26px; + height: 26px; + display: flex; + border-radius: 26px; + background-color: #0284c7; + justify-content: center; + align-items: center; + font-size: 14px; + font-weight: 700; + color: #fff; + border: 2px solid #fff; + } +} + +.slide-fade-enter-active { + transition: all .3s ease; +} + +.slide-fade-leave-active { + transition: all .3s cubic-bezier(1.0, 1.0); +} + +.slide-fade-enter, .slide-fade-leave-to { + transform: translateX(10px); + opacity: 0; +} diff --git a/resources/lang/cs/helpcenter.php b/resources/lang/cs/helpcenter.php index 29dbc5aec..70ff2d0f9 100644 --- a/resources/lang/cs/helpcenter.php +++ b/resources/lang/cs/helpcenter.php @@ -25,4 +25,4 @@ return [ 'taggingPeople' => 'Označování lidí' -] +]; diff --git a/resources/lang/me/web.php b/resources/lang/me/web.php deleted file mode 100644 index 3844f847a..000000000 --- a/resources/lang/me/web.php +++ /dev/null @@ -1,186 +0,0 @@ - [ - 'comment' => 'Comment', - 'commented' => 'Commented', - 'comments' => 'Comments', - 'like' => 'Like', - 'liked' => 'Liked', - 'likes' => 'Likes', - 'share' => 'Share', - 'shared' => 'Shared', - 'shares' => 'Shares', - 'unshare' => 'Unshare', - - 'cancel' => 'Cancel', - 'copyLink' => 'Copy Link', - 'delete' => 'Delete', - 'error' => 'Error', - 'errorMsg' => 'Something went wrong. Please try again later.', - 'oops' => 'Oops!', - 'other' => 'Other', - 'readMore' => 'Read more', - 'success' => 'Success', - - 'sensitive' => 'Sensitive', - 'sensitiveContent' => 'Sensitive Content', - 'sensitiveContentWarning' => 'This post may contain sensitive content', - ], - - 'site' => [ - 'terms' => 'Terms of Use', - 'privacy' => 'Privacy Policy', - ], - - 'navmenu' => [ - 'search' => 'Search', - 'admin' => 'Admin Dashboard', - - // Timelines - 'homeFeed' => 'Home Feed', - 'localFeed' => 'Local Feed', - 'globalFeed' => 'Global Feed', - - // Core features - 'discover' => 'Discover', - 'directMessages' => 'Direct Messages', - 'notifications' => 'Notifications', - 'groups' => 'Groups', - 'stories' => 'Stories', - - // Self links - 'profile' => 'Profile', - 'drive' => 'Drive', - 'settings' => 'Settings', - 'compose' => 'Create New', - 'logout' => 'Logout', - - // Nav footer - 'about' => 'About', - 'help' => 'Help', - 'language' => 'Language', - 'privacy' => 'Privacy', - 'terms' => 'Terms', - - // Temporary links - 'backToPreviousDesign' => 'Go back to previous design' - ], - - 'directMessages' => [ - 'inbox' => 'Inbox', - 'sent' => 'Sent', - 'requests' => 'Requests' - ], - - 'notifications' => [ - 'liked' => 'liked your', - 'commented' => 'commented on your', - 'reacted' => 'reacted to your', - 'shared' => 'shared your', - 'tagged' => 'tagged you in a', - - 'updatedA' => 'updated a', - 'sentA' => 'sent a', - - 'followed' => 'followed', - 'mentioned' => 'mentioned', - 'you' => 'you', - - 'yourApplication' => 'Your application to join', - 'applicationApproved' => 'was approved!', - 'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.', - - 'dm' => 'dm', - 'groupPost' => 'group post', - 'modlog' => 'modlog', - 'post' => 'post', - 'story' => 'story', - ], - - 'post' => [ - 'shareToFollowers' => 'Share to followers', - 'shareToOther' => 'Share to other', - 'noLikes' => 'No likes yet', - 'uploading' => 'Uploading', - ], - - 'profile' => [ - 'posts' => 'Posts', - 'followers' => 'Followers', - 'following' => 'Following', - 'admin' => 'Admin', - 'collections' => 'Collections', - 'follow' => 'Follow', - 'unfollow' => 'Unfollow', - 'editProfile' => 'Edit Profile', - 'followRequested' => 'Follow Requested', - 'joined' => 'Joined', - - 'emptyCollections' => 'We can\'t seem to find any collections', - 'emptyPosts' => 'We can\'t seem to find any posts', - ], - - 'menu' => [ - 'viewPost' => 'View Post', - 'viewProfile' => 'View Profile', - 'moderationTools' => 'Moderation Tools', - 'report' => 'Report', - 'archive' => 'Archive', - 'unarchive' => 'Unarchive', - 'embed' => 'Embed', - - 'selectOneOption' => 'Select one of the following options', - 'unlistFromTimelines' => 'Unlist from Timelines', - 'addCW' => 'Add Content Warning', - 'removeCW' => 'Remove Content Warning', - 'markAsSpammer' => 'Mark as Spammer', - 'markAsSpammerText' => 'Unlist + CW existing and future posts', - 'spam' => 'Spam', - 'sensitive' => 'Sensitive Content', - 'abusive' => 'Abusive or Harmful', - 'underageAccount' => 'Underage Account', - 'copyrightInfringement' => 'Copyright Infringement', - 'impersonation' => 'Impersonation', - 'scamOrFraud' => 'Scam or Fraud', - 'confirmReport' => 'Confirm Report', - 'confirmReportText' => 'Are you sure you want to report this post?', - 'reportSent' => 'Report Sent!', - 'reportSentText' => 'We have successfully received your report.', - 'reportSentError' => 'There was an issue reporting this post.', - - 'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?', - 'modCWSuccess' => 'Successfully added content warning', - 'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?', - 'modRemoveCWSuccess' => 'Successfully removed content warning', - 'modUnlistConfirm' => 'Are you sure you want to unlist this post?', - 'modUnlistSuccess' => 'Successfully unlisted post', - 'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.', - 'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer', - - 'toFollowers' => 'to Followers', - - 'showCaption' => 'Show Caption', - 'showLikes' => 'Show Likes', - 'compactMode' => 'Compact Mode', - 'embedConfirmText' => 'By using this embed, you agree to our', - - 'deletePostConfirm' => 'Are you sure you want to delete this post?', - 'archivePostConfirm' => 'Are you sure you want to archive this post?', - 'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?', - ], - - 'story' => [ - 'add' => 'Add Story' - ], - - 'timeline' => [ - 'peopleYouMayKnow' => 'People you may know' - ], - - 'hashtags' => [ - 'emptyFeed' => 'We can\'t seem to find any posts for this hashtag' - ], - -]; diff --git a/resources/views/admin/directory/home.blade.php b/resources/views/admin/directory/home.blade.php new file mode 100644 index 000000000..dcc5e050e --- /dev/null +++ b/resources/views/admin/directory/home.blade.php @@ -0,0 +1,12 @@ +@extends('admin.partial.template-full') + +@section('section') + + +@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/admin/partial/sidenav.blade.php b/resources/views/admin/partial/sidenav.blade.php index 31a2a8a05..a34d572d2 100644 --- a/resources/views/admin/partial/sidenav.blade.php +++ b/resources/views/admin/partial/sidenav.blade.php @@ -62,6 +62,13 @@