From 59667bd8b106c3da6c8e073c2ec4875bf6bf306d Mon Sep 17 00:00:00 2001 From: ildyria Date: Wed, 7 Sep 2022 20:30:07 +0200 Subject: [PATCH 01/29] Squash --- .phpstorm.meta.php | 2167 ++++++----- app/Actions/Album/Delete.php | 3 +- app/Actions/Albums/Tree.php | 2 +- .../Checks/BasicPermissionCheck.php | 38 +- .../Diagnostics/Checks/ImageOptCheck.php | 2 +- app/Actions/Diagnostics/Diagnostics.php | 2 - app/Actions/Import/Exec.php | 2 +- app/Actions/Import/FromUrl.php | 2 + app/Actions/Install/PermissionsChecker.php | 1 - app/Actions/Photo/Create.php | 1 - .../Strategies/AddVideoPartnerStrategy.php | 1 - app/Actions/Update/Apply.php | 1 + app/Actions/Update/Check.php | 1 + app/Actions/User/Notify.php | 2 +- app/Actions/WebAuth/Delete.php | 20 - .../WebAuth/GenerateAuthentication.php | 18 - app/Actions/WebAuth/GenerateRegistration.php | 22 - app/Actions/WebAuth/Lists.php | 21 - app/Actions/WebAuth/VerifyAuthentication.php | 95 - app/Actions/WebAuth/VerifyRegistration.php | 33 - app/Assets/Helpers.php | 2 +- ...tGroupedWithRandomSuffixNamingStrategy.php | 6 +- app/Console/Commands/FixPermissions.php | 8 +- app/Console/Commands/GenerateThumbs.php | 2 - app/Console/Commands/Ghostbuster.php | 4 +- app/Console/Commands/Npm.php | 1 + app/Console/Commands/Sync.php | 1 - app/Console/Commands/VideoData.php | 1 - app/DTO/DTO.php | 1 - app/DTO/LycheeGitInfo.php | 2 - app/Exceptions/FlySystemLycheeException.php | 19 + app/Factories/AlbumFactory.php | 1 + app/Factories/DiagnosticsChecksFactory.php | 1 - app/Factories/LangFactory.php | 1 - .../Administration/SettingsController.php | 2 +- .../Administration/WebAuthController.php | 96 - .../WebAuthn/WebAuthnLoginController.php | 51 + .../WebAuthn/WebAuthnManageController.php | 34 + .../WebAuthn/WebAuthnRegisterController.php | 48 + app/Http/Kernel.php | 2 +- app/Http/Livewire/Sidebar.php | 3 +- app/Http/Middleware/LocalStorageOnly.php | 8 +- app/Http/Requests/Album/GetAlbumRequest.php | 1 + app/Image/BinaryBlob.php | 5 +- app/Image/DownloadedFile.php | 1 + app/Image/FileDeleter.php | 6 +- app/Image/FlysystemFile.php | 30 +- app/Image/GdHandler.php | 7 +- app/Image/StreamStatFilter.php | 37 +- app/Metadata/DiskUsage.php | 6 +- app/Metadata/Extractor.php | 1 - app/Metadata/GitHubFunctions.php | 2 - app/ModelFunctions/LogFunctions.php | 5 +- app/Models/Album.php | 4 +- app/Models/BaseAlbumImpl.php | 12 +- app/Models/Configs.php | 1 - app/Models/Extensions/ConfigsHas.php | 6 +- .../HasBidirectionalRelationships.php | 1 - .../HasRandomIDAndLegacyTimeBasedID.php | 1 - .../Extensions/ThrowsConsistentExceptions.php | 1 - app/Models/Logs.php | 1 - app/Models/Photo.php | 4 +- app/Models/SizeVariant.php | 12 +- app/Models/SymLink.php | 4 +- app/Models/TagAlbum.php | 4 +- app/Models/User.php | 9 +- app/Pipelines/AssertionValidator.php | 55 + .../Pipes/CheckCredentialIsForUser.php | 86 + app/Providers/AuthServiceProvider.php | 2 +- app/Rules/LicenseRule.php | 2 +- composer.json | 30 +- composer.lock | 3227 ++++------------- config/app.php | 74 +- config/auth.php | 4 +- config/broadcasting.php | 15 +- config/cache.php | 14 +- config/cors.php | 32 + config/database.php | 2 +- config/filesystems.php | 42 +- config/logging.php | 16 + config/mail.php | 12 +- config/queue.php | 6 +- config/trustedproxy.php | 7 +- .../2019_10_06_152017_add_force_32bit_ids.php | 1 + ...020_06_04_104605_config_editor_enabled.php | 1 + ...11_104605_config_lossless_optimization.php | 1 + ...20_07_26_085322_config_swipe_tolerance.php | 1 + ...20_07_29_132731_config_local_takestamp.php | 1 + ...2020_10_15_104504_add_log_max_num_line.php | 1 + ...fig_password_url_param_for_smart_album.php | 1 + ...0_12_12_203831_create_web_authn_tables.php | 34 +- .../2020_12_18_162155_add_nsfw_album.php | 1 + .../2021_01_30_111736_display_takedate.php | 1 + .../2021_12_04_181200_refactor_models.php | 142 +- ..._09_130303_create_webauthn_credentials.php | 79 + {resources/lang => lang}/en/auth.php | 0 {resources/lang => lang}/en/pagination.php | 0 {resources/lang => lang}/en/passwords.php | 0 {resources/lang => lang}/en/validation.php | 0 phpstan.neon | 16 +- public/Lychee-front | 2 +- public/dist/Larapass.js | 295 -- public/dist/WebAuthn.js | 356 ++ public/dist/frame.js | 4 +- public/dist/main.js | 22 +- public/dist/page.css | 1 - public/dist/view.js | 6 +- resources/js/vendor/webauthn/webauthn.js | 356 ++ resources/views/includes/head.blade.php | 2 +- resources/views/layouts/app.blade.php | 2 +- routes/api.php | 23 +- scripts/gen_release.php | 2 - tests/Feature/CommandFixPermissionsTest.php | 4 +- tests/Feature/InstallTest.php | 1 + tests/Feature/PhotosAddNegativeTest.php | 2 +- tests/Feature/PhotosOperationsTest.php | 2 +- .../InteractsWithFilesystemPermissions.php | 1 - tests/Feature/WebAuthTest.php | 42 +- 118 files changed, 3372 insertions(+), 4546 deletions(-) delete mode 100644 app/Actions/WebAuth/Delete.php delete mode 100644 app/Actions/WebAuth/GenerateAuthentication.php delete mode 100644 app/Actions/WebAuth/GenerateRegistration.php delete mode 100644 app/Actions/WebAuth/Lists.php delete mode 100644 app/Actions/WebAuth/VerifyAuthentication.php delete mode 100644 app/Actions/WebAuth/VerifyRegistration.php create mode 100644 app/Exceptions/FlySystemLycheeException.php delete mode 100644 app/Http/Controllers/Administration/WebAuthController.php create mode 100644 app/Http/Controllers/WebAuthn/WebAuthnLoginController.php create mode 100644 app/Http/Controllers/WebAuthn/WebAuthnManageController.php create mode 100644 app/Http/Controllers/WebAuthn/WebAuthnRegisterController.php create mode 100644 app/Pipelines/AssertionValidator.php create mode 100644 app/Pipelines/Pipes/CheckCredentialIsForUser.php create mode 100644 config/cors.php create mode 100644 database/migrations/2022_07_09_130303_create_webauthn_credentials.php rename {resources/lang => lang}/en/auth.php (100%) rename {resources/lang => lang}/en/pagination.php (100%) rename {resources/lang => lang}/en/passwords.php (100%) rename {resources/lang => lang}/en/validation.php (100%) delete mode 100644 public/dist/Larapass.js create mode 100644 public/dist/WebAuthn.js create mode 100644 resources/js/vendor/webauthn/webauthn.js diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php index 95346c84e36..327161c6c84 100644 --- a/.phpstorm.meta.php +++ b/.phpstorm.meta.php @@ -16,8 +16,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -26,18 +24,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -49,38 +48,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -99,97 +167,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -201,7 +191,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -229,8 +218,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -239,18 +226,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -262,38 +250,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -312,97 +369,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -414,7 +393,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -442,8 +420,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -452,18 +428,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -475,38 +452,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -525,97 +571,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -627,7 +595,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -655,8 +622,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -665,18 +630,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -688,38 +654,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -738,97 +773,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -840,7 +797,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -868,8 +824,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -878,18 +832,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -901,38 +856,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -951,97 +975,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -1053,7 +999,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -1081,8 +1026,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -1091,18 +1034,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -1114,38 +1058,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -1164,97 +1177,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -1266,7 +1201,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -1294,8 +1228,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -1304,18 +1236,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -1327,38 +1260,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -1377,97 +1379,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -1479,7 +1403,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -1507,8 +1430,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -1517,18 +1438,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -1540,38 +1462,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -1590,97 +1581,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -1692,7 +1605,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -1720,8 +1632,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -1730,18 +1640,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -1753,38 +1664,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -1803,97 +1783,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -1905,7 +1807,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -1933,8 +1834,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -1943,18 +1842,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -1966,38 +1866,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -2016,97 +1985,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -2118,7 +2009,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, @@ -2146,8 +2036,6 @@ 'App\Actions\Update\Apply' => \App\Actions\Update\Apply::class, 'App\Actions\Update\Check' => \App\Actions\Update\Check::class, 'App\Assets\Helpers' => \App\Assets\Helpers::class, - 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, - 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'App\Contracts\SizeVariantFactory' => \App\Image\SizeVariantDefaultFactory::class, 'App\Contracts\SizeVariantNamingStrategy' => \App\Assets\SizeVariantGroupedWithRandomSuffixNamingStrategy::class, 'App\Factories\AlbumFactory' => \App\Factories\AlbumFactory::class, @@ -2156,18 +2044,19 @@ 'App\Metadata\LycheeVersion' => \App\Metadata\LycheeVersion::class, 'App\ModelFunctions\ConfigFunctions' => \App\ModelFunctions\ConfigFunctions::class, 'App\ModelFunctions\SymLinkFunctions' => \App\ModelFunctions\SymLinkFunctions::class, + 'App\Policies\AlbumQueryPolicy' => \App\Policies\AlbumQueryPolicy::class, + 'App\Policies\PhotoQueryPolicy' => \App\Policies\PhotoQueryPolicy::class, 'Barryvdh\Debugbar\LaravelDebugbar' => \Barryvdh\Debugbar\LaravelDebugbar::class, - 'Cose\Algorithm\Manager' => \Cose\Algorithm\Manager::class, - 'DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection' => \DarkGhostHunter\Larapass\WebAuthn\PublicKeyCredentialParametersCollection::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAssertValidator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestCreator::class, - 'DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator' => \DarkGhostHunter\Larapass\WebAuthn\WebAuthnAttestValidator::class, 'Helpers' => \App\Assets\Helpers::class, + 'Illuminate\Auth\Console\ClearResetsCommand' => \Illuminate\Auth\Console\ClearResetsCommand::class, 'Illuminate\Auth\Middleware\RequirePassword' => \Illuminate\Auth\Middleware\RequirePassword::class, 'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class, 'Illuminate\Bus\BatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\DatabaseBatchRepository' => \Illuminate\Bus\DatabaseBatchRepository::class, 'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class, + 'Illuminate\Cache\Console\CacheTableCommand' => \Illuminate\Cache\Console\CacheTableCommand::class, + 'Illuminate\Cache\Console\ClearCommand' => \Illuminate\Cache\Console\ClearCommand::class, + 'Illuminate\Cache\Console\ForgetCommand' => \Illuminate\Cache\Console\ForgetCommand::class, 'Illuminate\Cache\RateLimiter' => \Illuminate\Cache\RateLimiter::class, 'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class, 'Illuminate\Console\Scheduling\ScheduleClearCacheCommand' => \Illuminate\Console\Scheduling\ScheduleClearCacheCommand::class, @@ -2179,38 +2068,107 @@ 'Illuminate\Contracts\Auth\Access\Gate' => \Illuminate\Auth\Access\Gate::class, 'Illuminate\Contracts\Broadcasting\Broadcaster' => \Illuminate\Broadcasting\Broadcasters\LogBroadcaster::class, 'Illuminate\Contracts\Console\Kernel' => \App\Console\Kernel::class, - 'Illuminate\Contracts\Debug\ExceptionHandler' => \NunoMaduro\Collision\Adapters\Laravel\ExceptionHandler::class, + 'Illuminate\Contracts\Debug\ExceptionHandler' => \App\Exceptions\Handler::class, + 'Illuminate\Contracts\Foundation\MaintenanceMode' => \Illuminate\Foundation\FileBasedMaintenanceMode::class, 'Illuminate\Contracts\Http\Kernel' => \App\Http\Kernel::class, 'Illuminate\Contracts\Pipeline\Hub' => \Illuminate\Pipeline\Hub::class, 'Illuminate\Contracts\Queue\EntityResolver' => \Illuminate\Database\Eloquent\QueueEntityResolver::class, 'Illuminate\Contracts\Routing\ResponseFactory' => \Illuminate\Routing\ResponseFactory::class, 'Illuminate\Contracts\Validation\UncompromisedVerifier' => \Illuminate\Validation\NotPwnedVerifier::class, 'Illuminate\Database\Console\DbCommand' => \Illuminate\Database\Console\DbCommand::class, + 'Illuminate\Database\Console\DumpCommand' => \Illuminate\Database\Console\DumpCommand::class, + 'Illuminate\Database\Console\Factories\FactoryMakeCommand' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, + 'Illuminate\Database\Console\Migrations\FreshCommand' => \Illuminate\Database\Console\Migrations\FreshCommand::class, + 'Illuminate\Database\Console\Migrations\InstallCommand' => \Illuminate\Database\Console\Migrations\InstallCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateCommand' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, + 'Illuminate\Database\Console\Migrations\MigrateMakeCommand' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, + 'Illuminate\Database\Console\Migrations\RefreshCommand' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, + 'Illuminate\Database\Console\Migrations\ResetCommand' => \Illuminate\Database\Console\Migrations\ResetCommand::class, + 'Illuminate\Database\Console\Migrations\RollbackCommand' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, + 'Illuminate\Database\Console\Migrations\StatusCommand' => \Illuminate\Database\Console\Migrations\StatusCommand::class, + 'Illuminate\Database\Console\MonitorCommand' => \Illuminate\Database\Console\MonitorCommand::class, + 'Illuminate\Database\Console\PruneCommand' => \Illuminate\Database\Console\PruneCommand::class, + 'Illuminate\Database\Console\Seeds\SeedCommand' => \Illuminate\Database\Console\Seeds\SeedCommand::class, + 'Illuminate\Database\Console\Seeds\SeederMakeCommand' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, + 'Illuminate\Database\Console\ShowCommand' => \Illuminate\Database\Console\ShowCommand::class, + 'Illuminate\Database\Console\TableCommand' => \Illuminate\Database\Console\TableCommand::class, + 'Illuminate\Database\Console\WipeCommand' => \Illuminate\Database\Console\WipeCommand::class, + 'Illuminate\Foundation\Console\AboutCommand' => \Illuminate\Foundation\Console\AboutCommand::class, + 'Illuminate\Foundation\Console\CastMakeCommand' => \Illuminate\Foundation\Console\CastMakeCommand::class, + 'Illuminate\Foundation\Console\ChannelMakeCommand' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, + 'Illuminate\Foundation\Console\ClearCompiledCommand' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, + 'Illuminate\Foundation\Console\ComponentMakeCommand' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, + 'Illuminate\Foundation\Console\ConfigCacheCommand' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, + 'Illuminate\Foundation\Console\ConfigClearCommand' => \Illuminate\Foundation\Console\ConfigClearCommand::class, + 'Illuminate\Foundation\Console\ConsoleMakeCommand' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, + 'Illuminate\Foundation\Console\DocsCommand' => \Illuminate\Foundation\Console\DocsCommand::class, + 'Illuminate\Foundation\Console\DownCommand' => \Illuminate\Foundation\Console\DownCommand::class, + 'Illuminate\Foundation\Console\EnvironmentCommand' => \Illuminate\Foundation\Console\EnvironmentCommand::class, + 'Illuminate\Foundation\Console\EventCacheCommand' => \Illuminate\Foundation\Console\EventCacheCommand::class, + 'Illuminate\Foundation\Console\EventClearCommand' => \Illuminate\Foundation\Console\EventClearCommand::class, + 'Illuminate\Foundation\Console\EventGenerateCommand' => \Illuminate\Foundation\Console\EventGenerateCommand::class, + 'Illuminate\Foundation\Console\EventListCommand' => \Illuminate\Foundation\Console\EventListCommand::class, + 'Illuminate\Foundation\Console\EventMakeCommand' => \Illuminate\Foundation\Console\EventMakeCommand::class, + 'Illuminate\Foundation\Console\ExceptionMakeCommand' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, + 'Illuminate\Foundation\Console\JobMakeCommand' => \Illuminate\Foundation\Console\JobMakeCommand::class, + 'Illuminate\Foundation\Console\KeyGenerateCommand' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, + 'Illuminate\Foundation\Console\ListenerMakeCommand' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, + 'Illuminate\Foundation\Console\MailMakeCommand' => \Illuminate\Foundation\Console\MailMakeCommand::class, + 'Illuminate\Foundation\Console\ModelMakeCommand' => \Illuminate\Foundation\Console\ModelMakeCommand::class, + 'Illuminate\Foundation\Console\NotificationMakeCommand' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, + 'Illuminate\Foundation\Console\ObserverMakeCommand' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, + 'Illuminate\Foundation\Console\OptimizeClearCommand' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, + 'Illuminate\Foundation\Console\OptimizeCommand' => \Illuminate\Foundation\Console\OptimizeCommand::class, + 'Illuminate\Foundation\Console\PackageDiscoverCommand' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, + 'Illuminate\Foundation\Console\PolicyMakeCommand' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, + 'Illuminate\Foundation\Console\ProviderMakeCommand' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, + 'Illuminate\Foundation\Console\RequestMakeCommand' => \Illuminate\Foundation\Console\RequestMakeCommand::class, + 'Illuminate\Foundation\Console\ResourceMakeCommand' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, + 'Illuminate\Foundation\Console\RouteCacheCommand' => \Illuminate\Foundation\Console\RouteCacheCommand::class, + 'Illuminate\Foundation\Console\RouteClearCommand' => \Illuminate\Foundation\Console\RouteClearCommand::class, + 'Illuminate\Foundation\Console\RouteListCommand' => \Illuminate\Foundation\Console\RouteListCommand::class, + 'Illuminate\Foundation\Console\RuleMakeCommand' => \Illuminate\Foundation\Console\RuleMakeCommand::class, + 'Illuminate\Foundation\Console\ScopeMakeCommand' => \Illuminate\Foundation\Console\ScopeMakeCommand::class, + 'Illuminate\Foundation\Console\ServeCommand' => \Illuminate\Foundation\Console\ServeCommand::class, + 'Illuminate\Foundation\Console\ShowModelCommand' => \Illuminate\Foundation\Console\ShowModelCommand::class, + 'Illuminate\Foundation\Console\StorageLinkCommand' => \Illuminate\Foundation\Console\StorageLinkCommand::class, + 'Illuminate\Foundation\Console\StubPublishCommand' => \Illuminate\Foundation\Console\StubPublishCommand::class, + 'Illuminate\Foundation\Console\TestMakeCommand' => \Illuminate\Foundation\Console\TestMakeCommand::class, + 'Illuminate\Foundation\Console\UpCommand' => \Illuminate\Foundation\Console\UpCommand::class, + 'Illuminate\Foundation\Console\VendorPublishCommand' => \Illuminate\Foundation\Console\VendorPublishCommand::class, + 'Illuminate\Foundation\Console\ViewCacheCommand' => \Illuminate\Foundation\Console\ViewCacheCommand::class, + 'Illuminate\Foundation\Console\ViewClearCommand' => \Illuminate\Foundation\Console\ViewClearCommand::class, + 'Illuminate\Foundation\MaintenanceModeManager' => \Illuminate\Foundation\MaintenanceModeManager::class, 'Illuminate\Foundation\Mix' => \Illuminate\Foundation\Mix::class, 'Illuminate\Foundation\PackageManifest' => \Illuminate\Foundation\PackageManifest::class, + 'Illuminate\Foundation\Vite' => \Illuminate\Foundation\Vite::class, 'Illuminate\Mail\Markdown' => \Illuminate\Mail\Markdown::class, 'Illuminate\Notifications\ChannelManager' => \Illuminate\Notifications\ChannelManager::class, + 'Illuminate\Notifications\Console\NotificationTableCommand' => \Illuminate\Notifications\Console\NotificationTableCommand::class, + 'Illuminate\Queue\Console\BatchesTableCommand' => \Illuminate\Queue\Console\BatchesTableCommand::class, + 'Illuminate\Queue\Console\ClearCommand' => \Illuminate\Queue\Console\ClearCommand::class, + 'Illuminate\Queue\Console\FailedTableCommand' => \Illuminate\Queue\Console\FailedTableCommand::class, + 'Illuminate\Queue\Console\FlushFailedCommand' => \Illuminate\Queue\Console\FlushFailedCommand::class, + 'Illuminate\Queue\Console\ForgetFailedCommand' => \Illuminate\Queue\Console\ForgetFailedCommand::class, + 'Illuminate\Queue\Console\ListFailedCommand' => \Illuminate\Queue\Console\ListFailedCommand::class, + 'Illuminate\Queue\Console\ListenCommand' => \Illuminate\Queue\Console\ListenCommand::class, + 'Illuminate\Queue\Console\MonitorCommand' => \Illuminate\Queue\Console\MonitorCommand::class, + 'Illuminate\Queue\Console\PruneBatchesCommand' => \Illuminate\Queue\Console\PruneBatchesCommand::class, + 'Illuminate\Queue\Console\PruneFailedJobsCommand' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, + 'Illuminate\Queue\Console\RestartCommand' => \Illuminate\Queue\Console\RestartCommand::class, + 'Illuminate\Queue\Console\RetryBatchCommand' => \Illuminate\Queue\Console\RetryBatchCommand::class, + 'Illuminate\Queue\Console\RetryCommand' => \Illuminate\Queue\Console\RetryCommand::class, + 'Illuminate\Queue\Console\TableCommand' => \Illuminate\Queue\Console\TableCommand::class, + 'Illuminate\Queue\Console\WorkCommand' => \Illuminate\Queue\Console\WorkCommand::class, + 'Illuminate\Routing\Console\ControllerMakeCommand' => \Illuminate\Routing\Console\ControllerMakeCommand::class, + 'Illuminate\Routing\Console\MiddlewareMakeCommand' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, 'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class, + 'Illuminate\Session\Console\SessionTableCommand' => \Illuminate\Session\Console\SessionTableCommand::class, 'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class, 'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class, 'Livewire\LivewireComponentsFinder' => \Livewire\LivewireComponentsFinder::class, 'Livewire\LivewireManager' => \Livewire\LivewireManager::class, - 'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class, - 'Psr\Http\Message\ResponseInterface' => \Nyholm\Psr7\Response::class, - 'Psr\Http\Message\ServerRequestInterface' => \Nyholm\Psr7\ServerRequest::class, 'Spatie\ImageOptimizer\OptimizerChain' => \Spatie\ImageOptimizer\OptimizerChain::class, - 'Webauthn\AttestationStatement\AttestationObjectLoader' => \Webauthn\AttestationStatement\AttestationObjectLoader::class, - 'Webauthn\AttestationStatement\AttestationStatementSupportManager' => \Webauthn\AttestationStatement\AttestationStatementSupportManager::class, - 'Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs' => \Webauthn\AuthenticationExtensions\AuthenticationExtensionsClientInputs::class, - 'Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler' => \Webauthn\AuthenticationExtensions\ExtensionOutputCheckerHandler::class, - 'Webauthn\AuthenticatorAssertionResponseValidator' => \Webauthn\AuthenticatorAssertionResponseValidator::class, - 'Webauthn\AuthenticatorAttestationResponseValidator' => \Webauthn\AuthenticatorAttestationResponseValidator::class, - 'Webauthn\AuthenticatorSelectionCriteria' => \DarkGhostHunter\Larapass\WebAuthn\AuthenticatorSelectionCriteria::class, - 'Webauthn\Counter\CounterChecker' => \Webauthn\Counter\ThrowExceptionIfInvalid::class, - 'Webauthn\PublicKeyCredentialLoader' => \Webauthn\PublicKeyCredentialLoader::class, - 'Webauthn\PublicKeyCredentialRpEntity' => \Webauthn\PublicKeyCredentialRpEntity::class, - 'Webauthn\PublicKeyCredentialSourceRepository' => \DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential::class, - 'Webauthn\TokenBinding\TokenBindingHandler' => \Webauthn\TokenBinding\IgnoreTokenBindingHandler::class, 'auth' => \Illuminate\Auth\AuthManager::class, 'auth.driver' => \Illuminate\Auth\SessionGuard::class, 'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class, @@ -2229,97 +2187,19 @@ 'clockwork.request' => \Clockwork\Request\Request::class, 'clockwork.storage' => \Clockwork\Storage\FileStorage::class, 'clockwork.support' => \Clockwork\Support\Laravel\ClockworkSupport::class, - 'clockwork.swift' => \Clockwork\DataSource\SwiftDataSource::class, 'clockwork.views' => \Clockwork\DataSource\LaravelViewsDataSource::class, 'clockwork.xdebug' => \Clockwork\DataSource\XdebugDataSource::class, - 'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class, - 'command.cache.clear' => \Illuminate\Cache\Console\ClearCommand::class, - 'command.cache.forget' => \Illuminate\Cache\Console\ForgetCommand::class, - 'command.cache.table' => \Illuminate\Cache\Console\CacheTableCommand::class, - 'command.cast.make' => \Illuminate\Foundation\Console\CastMakeCommand::class, - 'command.channel.make' => \Illuminate\Foundation\Console\ChannelMakeCommand::class, - 'command.clear-compiled' => \Illuminate\Foundation\Console\ClearCompiledCommand::class, - 'command.component.make' => \Illuminate\Foundation\Console\ComponentMakeCommand::class, - 'command.config.cache' => \Illuminate\Foundation\Console\ConfigCacheCommand::class, - 'command.config.clear' => \Illuminate\Foundation\Console\ConfigClearCommand::class, - 'command.console.make' => \Illuminate\Foundation\Console\ConsoleMakeCommand::class, - 'command.controller.make' => \Illuminate\Routing\Console\ControllerMakeCommand::class, - 'command.db.prune' => \Illuminate\Database\Console\PruneCommand::class, - 'command.db.wipe' => \Illuminate\Database\Console\WipeCommand::class, 'command.debugbar.clear' => \Barryvdh\Debugbar\Console\ClearCommand::class, - 'command.down' => \Illuminate\Foundation\Console\DownCommand::class, - 'command.environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class, - 'command.event.cache' => \Illuminate\Foundation\Console\EventCacheCommand::class, - 'command.event.clear' => \Illuminate\Foundation\Console\EventClearCommand::class, - 'command.event.generate' => \Illuminate\Foundation\Console\EventGenerateCommand::class, - 'command.event.list' => \Illuminate\Foundation\Console\EventListCommand::class, - 'command.event.make' => \Illuminate\Foundation\Console\EventMakeCommand::class, - 'command.exception.make' => \Illuminate\Foundation\Console\ExceptionMakeCommand::class, - 'command.factory.make' => \Illuminate\Database\Console\Factories\FactoryMakeCommand::class, 'command.ide-helper.eloquent' => \Barryvdh\LaravelIdeHelper\Console\EloquentCommand::class, 'command.ide-helper.generate' => \Barryvdh\LaravelIdeHelper\Console\GeneratorCommand::class, 'command.ide-helper.meta' => \Barryvdh\LaravelIdeHelper\Console\MetaCommand::class, 'command.ide-helper.models' => \Barryvdh\LaravelIdeHelper\Console\ModelsCommand::class, - 'command.job.make' => \Illuminate\Foundation\Console\JobMakeCommand::class, - 'command.key.generate' => \Illuminate\Foundation\Console\KeyGenerateCommand::class, - 'command.listener.make' => \Illuminate\Foundation\Console\ListenerMakeCommand::class, - 'command.mail.make' => \Illuminate\Foundation\Console\MailMakeCommand::class, - 'command.middleware.make' => \Illuminate\Routing\Console\MiddlewareMakeCommand::class, - 'command.migrate' => \Illuminate\Database\Console\Migrations\MigrateCommand::class, - 'command.migrate.fresh' => \Illuminate\Database\Console\Migrations\FreshCommand::class, - 'command.migrate.install' => \Illuminate\Database\Console\Migrations\InstallCommand::class, - 'command.migrate.make' => \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class, - 'command.migrate.refresh' => \Illuminate\Database\Console\Migrations\RefreshCommand::class, - 'command.migrate.reset' => \Illuminate\Database\Console\Migrations\ResetCommand::class, - 'command.migrate.rollback' => \Illuminate\Database\Console\Migrations\RollbackCommand::class, - 'command.migrate.status' => \Illuminate\Database\Console\Migrations\StatusCommand::class, - 'command.model.make' => \Illuminate\Foundation\Console\ModelMakeCommand::class, - 'command.notification.make' => \Illuminate\Foundation\Console\NotificationMakeCommand::class, - 'command.notification.table' => \Illuminate\Notifications\Console\NotificationTableCommand::class, - 'command.observer.make' => \Illuminate\Foundation\Console\ObserverMakeCommand::class, - 'command.optimize' => \Illuminate\Foundation\Console\OptimizeCommand::class, - 'command.optimize.clear' => \Illuminate\Foundation\Console\OptimizeClearCommand::class, - 'command.package.discover' => \Illuminate\Foundation\Console\PackageDiscoverCommand::class, - 'command.policy.make' => \Illuminate\Foundation\Console\PolicyMakeCommand::class, - 'command.provider.make' => \Illuminate\Foundation\Console\ProviderMakeCommand::class, - 'command.queue.batches-table' => \Illuminate\Queue\Console\BatchesTableCommand::class, - 'command.queue.clear' => \Illuminate\Queue\Console\ClearCommand::class, - 'command.queue.failed' => \Illuminate\Queue\Console\ListFailedCommand::class, - 'command.queue.failed-table' => \Illuminate\Queue\Console\FailedTableCommand::class, - 'command.queue.flush' => \Illuminate\Queue\Console\FlushFailedCommand::class, - 'command.queue.forget' => \Illuminate\Queue\Console\ForgetFailedCommand::class, - 'command.queue.listen' => \Illuminate\Queue\Console\ListenCommand::class, - 'command.queue.monitor' => \Illuminate\Queue\Console\MonitorCommand::class, - 'command.queue.prune-batches' => \Illuminate\Queue\Console\PruneBatchesCommand::class, - 'command.queue.prune-failed-jobs' => \Illuminate\Queue\Console\PruneFailedJobsCommand::class, - 'command.queue.restart' => \Illuminate\Queue\Console\RestartCommand::class, - 'command.queue.retry' => \Illuminate\Queue\Console\RetryCommand::class, - 'command.queue.retry-batch' => \Illuminate\Queue\Console\RetryBatchCommand::class, - 'command.queue.table' => \Illuminate\Queue\Console\TableCommand::class, - 'command.queue.work' => \Illuminate\Queue\Console\WorkCommand::class, - 'command.request.make' => \Illuminate\Foundation\Console\RequestMakeCommand::class, - 'command.resource.make' => \Illuminate\Foundation\Console\ResourceMakeCommand::class, - 'command.route.cache' => \Illuminate\Foundation\Console\RouteCacheCommand::class, - 'command.route.clear' => \Illuminate\Foundation\Console\RouteClearCommand::class, - 'command.route.list' => \Illuminate\Foundation\Console\RouteListCommand::class, - 'command.rule.make' => \Illuminate\Foundation\Console\RuleMakeCommand::class, - 'command.schema.dump' => \Illuminate\Database\Console\DumpCommand::class, - 'command.seed' => \Illuminate\Database\Console\Seeds\SeedCommand::class, - 'command.seeder.make' => \Illuminate\Database\Console\Seeds\SeederMakeCommand::class, - 'command.serve' => \Illuminate\Foundation\Console\ServeCommand::class, - 'command.session.table' => \Illuminate\Session\Console\SessionTableCommand::class, - 'command.storage.link' => \Illuminate\Foundation\Console\StorageLinkCommand::class, - 'command.stub.publish' => \Illuminate\Foundation\Console\StubPublishCommand::class, - 'command.test.make' => \Illuminate\Foundation\Console\TestMakeCommand::class, - 'command.up' => \Illuminate\Foundation\Console\UpCommand::class, - 'command.vendor.publish' => \Illuminate\Foundation\Console\VendorPublishCommand::class, - 'command.view.cache' => \Illuminate\Foundation\Console\ViewCacheCommand::class, - 'command.view.clear' => \Illuminate\Foundation\Console\ViewClearCommand::class, 'composer' => \Illuminate\Support\Composer::class, 'cookie' => \Illuminate\Cookie\CookieJar::class, 'db' => \Illuminate\Database\DatabaseManager::class, - 'db.connection' => \Illuminate\Database\MySqlConnection::class, + 'db.connection' => \Illuminate\Database\SQLiteConnection::class, 'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class, + 'db.schema' => \Illuminate\Database\Schema\SQLiteBuilder::class, 'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class, 'encrypter' => \Illuminate\Encryption\Encrypter::class, 'events' => \Illuminate\Events\Dispatcher::class, @@ -2331,7 +2211,6 @@ 'image-optimizer' => \Spatie\ImageOptimizer\OptimizerChain::class, 'log' => \Illuminate\Log\LogManager::class, 'mail.manager' => \Illuminate\Mail\MailManager::class, - 'mailer' => \Illuminate\Mail\Mailer::class, 'memcached.connector' => \Illuminate\Cache\MemcachedConnector::class, 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, diff --git a/app/Actions/Album/Delete.php b/app/Actions/Album/Delete.php index 9bf634add63..c7dd44c41a1 100644 --- a/app/Actions/Album/Delete.php +++ b/app/Actions/Album/Delete.php @@ -20,7 +20,6 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Gate; use Safe\Exceptions\ArrayException; -use function Safe\usort; /** * Deletes the albums with the designated IDs **efficiently**. @@ -101,6 +100,8 @@ public function do(array $albumIDs): FileDeleter $recursiveAlbumIDs = array_merge($recursiveAlbumIDs, $subAlbums->pluck('id')->all()); $recursiveAlbumTracks = $recursiveAlbumTracks->merge($subAlbums->pluck('track_short_path')); } + // prune the null values + $recursiveAlbumTracks = $recursiveAlbumTracks->filter(fn ($val) => $val !== null); // Delete the photos from DB and obtain the list of files which need // to be deleted later diff --git a/app/Actions/Albums/Tree.php b/app/Actions/Albums/Tree.php index d09d3cf26a9..900eb7e782c 100644 --- a/app/Actions/Albums/Tree.php +++ b/app/Actions/Albums/Tree.php @@ -72,7 +72,7 @@ public function get(): AlbumTree // (sub)-tree and then `toTree` will return garbage as it does // not find connected paths within `$albums` or `$sharedAlbums`, // resp. - list($albums, $sharedAlbums) = $albums->partition(fn ($album) => $album->owner_id === $userID); + list($albums, $sharedAlbums) = $albums->partition(fn (Album $album) => $album->owner_id === $userID); } // We must explicitly pass `null` as the ID of the root album diff --git a/app/Actions/Diagnostics/Checks/BasicPermissionCheck.php b/app/Actions/Diagnostics/Checks/BasicPermissionCheck.php index dab1e5bfc3b..1af15d4acdd 100644 --- a/app/Actions/Diagnostics/Checks/BasicPermissionCheck.php +++ b/app/Actions/Diagnostics/Checks/BasicPermissionCheck.php @@ -11,10 +11,14 @@ use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Contracts\Filesystem\Filesystem; use Illuminate\Support\Facades\Storage; -use League\Flysystem\Adapter\Local as LocalFlysystem; +use League\Flysystem\Local\LocalFilesystemAdapter; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; -use function Safe\sprintf; +use Safe\Exceptions\FilesystemException; +use Safe\Exceptions\PosixException; +use function Safe\fileperms; +use function Safe\posix_getgrgid; +use function Safe\posix_getgroups; class BasicPermissionCheck implements DiagnosticCheckInterface { @@ -62,8 +66,9 @@ public function folders(array &$errors): void $this->numOwnerIssues = 0; $this->numPermissionIssues = 0; $this->numAccessIssues = 0; - $groupIDsOrFalse = posix_getgroups(); - if ($groupIDsOrFalse === false) { + try { + $groupIDsOrFalse = posix_getgroups(); + } catch (PosixException) { $errors[] = 'Error: Could not determine groups of process'; return; @@ -74,9 +79,11 @@ public function folders(array &$errors): void $this->groupIDs = array_unique($this->groupIDs); $this->groupNames = implode(', ', array_map( function (int $gid): string { - $groupNameOrFalse = posix_getgrgid($gid); - - return $groupNameOrFalse === false ? '' : $groupNameOrFalse['name']; + try { + return posix_getgrgid($gid)['name']; + } catch (PosixException) { + return ''; + } }, $this->groupIDs )); @@ -88,7 +95,7 @@ function (int $gid): string { ]; foreach ($disks as $disk) { - if ($disk->getDriver()->getAdapter() instanceof LocalFlysystem) { + if ($disk->getAdapter() instanceof LocalFilesystemAdapter) { $this->checkDirectoryPermissionsRecursively($disk->path(''), $errors); } } @@ -134,8 +141,9 @@ private function checkDirectoryPermissionsRecursively(string $path, array &$erro return; } - $actualPerm = fileperms($path); - if ($actualPerm === false) { + try { + $actualPerm = fileperms($path); + } catch (FilesystemException) { $errors[] = sprintf('Warning: Unable to determine permissions for %s' . PHP_EOL, $path); return; @@ -146,7 +154,15 @@ private function checkDirectoryPermissionsRecursively(string $path, array &$erro // interested in $actualPerm &= 07777; $owningGroupIdOrFalse = filegroup($path); - $owningGroupNameOrFalse = $owningGroupIdOrFalse === false ? false : posix_getgrgid($owningGroupIdOrFalse); + if ($owningGroupIdOrFalse !== false) { + try { + $owningGroupNameOrFalse = posix_getgrgid($owningGroupIdOrFalse); + } catch (PosixException) { + $owningGroupNameOrFalse = false; + } + } else { + $owningGroupNameOrFalse = false; + } $owningGroupName = $owningGroupNameOrFalse === false ? '' : $owningGroupNameOrFalse['name']; $expectedPerm = self::getConfiguredDirectoryPerm(); diff --git a/app/Actions/Diagnostics/Checks/ImageOptCheck.php b/app/Actions/Diagnostics/Checks/ImageOptCheck.php index 6cfbb76d5ca..4fb61bed2b6 100644 --- a/app/Actions/Diagnostics/Checks/ImageOptCheck.php +++ b/app/Actions/Diagnostics/Checks/ImageOptCheck.php @@ -5,7 +5,7 @@ use App\Contracts\DiagnosticCheckInterface; use App\Facades\Helpers; use App\Models\Configs; -use function Safe\substr; +use function Safe\exec; use Spatie\ImageOptimizer\Optimizers\Cwebp; use Spatie\ImageOptimizer\Optimizers\Gifsicle; use Spatie\ImageOptimizer\Optimizers\Jpegoptim; diff --git a/app/Actions/Diagnostics/Diagnostics.php b/app/Actions/Diagnostics/Diagnostics.php index ad0aa319f00..17b7c15ff0c 100644 --- a/app/Actions/Diagnostics/Diagnostics.php +++ b/app/Actions/Diagnostics/Diagnostics.php @@ -2,8 +2,6 @@ namespace App\Actions\Diagnostics; -use function Safe\sprintf; - abstract class Diagnostics { /** diff --git a/app/Actions/Import/Exec.php b/app/Actions/Import/Exec.php index 7c5d03844bb..4b1b8270277 100644 --- a/app/Actions/Import/Exec.php +++ b/app/Actions/Import/Exec.php @@ -28,10 +28,10 @@ use function Safe\file; use function Safe\glob; use function Safe\ini_get; +use function Safe\ob_flush; use function Safe\preg_match; use function Safe\realpath; use function Safe\set_time_limit; -use function Safe\substr; use Symfony\Component\HttpFoundation\StreamedResponse; class Exec diff --git a/app/Actions/Import/FromUrl.php b/app/Actions/Import/FromUrl.php index 00ff3eae27d..57eb42f1321 100644 --- a/app/Actions/Import/FromUrl.php +++ b/app/Actions/Import/FromUrl.php @@ -49,6 +49,8 @@ public function do(array $urls, ?Album $album): Collection // Silently do nothing, if `set_time_limit` is denied. } + // If the component parameter is specified, this function returns a string (or int in case of PHP_URL_PORT ) + /** @var string $path */ $path = parse_url($url, PHP_URL_PATH); $extension = '.' . pathinfo($path, PATHINFO_EXTENSION); diff --git a/app/Actions/Install/PermissionsChecker.php b/app/Actions/Install/PermissionsChecker.php index 98a10690ba7..ef899baafe1 100644 --- a/app/Actions/Install/PermissionsChecker.php +++ b/app/Actions/Install/PermissionsChecker.php @@ -3,7 +3,6 @@ namespace App\Actions\Install; use function Safe\preg_match; -use function Safe\substr; class PermissionsChecker { diff --git a/app/Actions/Photo/Create.php b/app/Actions/Photo/Create.php index e61e35c49e4..b38f644c962 100644 --- a/app/Actions/Photo/Create.php +++ b/app/Actions/Photo/Create.php @@ -28,7 +28,6 @@ use App\SmartAlbums\PublicAlbum; use App\SmartAlbums\StarredAlbum; use Illuminate\Database\Eloquent\ModelNotFoundException; -use function Safe\substr; class Create { diff --git a/app/Actions/Photo/Strategies/AddVideoPartnerStrategy.php b/app/Actions/Photo/Strategies/AddVideoPartnerStrategy.php index b53927232b2..7abb4ea67b0 100644 --- a/app/Actions/Photo/Strategies/AddVideoPartnerStrategy.php +++ b/app/Actions/Photo/Strategies/AddVideoPartnerStrategy.php @@ -14,7 +14,6 @@ use App\Image\NativeLocalFile; use App\Image\StreamStat; use App\Models\Photo; -use function Safe\substr; /** * Adds a video as partner to an existing photo. diff --git a/app/Actions/Update/Apply.php b/app/Actions/Update/Apply.php index b7ce6c2ce65..45d3b06d8c3 100644 --- a/app/Actions/Update/Apply.php +++ b/app/Actions/Update/Apply.php @@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Config; use function Safe\chdir; +use function Safe\exec; use function Safe\preg_replace; use function Safe\putenv; diff --git a/app/Actions/Update/Check.php b/app/Actions/Update/Check.php index b3626ca086c..402e7884bfd 100644 --- a/app/Actions/Update/Check.php +++ b/app/Actions/Update/Check.php @@ -10,6 +10,7 @@ use App\Metadata\GitRequest; use App\Metadata\LycheeVersion; use App\Models\Configs; +use function Safe\exec; class Check { diff --git a/app/Actions/User/Notify.php b/app/Actions/User/Notify.php index a1b2eeba197..839df23ed11 100644 --- a/app/Actions/User/Notify.php +++ b/app/Actions/User/Notify.php @@ -19,7 +19,7 @@ public function do(Photo $photo): void } // The admin is always informed - $users = new Collection([User::query()->find(0)]); + $users = new Collection(User::query()->find(0)); $album = $photo->album; if ($album !== null) { $users->push($album->shared_with); diff --git a/app/Actions/WebAuth/Delete.php b/app/Actions/WebAuth/Delete.php deleted file mode 100644 index 3767d55b773..00000000000 --- a/app/Actions/WebAuth/Delete.php +++ /dev/null @@ -1,20 +0,0 @@ -removeCredential($ids); - } -} diff --git a/app/Actions/WebAuth/GenerateAuthentication.php b/app/Actions/WebAuth/GenerateAuthentication.php deleted file mode 100644 index ef5e126e8ed..00000000000 --- a/app/Actions/WebAuth/GenerateAuthentication.php +++ /dev/null @@ -1,18 +0,0 @@ -where('id', $user_id)->first(); - - return WebAuthn::generateAssertion($user); - } -} diff --git a/app/Actions/WebAuth/GenerateRegistration.php b/app/Actions/WebAuth/GenerateRegistration.php deleted file mode 100644 index 7a79d534479..00000000000 --- a/app/Actions/WebAuth/GenerateRegistration.php +++ /dev/null @@ -1,22 +0,0 @@ -webAuthnCredentials->map(fn ($cred) => ['id' => $cred->id]); - } -} diff --git a/app/Actions/WebAuth/VerifyAuthentication.php b/app/Actions/WebAuth/VerifyAuthentication.php deleted file mode 100644 index fb5034f78c4..00000000000 --- a/app/Actions/WebAuth/VerifyAuthentication.php +++ /dev/null @@ -1,95 +0,0 @@ -getUserFromCredentials($credential); - if ($user !== null) { - Auth::login($user); - - return; - } - } - throw new UnauthenticatedException('Invalid login'); - } - - /** - * Return the user that should authenticate via WebAuthn. - * - * @param string[] $credentials - * - * @return User|null - * - * @throws InvalidUserIdException - */ - protected function getUserFromCredentials(array $credentials): ?User - { - // We will try to ask the User Provider for any user for the given credentials. - // If there is one, we will then return an array of credentials ID that the - // authenticator may use to sign the subsequent challenge by the server. - if ($this->isSignedChallenge($credentials)) { - $id = $this->binaryID($credentials['rawId']); - if ($id !== '') { - // PHPStan does not understand that `getFromCredentialId` returns `User`, but assumes that it returns `WebAuthnAuthenticatable` - // @phpstan-ignore-next-line - return User::getFromCredentialId($id); - } - } - - return null; - } - - /** - * Transforms the raw ID string into a binary string. - * - * @param string $rawId - * - * @return string - * - * @throws InvalidUserIdException - */ - protected function binaryID(string $rawId): string - { - try { - $result = base64_decode(strtr($rawId, '-_', '+/'), true); - } catch (\Throwable $e) { - throw new InvalidUserIdException($e); - } - - return $result; - } - - /** - * Check if the credentials are for a public key signed challenge. - * - * @param array $credentials - * - * @return bool - */ - protected function isSignedChallenge(array $credentials): bool - { - return isset($credentials['id'], $credentials['rawId'], $credentials['type'], $credentials['response']); - } -} diff --git a/app/Actions/WebAuth/VerifyRegistration.php b/app/Actions/WebAuth/VerifyRegistration.php deleted file mode 100644 index 4bc98db7a24..00000000000 --- a/app/Actions/WebAuth/VerifyRegistration.php +++ /dev/null @@ -1,33 +0,0 @@ -addCredential($credential); - } else { - throw new UnauthorizedException('Provided credentials are insufficient'); - } - } -} diff --git a/app/Assets/Helpers.php b/app/Assets/Helpers.php index 300e9d2acbe..92a4569df5d 100644 --- a/app/Assets/Helpers.php +++ b/app/Assets/Helpers.php @@ -8,7 +8,6 @@ use function Safe\getallheaders; use function Safe\ini_get; use function Safe\parse_url; -use function Safe\substr; use WhichBrowser\Parser as BrowserParser; class Helpers @@ -104,6 +103,7 @@ public function getExtension(string $filename, bool $isURI = false): string { // If $filename is an URI, get only the path component if ($isURI === true) { + /** @var string $filename -- this is true because PHP_URL_PATH is specified */ $filename = parse_url($filename, PHP_URL_PATH); } diff --git a/app/Assets/SizeVariantGroupedWithRandomSuffixNamingStrategy.php b/app/Assets/SizeVariantGroupedWithRandomSuffixNamingStrategy.php index bc168c3ef98..c89f016f8c7 100644 --- a/app/Assets/SizeVariantGroupedWithRandomSuffixNamingStrategy.php +++ b/app/Assets/SizeVariantGroupedWithRandomSuffixNamingStrategy.php @@ -156,11 +156,11 @@ protected static function createRndMiddlePath(): string $rndStr = bin2hex(random_bytes(self::NAME_LENGTH / 2)); return - \Safe\substr($rndStr, 0, 2) . + substr($rndStr, 0, 2) . DIRECTORY_SEPARATOR . - \Safe\substr($rndStr, 2, 2) . + substr($rndStr, 2, 2) . DIRECTORY_SEPARATOR . - \Safe\substr($rndStr, 4); + substr($rndStr, 4); } catch (\Exception $e) { throw new InsufficientEntropyException($e); } diff --git a/app/Console/Commands/FixPermissions.php b/app/Console/Commands/FixPermissions.php index ca34aa70623..3e62f4cd55d 100644 --- a/app/Console/Commands/FixPermissions.php +++ b/app/Console/Commands/FixPermissions.php @@ -6,8 +6,9 @@ use Illuminate\Console\Command; use Illuminate\Support\Facades\Storage; use function Safe\chmod; +use Safe\Exceptions\FilesystemException; use function Safe\fileowner; -use function Safe\sprintf; +use function Safe\fileperms; use Symfony\Component\Console\Exception\InvalidArgumentException; class FixPermissions extends Command @@ -88,8 +89,9 @@ public function handle(): int private function fixPermissionsRecursively(string $path): void { try { - $actualPerm = fileperms($path); - if ($actualPerm === false) { + try { + $actualPerm = fileperms($path); + } catch (FilesystemException) { $this->warn(sprintf('Unable to determine permissions for %s' . PHP_EOL, $path)); return; diff --git a/app/Console/Commands/GenerateThumbs.php b/app/Console/Commands/GenerateThumbs.php index 9402b1e5c98..53c9cec9e0a 100644 --- a/app/Console/Commands/GenerateThumbs.php +++ b/app/Console/Commands/GenerateThumbs.php @@ -10,10 +10,8 @@ use App\Models\SizeVariant; use Illuminate\Console\Command; use Illuminate\Database\Eloquent\Builder; -use function Safe\array_flip; use Safe\Exceptions\InfoException; use function Safe\set_time_limit; -use function Safe\sprintf; use Symfony\Component\Console\Exception\ExceptionInterface as SymfonyConsoleException; class GenerateThumbs extends Command diff --git a/app/Console/Commands/Ghostbuster.php b/app/Console/Commands/Ghostbuster.php index fe5031dbe7f..d6c052b84ef 100644 --- a/app/Console/Commands/Ghostbuster.php +++ b/app/Console/Commands/Ghostbuster.php @@ -11,7 +11,7 @@ use Illuminate\Console\Command; use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\Storage; -use League\Flysystem\Adapter\Local as LocalFlysystem; +use League\Flysystem\Local\LocalFilesystemAdapter; use function Safe\readlink; use function Safe\scandir; use function Safe\unlink; @@ -74,7 +74,7 @@ public function handle(): int $dryrun = filter_var($this->option('dryrun'), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) !== false; $uploadDisk = SizeVariantNamingStrategy::getImageDisk(); $symlinkDisk = Storage::disk(SymLink::DISK_NAME); - $isLocalDisk = $uploadDisk->getDriver()->getAdapter() instanceof LocalFlysystem; + $isLocalDisk = $uploadDisk->getAdapter() instanceof LocalFilesystemAdapter; $this->line(''); diff --git a/app/Console/Commands/Npm.php b/app/Console/Commands/Npm.php index f29860d10ab..ae2d5d06492 100644 --- a/app/Console/Commands/Npm.php +++ b/app/Console/Commands/Npm.php @@ -5,6 +5,7 @@ use App\Contracts\ExternalLycheeException; use App\Exceptions\UnexpectedException; use Illuminate\Console\Command; +use function Safe\exec; use Symfony\Component\Console\Exception\ExceptionInterface as SymfonyConsoleException; class Npm extends Command diff --git a/app/Console/Commands/Sync.php b/app/Console/Commands/Sync.php index 879b913b3c9..98bb7cfa083 100644 --- a/app/Console/Commands/Sync.php +++ b/app/Console/Commands/Sync.php @@ -12,7 +12,6 @@ use Exception; use Illuminate\Console\Command; use Illuminate\Support\Facades\Auth; -use function Safe\sprintf; use Symfony\Component\Console\Exception\ExceptionInterface as SymfonyConsoleException; class Sync extends Command diff --git a/app/Console/Commands/VideoData.php b/app/Console/Commands/VideoData.php index c66adf255ea..e68613fba98 100644 --- a/app/Console/Commands/VideoData.php +++ b/app/Console/Commands/VideoData.php @@ -14,7 +14,6 @@ use Illuminate\Database\Eloquent\Builder; use Safe\Exceptions\InfoException; use function Safe\set_time_limit; -use function Safe\sprintf; use Symfony\Component\Console\Exception\ExceptionInterface as SymfonyConsoleException; class VideoData extends Command diff --git a/app/DTO/DTO.php b/app/DTO/DTO.php index 020ffb8b9c5..8376ccc1b10 100644 --- a/app/DTO/DTO.php +++ b/app/DTO/DTO.php @@ -6,7 +6,6 @@ use Illuminate\Contracts\Support\Jsonable; use Illuminate\Database\Eloquent\JsonEncodingException; use function Safe\json_encode; -use function Safe\json_last_error_msg; /** * Base class for all Data Transfer Objects (DTO). diff --git a/app/DTO/LycheeGitInfo.php b/app/DTO/LycheeGitInfo.php index c5642e1729a..f0c94d6bf6e 100644 --- a/app/DTO/LycheeGitInfo.php +++ b/app/DTO/LycheeGitInfo.php @@ -2,8 +2,6 @@ namespace App\DTO; -use function Safe\sprintf; - class LycheeGitInfo extends DTO { public string $branch; diff --git a/app/Exceptions/FlySystemLycheeException.php b/app/Exceptions/FlySystemLycheeException.php new file mode 100644 index 00000000000..a98ab0692b8 --- /dev/null +++ b/app/Exceptions/FlySystemLycheeException.php @@ -0,0 +1,19 @@ +with(['photos', 'children', 'photos.size_variants']); } + /** @var Collection $result */ $result = new Collection(array_merge( $tagAlbumQuery->findMany($albumIDs)->all(), $albumQuery->findMany($albumIDs)->all(), diff --git a/app/Factories/DiagnosticsChecksFactory.php b/app/Factories/DiagnosticsChecksFactory.php index 014c4388559..df3ae8a57b7 100644 --- a/app/Factories/DiagnosticsChecksFactory.php +++ b/app/Factories/DiagnosticsChecksFactory.php @@ -4,7 +4,6 @@ use App\Contracts\DiagnosticCheckInterface; use function Safe\scandir; -use function Safe\substr; class DiagnosticsChecksFactory { diff --git a/app/Factories/LangFactory.php b/app/Factories/LangFactory.php index 5ea6c4f02ea..5383db01808 100644 --- a/app/Factories/LangFactory.php +++ b/app/Factories/LangFactory.php @@ -5,7 +5,6 @@ use App\Contracts\Language; use App\Locale\English; use function Safe\scandir; -use function Safe\substr; class LangFactory { diff --git a/app/Http/Controllers/Administration/SettingsController.php b/app/Http/Controllers/Administration/SettingsController.php index d7717901c64..2161f07a26f 100644 --- a/app/Http/Controllers/Administration/SettingsController.php +++ b/app/Http/Controllers/Administration/SettingsController.php @@ -387,7 +387,7 @@ public function setCSS(Request $request): void $request->validate(['css' => 'present|nullable|string']); $css = $request->get('css') ?? ''; - if (!Storage::disk('dist')->put('user.css', $css)) { + if (Storage::disk('dist')->put('user.css', $css) === false) { throw new InsufficientFilesystemPermissions('Could not save CSS'); } } diff --git a/app/Http/Controllers/Administration/WebAuthController.php b/app/Http/Controllers/Administration/WebAuthController.php deleted file mode 100644 index dc8119a589e..00000000000 --- a/app/Http/Controllers/Administration/WebAuthController.php +++ /dev/null @@ -1,96 +0,0 @@ -generateRegistration = $generateRegistration; - $this->verifyRegistration = $verifyRegistration; - $this->generateAuthentication = $generateAuthentication; - $this->verifyAuthentication = $verifyAuthentication; - $this->listDevices = $listDevices; - $this->deleteDevices = $deleteDevices; - } - - /** - * You can manage the user credentials thanks to the WebAuthnAuthenticatable contract directly from within the user instance. The most useful methods are:. - * - * hasCredential(): Checks if the user has a given Credential ID. - * addCredential(): Adds a new Credential Source. - * removeCredential(): Removes an existing Credential by its ID. - * flushCredentials(): Removes all credentials. You can exclude credentials by their id. - * enableCredential(): Includes an existing Credential ID from authentication. - * disableCredential(): Excludes an existing Credential ID from authentication. - * getFromCredentialId(): Returns the user using the given Credential ID, if any. - */ - public function generateRegistration(): PublicKeyCredentialCreationOptions - { - return $this->generateRegistration->do(); - } - - public function verifyRegistration(Request $request): void - { - $data = $request->validate($this->attestationRules()); - - $this->verifyRegistration->do($data); - } - - public function generateAuthentication(Request $request): PublicKeyCredentialRequestOptions - { - return $this->generateAuthentication->do($request['user_id']); - } - - /** - * @throws UnauthenticatedException - * @throws InvalidUserIdException - */ - public function verifyAuthentication(Request $request): void - { - $credential = $request->validate($this->assertionRules()); - - $this->verifyAuthentication->do($credential); - } - - public function list(): Collection - { - return $this->listDevices->do(); - } - - public function delete(Request $request): void - { - $id = $request->validate(['id' => 'required|string']); - $this->deleteDevices->do($id); - } -} diff --git a/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php b/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php new file mode 100644 index 00000000000..a0621ca4897 --- /dev/null +++ b/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php @@ -0,0 +1,51 @@ +toVerify($request->validate(['user_id' => 'sometimes|int'])['user_id']); + } + + /** + * Log the user in. + * + * @param AssertedRequest $request + * + * @return \Illuminate\Http\Response + */ + public function login(AssertedRequest $request, AssertionValidator $assertion): Response + { + $credential = $assertion + ->send(new AssertionValidation($request, User::findOrFail(0))) + ->thenReturn()->credential; + + if ($credential !== null) { + /** @var \Illuminate\Contracts\Auth\Authenticatable $authenticatable */ + $authenticatable = $credential->authenticatable; + Auth::login($authenticatable); + } + + return response()->noContent($credential !== null ? 204 : throw new UnauthenticatedException('Invalid credentials')); + } +} diff --git a/app/Http/Controllers/WebAuthn/WebAuthnManageController.php b/app/Http/Controllers/WebAuthn/WebAuthnManageController.php new file mode 100644 index 00000000000..4dfd9bec92c --- /dev/null +++ b/app/Http/Controllers/WebAuthn/WebAuthnManageController.php @@ -0,0 +1,34 @@ +webAuthnCredentials; + } + + /** + * @throws UnauthenticatedException + */ + public function delete(Request $request): void + { + $id = $request->validate(['id' => 'required|string']); + + /** @var \App\Models\User $user */ + $user = Auth::user() ?? throw new UnauthenticatedException(); + $user->webAuthnCredentials()->where('id', $id)->delete(); + } +} diff --git a/app/Http/Controllers/WebAuthn/WebAuthnRegisterController.php b/app/Http/Controllers/WebAuthn/WebAuthnRegisterController.php new file mode 100644 index 00000000000..61995ede561 --- /dev/null +++ b/app/Http/Controllers/WebAuthn/WebAuthnRegisterController.php @@ -0,0 +1,48 @@ +user = Auth::user() ?? throw new UnauthenticatedException(); + + return $request + ->fastRegistration() +// ->userless() +// ->allowDuplicates() + ->toCreate(); + } + + /** + * Registers a device for further WebAuthn authentication. + * + * @param \Laragear\WebAuthn\Http\Requests\AttestedRequest $request + * + * @return \Illuminate\Http\Response + */ + public function register(AttestedRequest $request): Response + { + $request->user = Auth::user() ?? throw new UnauthenticatedException(); + + $request->save(); + + return response()->noContent(); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index dc007a8526e..e36a16fe56b 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -17,7 +17,7 @@ class Kernel extends HttpKernel */ protected $middleware = [ \App\Http\Middleware\FixStatusCode::class, - \Fideloper\Proxy\TrustProxies::class, // required to get proper (i.e. original) client IP instead of proxy IP, if run behind a reverse proxy + \Illuminate\Http\Middleware\TrustProxies::class, \Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, diff --git a/app/Http/Livewire/Sidebar.php b/app/Http/Livewire/Sidebar.php index f133ac87896..2315195cf92 100644 --- a/app/Http/Livewire/Sidebar.php +++ b/app/Http/Livewire/Sidebar.php @@ -8,6 +8,7 @@ use App\Models\TagAlbum; use DebugBar\DebugBar; use Illuminate\Contracts\Container\BindingResolutionException; +use Illuminate\Support\Facades\Auth; use Livewire\Component; class Sidebar extends Component @@ -84,7 +85,7 @@ public function generateAlbumStructure() ['head' => Lang::get('ALBUM_PASSWORD'), 'value' => $_password], ]; if ($this->album->owner_id !== null) { - $share->content[] = ['head' => Lang::get('ALBUM_OWNER'), 'value' => $this->album->owner->name()]; + $share->content[] = ['head' => Lang::get('ALBUM_OWNER'), 'value' => $this->album->owner->name]; } $license = new \stdClass(); diff --git a/app/Http/Middleware/LocalStorageOnly.php b/app/Http/Middleware/LocalStorageOnly.php index d6367d56679..9fba527cef6 100644 --- a/app/Http/Middleware/LocalStorageOnly.php +++ b/app/Http/Middleware/LocalStorageOnly.php @@ -2,10 +2,10 @@ namespace App\Http\Middleware; -use App\Contracts\SizeVariantNamingStrategy; use App\Exceptions\RequestUnsupportedException; use Illuminate\Http\Request; -use League\Flysystem\Adapter\Local; +use Illuminate\Support\Facades\Storage; +use League\Flysystem\Local\LocalFilesystemAdapter; class LocalStorageOnly { @@ -21,8 +21,8 @@ class LocalStorageOnly */ public function handle(Request $request, \Closure $next) { - $storageAdapter = SizeVariantNamingStrategy::getImageDisk()->getDriver()->getAdapter(); - if (!($storageAdapter instanceof Local)) { + $storageAdapter = Storage::disk()->getAdapter(); + if (!($storageAdapter instanceof LocalFilesystemAdapter)) { throw new RequestUnsupportedException($request->url() . ' not implemented for non-local storage'); } diff --git a/app/Http/Requests/Album/GetAlbumRequest.php b/app/Http/Requests/Album/GetAlbumRequest.php index 25b83561729..aaf707cea24 100644 --- a/app/Http/Requests/Album/GetAlbumRequest.php +++ b/app/Http/Requests/Album/GetAlbumRequest.php @@ -7,6 +7,7 @@ use App\Http\Requests\BaseApiRequest; use App\Http\Requests\Contracts\HasAbstractAlbum; use App\Http\Requests\Traits\HasAbstractAlbumTrait; +use App\Models\Album; use App\Models\Extensions\BaseAlbum; use App\Policies\AlbumPolicy; use App\Rules\AlbumIDRule; diff --git a/app/Image/BinaryBlob.php b/app/Image/BinaryBlob.php index 7d16ef613e0..f7d36bc2201 100644 --- a/app/Image/BinaryBlob.php +++ b/app/Image/BinaryBlob.php @@ -3,6 +3,7 @@ namespace App\Image; use App\Exceptions\MediaFileOperationException; +use function Safe\stream_filter_append; /** * Class BinaryBlob. @@ -104,11 +105,11 @@ public function close(): void protected static function appendStatFilter($stream): StreamStat { $streamStat = new StreamStat(); - \Safe\stream_filter_append( + stream_filter_append( $stream, StreamStatFilter::REGISTERED_NAME, STREAM_FILTER_READ, - $streamStat + [$streamStat] ); return $streamStat; diff --git a/app/Image/DownloadedFile.php b/app/Image/DownloadedFile.php index 79553fa0836..2a605d7f43c 100644 --- a/app/Image/DownloadedFile.php +++ b/app/Image/DownloadedFile.php @@ -27,6 +27,7 @@ class DownloadedFile extends TemporaryLocalFile public function __construct(string $url) { try { + /** @var string $path : because we provide directly PHP_URL_PATH */ $path = parse_url($url, PHP_URL_PATH); $basename = pathinfo($path, PATHINFO_FILENAME); $extension = '.' . pathinfo($path, PATHINFO_EXTENSION); diff --git a/app/Image/FileDeleter.php b/app/Image/FileDeleter.php index 48b4e09428b..6fdf6cca3c0 100644 --- a/app/Image/FileDeleter.php +++ b/app/Image/FileDeleter.php @@ -7,7 +7,7 @@ use App\Models\SymLink; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Storage; -use League\Flysystem\Adapter\Local as LocalAdapter; +use League\Flysystem\Local\LocalFilesystemAdapter; use function Safe\unlink; /** @@ -104,11 +104,11 @@ public function do(): void // If the disk uses the local driver, we use low-level routines as // these are also able to handle symbolic links in case of doubt - $isLocalDisk = $defaultDisk->getDriver()->getAdapter() instanceof LocalAdapter; + $isLocalDisk = $defaultDisk->getAdapter() instanceof LocalFilesystemAdapter; if ($isLocalDisk) { foreach ($this->regularFilesOrSymbolicLinks as $fileOrLink) { try { - $absolutePath = $defaultDisk->path($fileOrLink); + $absolutePath = Storage::path($fileOrLink); // Note, `file_exist` returns `false` for existing, // but dead links. // So the first part takes care of deleting links no matter diff --git a/app/Image/FlysystemFile.php b/app/Image/FlysystemFile.php index 6bf80ffebd4..1030215bb10 100644 --- a/app/Image/FlysystemFile.php +++ b/app/Image/FlysystemFile.php @@ -2,18 +2,20 @@ namespace App\Image; +use App\Exceptions\FlySystemLycheeException; use App\Exceptions\MediaFileOperationException; use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Contracts\Filesystem\Filesystem; -use League\Flysystem\Adapter\Local as LocalAdapter; -use League\Flysystem\Exception as FlyException; +use Illuminate\Support\Facades\Storage; +use League\Flysystem\FilesystemException; +use League\Flysystem\Local\LocalFilesystemAdapter; use function Safe\fclose; /** * Class FlysystemFile. * * This class is based on legacy Flysystem v1 which ships with Laravel 8. - * Laravel 9 will migrate to Flysystem v2 which provides a different and + * Laravel 9 will migrate to Flysystem v3 which provides a different and * more consistent API. * * For v1, this documentation is relevant: @@ -43,9 +45,9 @@ public function read() $this->stream = $this->disk->readStream($this->relativePath); if (!is_resource($this->stream)) { $this->stream = null; - throw new FlyException('Filesystem::readStream failed'); + throw new FlySystemLycheeException('Filesystem::readStream failed'); } - } catch (\ErrorException|FlyException|FileNotFoundException $e) { + } catch (\ErrorException|FilesystemException|FileNotFoundException $e) { throw new MediaFileOperationException($e->getMessage(), $e); } @@ -60,16 +62,12 @@ public function write($stream, bool $collectStatistics = false): ?StreamStat try { $streamStat = $collectStatistics ? static::appendStatFilter($stream) : null; - // TODO: `put` must be replaced by `writeStream` when Flysystem 2 is shipped with Laravel 9 - // This will also be more consistent with `readStream`. - // Note that v1 also provides a method `writeStream`, but this is a misnomer. - // See: https://flysystem.thephpleague.com/v2/docs/what-is-new/ - if (!$this->disk->put($this->relativePath, $stream)) { - throw new FlyException('Filesystem::put failed'); + if (!$this->disk->writeStream($this->relativePath, $stream)) { + throw new FlySystemLycheeException('Filesystem::put failed'); } return $streamStat; - } catch (\ErrorException|FlyException $e) { + } catch (\ErrorException|FilesystemException $e) { throw new MediaFileOperationException($e->getMessage(), $e); } } @@ -81,9 +79,9 @@ public function delete(): void { try { if (!$this->disk->delete($this->relativePath)) { - throw new FlyException('Filesystem::delete failed'); + throw new FlySystemLycheeException('Filesystem::delete failed'); } - } catch (\ErrorException|FlyException $e) { + } catch (\ErrorException|FilesystemException $e) { throw new MediaFileOperationException($e->getMessage(), $e); } } @@ -166,7 +164,7 @@ public function getBasename(): string */ public function isLocalFile(): bool { - return $this->disk->getDriver()->getAdapter() instanceof LocalAdapter; + return $this->disk->getAdapter() instanceof LocalFilesystemAdapter; } /** @@ -178,6 +176,6 @@ public function toLocalFile(): NativeLocalFile throw new MediaFileOperationException('file is not hosted locally'); } - return new NativeLocalFile($this->disk->path($this->relativePath)); + return new NativeLocalFile(Storage::path($this->relativePath)); } } diff --git a/app/Image/GdHandler.php b/app/Image/GdHandler.php index 8c69a49049f..7061d50a960 100644 --- a/app/Image/GdHandler.php +++ b/app/Image/GdHandler.php @@ -11,6 +11,7 @@ use Safe\Exceptions\ImageException; use function Safe\imagecopyresampled; use function Safe\imagecopyresized; +use function Safe\imagecreatefromstring; use function Safe\imagecreatetruecolor; use function Safe\imagecrop; use function Safe\imageflip; @@ -151,7 +152,6 @@ public function load(MediaFile $file): void // Determine the type of image, so that we can later save the // image using the same type - // TODO: Replace `imagecreatefromstring` by `\Safe\imagecreatefromstring` after https://github.com/thecodingmachine/safe/issues/352 has been resolved error_clear_last(); $gdImgStat = getimagesizefromstring($imgBinary); if ($gdImgStat === false) { @@ -166,11 +166,8 @@ public function load(MediaFile $file): void // Load image error_clear_last(); - // TODO: Replace `imagecreatefromstring` by `\Safe\imagecreatefromstring` after https://github.com/thecodingmachine/safe/issues/352 has been resolved + /** @var \GdImage $img */ $img = imagecreatefromstring($imgBinary); - if ($img === false) { - throw ImageException::createFromPhpError(); - } $this->gdImage = $img; // Get EXIF data to determine whether rotation is required diff --git a/app/Image/StreamStatFilter.php b/app/Image/StreamStatFilter.php index af6d5a02687..b06e1666d4f 100644 --- a/app/Image/StreamStatFilter.php +++ b/app/Image/StreamStatFilter.php @@ -26,8 +26,10 @@ public function filter($in, $out, &$consumed, bool $closing): int { while ($bucket = stream_bucket_make_writeable($in)) { $consumed += $bucket->datalen; - if ($this->params instanceof StreamStat) { - $this->params->bytes += $bucket->datalen; + + $streamStat = $this->getStreamStats(); + if ($streamStat !== null) { + $streamStat->bytes += $bucket->datalen; \hash_update($this->hashContext, $bucket->data); } stream_bucket_append($out, $bucket); @@ -45,8 +47,9 @@ public function filter($in, $out, &$consumed, bool $closing): int */ public function onClose(): void { - if ($this->params instanceof StreamStat) { - $this->params->checksum = \hash_final($this->hashContext); + $streamStat = $this->getStreamStats(); + if ($streamStat !== null) { + $streamStat->checksum = \hash_final($this->hashContext); } parent::onClose(); } @@ -60,11 +63,33 @@ public function onClose(): void */ public function onCreate(): bool { - if ($this->params instanceof StreamStat) { - $this->params->bytes = 0; + $streamStat = $this->getStreamStats(); + if ($streamStat !== null) { + $streamStat->bytes = 0; $this->hashContext = \hash_init(self::HASH_ALGO_NAME); } return parent::onCreate(); } + + /** + * Retrieve StreamStat. + * + * @return StreamStat|null + */ + private function getStreamStats(): StreamStat|null + { + if ($this->params instanceof StreamStat) { + return $this->params; + } + if (is_array($this->params)) { + for ($i = 0; $i < count($this->params); $i++) { + if ($this->params[$i] instanceof StreamStat) { + return $this->params[$i]; + } + } + } + + return null; + } } diff --git a/app/Metadata/DiskUsage.php b/app/Metadata/DiskUsage.php index 64b29c068df..5aa15795bc7 100644 --- a/app/Metadata/DiskUsage.php +++ b/app/Metadata/DiskUsage.php @@ -2,11 +2,11 @@ namespace App\Metadata; +use App\Facades\Helpers; use function Safe\disk_free_space; use function Safe\disk_total_space; +use function Safe\exec; use function Safe\filesize; -use function Safe\sprintf; -use function Safe\substr; class DiskUsage { @@ -56,7 +56,7 @@ public function getTotalSize(string $dir): int if (is_dir($dir) === true) { // If on a Unix Host (Linux, Mac OS) - if (!$this->is_win()) { + if (!$this->is_win() && Helpers::isExecAvailable()) { $command = "ls -ltrR {$dir} |awk '{print $5}'|awk 'BEGIN{sum=0} {sum=sum+$1} END {print sum}' 2>&1"; exec($command, $output); $size = $output[0] ?? 0; diff --git a/app/Metadata/Extractor.php b/app/Metadata/Extractor.php index 97830da93dd..070368eee6c 100644 --- a/app/Metadata/Extractor.php +++ b/app/Metadata/Extractor.php @@ -16,7 +16,6 @@ use PHPExif\Exif; use PHPExif\Reader\Reader; use Safe\Exceptions\StringsException; -use function Safe\substr; /** * Collects normalized EXIF info about an image/video. diff --git a/app/Metadata/GitHubFunctions.php b/app/Metadata/GitHubFunctions.php index dcd3f5dad7c..8bcd1de22ce 100644 --- a/app/Metadata/GitHubFunctions.php +++ b/app/Metadata/GitHubFunctions.php @@ -9,8 +9,6 @@ use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Support\Facades\Config; use function Safe\file_get_contents; -use function Safe\sprintf; -use function Safe\substr; class GitHubFunctions { diff --git a/app/ModelFunctions/LogFunctions.php b/app/ModelFunctions/LogFunctions.php index 65950eef6c8..f2150ebc342 100644 --- a/app/ModelFunctions/LogFunctions.php +++ b/app/ModelFunctions/LogFunctions.php @@ -4,6 +4,7 @@ use App\Models\Logs; use Psr\Log\AbstractLogger; +use Stringable; // Class for FFMpeg to convert files to mov format class LogFunctions extends AbstractLogger @@ -37,7 +38,7 @@ private function interpolate(string $message, array $context = []): string /** * Implements log so that AbstractLogger works. */ - public function log($loglevel, $message, $context = []) + public function log($log, Stringable|string $message, array $context = []): void { $dbt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3); // debug_backtrace return the backtrace of all the function calls @@ -52,7 +53,7 @@ public function log($loglevel, $message, $context = []) } $log = Logs::create([ - 'type' => $loglevel, + 'type' => $log, 'function' => $fun, 'line' => $line, 'text' => $text, diff --git a/app/Models/Album.php b/app/Models/Album.php index bef8d9e7884..c1358b557c6 100644 --- a/app/Models/Album.php +++ b/app/Models/Album.php @@ -76,8 +76,8 @@ class Album extends BaseAlbum implements Node ]; /** - * @var string[] The list of attributes which exist as columns of the DB - * relation but shall not be serialized to JSON + * @var array The list of attributes which exist as columns of the DB + * relation but shall not be serialized to JSON */ protected $hidden = [ 'base_class', // don't serialize base class as a relation, the attributes of the base class are flatly merged into the JSON result diff --git a/app/Models/BaseAlbumImpl.php b/app/Models/BaseAlbumImpl.php index a61f40575be..945954b61d3 100644 --- a/app/Models/BaseAlbumImpl.php +++ b/app/Models/BaseAlbumImpl.php @@ -170,8 +170,8 @@ class BaseAlbumImpl extends Model implements HasRandomID ]; /** - * @var string[] The list of attributes which exist as columns of the DB - * relation but shall not be serialized to JSON + * @var array The list of attributes which exist as columns of the DB + * relation but shall not be serialized to JSON */ protected $hidden = [ HasRandomID::LEGACY_ID_NAME, @@ -183,9 +183,9 @@ class BaseAlbumImpl extends Model implements HasRandomID ]; /** - * @var string[] The list of "virtual" attributes which do not exist as - * columns of the DB relation but which shall be appended to - * JSON from accessors + * @var array The list of "virtual" attributes which do not exist as + * columns of the DB relation but which shall be appended to + * JSON from accessors */ protected $appends = [ 'has_password', @@ -275,7 +275,7 @@ public function toArray(): array { $result = parent::toArray(); if (Auth::check()) { - $result['owner_name'] = $this->owner->name(); + $result['owner_name'] = $this->owner->name; } return $result; diff --git a/app/Models/Configs.php b/app/Models/Configs.php index fec1143679c..b4d0a8d0b4a 100644 --- a/app/Models/Configs.php +++ b/app/Models/Configs.php @@ -14,7 +14,6 @@ use App\Models\Extensions\UseFixedQueryBuilder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\ModelNotFoundException; -use function Safe\sprintf; /** * App\Configs. diff --git a/app/Models/Extensions/ConfigsHas.php b/app/Models/Extensions/ConfigsHas.php index 2f47b4b842a..81d26ff4b8b 100644 --- a/app/Models/Extensions/ConfigsHas.php +++ b/app/Models/Extensions/ConfigsHas.php @@ -6,6 +6,8 @@ use App\Exceptions\Handler; use App\Exceptions\Internal\InvalidConfigOption; use App\Exceptions\Internal\QueryBuilderException; +use App\Facades\Helpers; +use function Safe\exec; trait ConfigsHas { @@ -32,7 +34,7 @@ public static function hasExiftool(): bool $has_exiftool = self::getValueAsInt('has_exiftool'); // value not yet set -> let's see if exiftool is available - if ($has_exiftool === 2) { + if ($has_exiftool === 2 && Helpers::isExecAvailable()) { try { $cmd_output = exec('command -v exiftool'); } catch (\Exception $e) { @@ -65,7 +67,7 @@ public static function hasFFmpeg(): bool $has_ffmpeg = self::getValueAsInt('has_ffmpeg'); // value not yet set -> let's see if ffmpeg is available - if ($has_ffmpeg === 2) { + if ($has_ffmpeg === 2 && Helpers::isExecAvailable()) { try { $cmd_output = exec('command -v ffmpeg'); } catch (\Exception $e) { diff --git a/app/Models/Extensions/HasBidirectionalRelationships.php b/app/Models/Extensions/HasBidirectionalRelationships.php index 9fee21effb0..f903b877e54 100644 --- a/app/Models/Extensions/HasBidirectionalRelationships.php +++ b/app/Models/Extensions/HasBidirectionalRelationships.php @@ -9,7 +9,6 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Support\Str; -use function Safe\sprintf; trait HasBidirectionalRelationships { diff --git a/app/Models/Extensions/HasRandomIDAndLegacyTimeBasedID.php b/app/Models/Extensions/HasRandomIDAndLegacyTimeBasedID.php index 87834d82c11..b42364a87f2 100644 --- a/app/Models/Extensions/HasRandomIDAndLegacyTimeBasedID.php +++ b/app/Models/Extensions/HasRandomIDAndLegacyTimeBasedID.php @@ -11,7 +11,6 @@ use Illuminate\Database\Eloquent\InvalidCastException; use Illuminate\Database\Eloquent\JsonEncodingException; use Illuminate\Database\QueryException; -use function Safe\sprintf; /** * Trait HasTimeBasedID. diff --git a/app/Models/Extensions/ThrowsConsistentExceptions.php b/app/Models/Extensions/ThrowsConsistentExceptions.php index 42b49e14da9..662fba56ac8 100644 --- a/app/Models/Extensions/ThrowsConsistentExceptions.php +++ b/app/Models/Extensions/ThrowsConsistentExceptions.php @@ -6,7 +6,6 @@ use Illuminate\Database\Eloquent\JsonEncodingException; use Illuminate\Support\Str; use function Safe\json_encode; -use function Safe\json_last_error_msg; /** * Fixed Eloquent model for all Lychee models. diff --git a/app/Models/Logs.php b/app/Models/Logs.php index 88ee2e3f1c5..50b91c47b2a 100644 --- a/app/Models/Logs.php +++ b/app/Models/Logs.php @@ -7,7 +7,6 @@ use App\Models\Extensions\UTCBasedTimes; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Carbon; -use function Safe\substr; /** * App\Logs. diff --git a/app/Models/Photo.php b/app/Models/Photo.php index ebedad725f8..562c32fa682 100644 --- a/app/Models/Photo.php +++ b/app/Models/Photo.php @@ -117,8 +117,8 @@ class Photo extends Model implements HasRandomID ]; /** - * @var string[] The list of attributes which exist as columns of the DB - * relation but shall not be serialized to JSON + * @var array The list of attributes which exist as columns of the DB + * relation but shall not be serialized to JSON */ protected $hidden = [ HasRandomID::LEGACY_ID_NAME, diff --git a/app/Models/SizeVariant.php b/app/Models/SizeVariant.php index 930534e5005..b3e5e1a084b 100644 --- a/app/Models/SizeVariant.php +++ b/app/Models/SizeVariant.php @@ -22,7 +22,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Storage; -use League\Flysystem\Adapter\Local; +use League\Flysystem\Local\LocalFilesystemAdapter; // TODO: Uncomment the following line, if Lychee really starts to support AWS s3. // The previous code already contained some first steps for S3, but relied @@ -82,7 +82,7 @@ class SizeVariant extends Model public $timestamps = false; /** - * @var string[] + * @var array */ protected $casts = [ 'id' => 'integer', @@ -95,8 +95,8 @@ class SizeVariant extends Model ]; /** - * @var string[] The list of attributes which exist as columns of the DB - * relation but shall not be serialized to JSON + * @var array The list of attributes which exist as columns of the DB + * relation but shall not be serialized to JSON */ protected $hidden = [ 'id', // irrelevant, because a size variant is always serialized as an embedded object of its photo @@ -168,14 +168,14 @@ public function getUrlAttribute(): string $maxLifetime = Configs::getValueAsInt('SL_life_time_days') * 24 * 60 * 60; $gracePeriod = $maxLifetime / 3; - $storageAdapter = $imageDisk->getDriver()->getAdapter(); + $storageAdapter = $imageDisk->getAdapter(); // TODO: Uncomment these line when Laravel really starts to support s3 /*if ($storageAdapter instanceof AwsS3Adapter) { return $imageDisk->temporaryUrl($this->short_path, now()->addSeconds($maxLifetime)); }*/ - if ($storageAdapter instanceof Local) { + if ($storageAdapter instanceof LocalFilesystemAdapter) { /** @var ?SymLink $symLink */ $symLink = $this->sym_links()->latest()->first(); if ($symLink === null || $symLink->created_at->isBefore(now()->subSeconds($gracePeriod))) { diff --git a/app/Models/SymLink.php b/app/Models/SymLink.php index b9aca431248..7b0c857a777 100644 --- a/app/Models/SymLink.php +++ b/app/Models/SymLink.php @@ -55,8 +55,8 @@ class SymLink extends Model ]; /** - * @var string[] The list of attributes which exist as columns of the DB - * relation but shall not be serialized to JSON + * @var array The list of attributes which exist as columns of the DB + * relation but shall not be serialized to JSON */ protected $hidden = [ 'size_variant', // see above and otherwise infinite loops will occur diff --git a/app/Models/TagAlbum.php b/app/Models/TagAlbum.php index fe424104817..dad262f221a 100644 --- a/app/Models/TagAlbum.php +++ b/app/Models/TagAlbum.php @@ -46,8 +46,8 @@ class TagAlbum extends BaseAlbum ]; /** - * @var string[] The list of attributes which exist as columns of the DB - * relation but shall not be serialized to JSON + * @var array The list of attributes which exist as columns of the DB + * relation but shall not be serialized to JSON */ protected $hidden = [ 'base_class', // don't serialize base class as a relation, the attributes of the base class are flatly merged into the JSON result diff --git a/app/Models/User.php b/app/Models/User.php index 5f8bb5ba871..9db3e141917 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -8,8 +8,6 @@ use App\Models\Extensions\UseFixedQueryBuilder; use App\Models\Extensions\UTCBasedTimes; use Carbon\Exceptions\InvalidFormatException; -use DarkGhostHunter\Larapass\Contracts\WebAuthnAuthenticatable; -use DarkGhostHunter\Larapass\WebAuthnAuthentication; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -19,7 +17,8 @@ use Illuminate\Notifications\Notifiable; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Auth; -use function Safe\substr; +use Laragear\WebAuthn\Contracts\WebAuthnAuthenticatable; +use Laragear\WebAuthn\WebAuthnAuthentication; /** * App\Models\User. @@ -61,7 +60,7 @@ class User extends Authenticatable implements WebAuthnAuthenticatable ]; /** - * @var string[] the attributes that should be hidden for arrays + * @var array the attributes that should be hidden for arrays */ protected $hidden = [ 'password', @@ -139,7 +138,7 @@ public function username(): string * * @return string */ - public function name(): string + public function getNameAttribute(): string { // If strings starts by '$2y$', it is very likely that it's a blowfish hash. return substr($this->username, 0, 4) === '$2y$' ? 'Admin' : $this->username; diff --git a/app/Pipelines/AssertionValidator.php b/app/Pipelines/AssertionValidator.php new file mode 100644 index 00000000000..09d351cbf11 --- /dev/null +++ b/app/Pipelines/AssertionValidator.php @@ -0,0 +1,55 @@ +user !== null) { + $this->validateUser($validation); + + if ($validation->request->json('response.userHandle') !== null) { + $this->validateId($validation); + } + } else { + $this->validateId($validation); + } + + return $next($validation); + } + + /** + * Validate the user owns the Credential if it already exists in the validation procedure. + * + * @param \Laragear\WebAuthn\Assertion\Validator\AssertionValidation $validation + * + * @return void + */ + protected function validateUser(AssertionValidation $validation): void + { + // @phpstan-ignore-next-line + if ($validation->user->id !== $validation->credential?->authenticatable?->id) { + throw AssertionException::make('User is not owner of the stored credential.'); + } + } + + /** + * Validate the user ID of the response. + * + * @param \Laragear\WebAuthn\Assertion\Validator\AssertionValidation $validation + * + * @return void + */ + protected function validateId(AssertionValidation $validation): void + { + $handle = $validation->request->json('response.userHandle'); + + if ($handle === null || !hash_equals(Uuid::fromString($validation->credential->user_id)->getHex()->toString(), $handle)) { + throw AssertionException::make('User ID is not owner of the stored credential.'); + } + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 685424acfc4..d39a9b7a961 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -23,7 +23,7 @@ class AuthServiceProvider extends ServiceProvider /** * The policy mappings for the application. * - * @var array + * @var array */ protected $policies = [ User::class => UserPolicy::class, diff --git a/app/Rules/LicenseRule.php b/app/Rules/LicenseRule.php index 79d9d1444c4..5bf7fb89634 100644 --- a/app/Rules/LicenseRule.php +++ b/app/Rules/LicenseRule.php @@ -22,7 +22,7 @@ public function passes($attribute, $value): bool */ public function message(): string { - return ':attribute must be one out of ' . + return ':attribute must be one out of: ' . implode(', ', Helpers::get_all_licenses()); } } diff --git a/composer.json b/composer.json index ff309d9b403..b92e0c26b81 100644 --- a/composer.json +++ b/composer.json @@ -19,17 +19,21 @@ "repositories": [ { "type": "vcs", - "url": "https://github.com/LycheeOrg/Larapass" + "url": "https://github.com/LycheeOrg/phpstan-lychee" }, { "type": "vcs", - "url": "https://github.com/LycheeOrg/phpstan-lychee" + "url": "https://github.com/LycheeOrg/php-exif" + }, + { + "type": "vcs", + "url": "https://github.com/Laragear/WebAuthn" } ], "license": "MIT", "type": "project", "require": { - "php": "^8.0", + "php": "^8.0.2", "ext-bcmath": "*", "ext-ctype": "*", "ext-exif": "*", @@ -41,16 +45,15 @@ "ext-pdo": "*", "ext-tokenizer": "*", "ext-xml": "*", - "bepsvpt/secure-headers": "^7.1", - "darkghosthunter/larapass": "dev-LycheeSpecial", + "bepsvpt/secure-headers": "^7.2", "doctrine/dbal": "^3.1", - "fideloper/proxy": "^4.3", "geocoder-php/cache-provider": "^4.3", "geocoder-php/nominatim-provider": "^5.5", - "laravel/framework": "^8.83.14", + "laragear/webauthn": "1.x-dev", + "laravel/framework": "^9.2", "livewire/livewire": "^2.7", "lychee-org/nestedset": "^6", - "lychee-org/php-exif": "^0.7.11", + "lychee-org/php-exif": "code-safe-2.2-dev", "maennchen/zipstream-php": "^2.1", "php-ffmpeg/php-ffmpeg": "^1.0", "php-http/guzzle7-adapter": "^1.0", @@ -59,7 +62,7 @@ "spatie/laravel-feed": "^4.0", "spatie/laravel-image-optimizer": "^1.6.2", "symfony/cache": "^v6.0.0", - "whichbrowser/parser": "^2.0" + "whichbrowser/parser": "^2.1" }, "require-dev": { "ext-imagick": "*", @@ -69,14 +72,13 @@ "barryvdh/laravel-ide-helper": "^2.10", "filp/whoops": "^2.5", "friendsofphp/php-cs-fixer": "^3.3", - "itsgoingd/clockwork": "^5.0", + "itsgoingd/clockwork": "^5.1", "laravel/homestead": "^v13.2.1", "lychee-org/phpstan-lychee": "dev-master", "mockery/mockery": "^1.5", - "nunomaduro/collision": "^5.0", - "nunomaduro/larastan": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpunit/phpunit": "^9" + "phpunit/phpunit": "^9", + "nunomaduro/larastan": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.3" }, "autoload": { "classmap": [ diff --git a/composer.lock b/composer.lock index 8e084ce2169..36692315815 100644 --- a/composer.lock +++ b/composer.lock @@ -4,75 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "520934d16e6b12a6cc6ec633f8b26005", + "content-hash": "216c0f26e265572d0bb8cb1bd677d4f1", "packages": [ - { - "name": "beberlei/assert", - "version": "v3.3.2", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "php": "^7.0 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": ">=6.0.0", - "yoast/phpunit-polyfills": "^0.1.0" - }, - "suggest": { - "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles" - }, - "type": "library", - "autoload": { - "files": [ - "lib/Assert/functions.php" - ], - "psr-4": { - "Assert\\": "lib/Assert" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "support": { - "issues": "https://github.com/beberlei/assert/issues", - "source": "https://github.com/beberlei/assert/tree/v3.3.2" - }, - "time": "2021-12-16T21:41:27+00:00" - }, { "name": "bepsvpt/secure-headers", "version": "7.2.0", @@ -155,26 +88,26 @@ }, { "name": "brick/math", - "version": "0.9.3", + "version": "0.10.2", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.1 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "4.25.0" }, "type": "library", "autoload": { @@ -199,19 +132,15 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" + "source": "https://github.com/brick/math/tree/0.10.2" }, "funding": [ { "url": "https://github.com/BenMorel", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" } ], - "time": "2021-08-15T20:50:18+00:00" + "time": "2022-08-10T22:54:19+00:00" }, { "name": "clue/stream-filter", @@ -279,93 +208,6 @@ ], "time": "2022-02-21T13:15:14+00:00" }, - { - "name": "darkghosthunter/larapass", - "version": "dev-LycheeSpecial", - "source": { - "type": "git", - "url": "https://github.com/LycheeOrg/Larapass.git", - "reference": "0d03a9ad17f32b5cdbad5667c8312078e5a57f49" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/LycheeOrg/Larapass/zipball/0d03a9ad17f32b5cdbad5667c8312078e5a57f49", - "reference": "0d03a9ad17f32b5cdbad5667c8312078e5a57f49", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/support": "^8.0", - "nyholm/psr7": "^1.3", - "php": ">=7.4.0", - "ramsey/uuid": "^4.0", - "symfony/psr-http-message-bridge": "^2.0", - "thecodingmachine/safe": "^1.3.3", - "web-auth/webauthn-lib": "^3.3" - }, - "require-dev": { - "laravel/framework": "8.*", - "orchestra/testbench": "^6.7.2", - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "DarkGhostHunter\\Larapass\\LarapassServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "DarkGhostHunter\\Larapass\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } - }, - "scripts": { - "test": [ - "vendor/bin/phpunit" - ], - "test-coverage": [ - "vendor/bin/phpunit --coverage-html coverage" - ] - }, - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Italo Israel Baeza Cabrera", - "email": "darkghosthunter@gmail.com", - "role": "Developer" - } - ], - "description": "Authenticate users with just their device, fingerprint or biometric data. Goodbye passwords!", - "homepage": "https://github.com/darkghosthunter/larapass", - "keywords": [ - "darkghosthunter", - "laravel", - "webauthn" - ], - "support": { - "source": "https://github.com/LycheeOrg/Larapass/tree/LycheeSpecial" - }, - "funding": [ - { - "type": "ko_fi", - "url": "https://ko-fi.com/DarkGhostHunter" - }, - { - "type": "custom", - "url": "https://paypal.me/darkghosthunter" - } - ], - "time": "2021-01-11T20:00:11+00:00" - }, { "name": "dflydev/dot-access-data", "version": "v3.0.1", @@ -1009,27 +851,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" @@ -1037,7 +879,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -1065,7 +907,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": [ { @@ -1073,7 +915,7 @@ "type": "github" } ], - "time": "2020-12-29T14:50:06+00:00" + "time": "2022-06-18T20:57:19+00:00" }, { "name": "evenement/evenement", @@ -1123,41 +965,37 @@ "time": "2017-07-23T21:35:13+00:00" }, { - "name": "fgrosse/phpasn1", - "version": "v2.4.0", + "name": "fruitcake/php-cors", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/fgrosse/PHPASN1.git", - "reference": "eef488991d53e58e60c9554b09b1201ca5ba9296" + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fgrosse/PHPASN1/zipball/eef488991d53e58e60c9554b09b1201ca5ba9296", - "reference": "eef488991d53e58e60c9554b09b1201ca5ba9296", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", "shasum": "" }, "require": { - "php": "~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0" + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" }, "require-dev": { - "php-coveralls/php-coveralls": "~2.0", - "phpunit/phpunit": "^6.3 || ^7.0 || ^8.0" - }, - "suggest": { - "ext-bcmath": "BCmath is the fallback extension for big integer calculations", - "ext-curl": "For loading OID information from the web if they have not bee defined statically", - "ext-gmp": "GMP is the preferred extension for big integer calculations", - "phpseclib/bcmath_compat": "BCmath polyfill for servers where neither GMP nor BCmath is available" + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "1.1-dev" } }, "autoload": { "psr-4": { - "FG\\": "lib/" + "Fruitcake\\Cors\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1166,94 +1004,36 @@ ], "authors": [ { - "name": "Friedrich Große", - "email": "friedrich.grosse@gmail.com", - "homepage": "https://github.com/FGrosse", - "role": "Author" + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" }, { - "name": "All contributors", - "homepage": "https://github.com/FGrosse/PHPASN1/contributors" + "name": "Barryvdh", + "email": "barryvdh@gmail.com" } ], - "description": "A PHP Framework that allows you to encode and decode arbitrary ASN.1 structures using the ITU-T X.690 Encoding Rules.", - "homepage": "https://github.com/FGrosse/PHPASN1", + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", "keywords": [ - "DER", - "asn.1", - "asn1", - "ber", - "binary", - "decoding", - "encoding", - "x.509", - "x.690", - "x509", - "x690" + "cors", + "laravel", + "symfony" ], "support": { - "issues": "https://github.com/fgrosse/PHPASN1/issues", - "source": "https://github.com/fgrosse/PHPASN1/tree/v2.4.0" - }, - "time": "2021-12-11T12:41:06+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/" - } + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Chris Fidao", - "email": "fideloper@gmail.com" + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" } ], - "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" + "time": "2022-02-20T15:07:15+00:00" }, { "name": "geocoder-php/cache-provider", @@ -1828,58 +1608,168 @@ ], "time": "2022-08-28T14:45:39+00:00" }, + { + "name": "laragear/webauthn", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/Laragear/WebAuthn.git", + "reference": "7f628f9a7979dc69cf2dc581895030c2b9e493dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laragear/WebAuthn/zipball/7f628f9a7979dc69cf2dc581895030c2b9e493dc", + "reference": "7f628f9a7979dc69cf2dc581895030c2b9e493dc", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-openssl": "*", + "illuminate/auth": "9.*", + "illuminate/config": "9.*", + "illuminate/database": "9.*", + "illuminate/encryption": "9.*", + "illuminate/http": "9.*", + "illuminate/session": "9.*", + "illuminate/support": "9.*", + "php": ">=8.0.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.0", + "mockery/mockery": "^1.5", + "orchestra/testbench": "7.*", + "phpunit/phpunit": "^9.5" + }, + "default-branch": true, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laragear\\WebAuthn\\WebAuthnServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laragear\\WebAuthn\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests", + "App\\Http\\Controllers\\WebAuthn\\": "stubs/controllers" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit --coverage-clover build/logs/clover.xml" + ], + "test-coverage": [ + "vendor/bin/phpunit --coverage-html coverage" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lukas Buchs", + "role": "Original developer" + }, + { + "name": "Italo Israel Baeza Cabrera", + "email": "DarkGhostHunter@Gmail.com", + "role": "Developer", + "homepage": "https://patreon.com/packagesforlaravel" + } + ], + "description": "Authenticate your users with biometric data, devices or USB keys.", + "homepage": "https://github.com/laragear/webauthn", + "keywords": [ + "authentication", + "faceid", + "laravel", + "passkeys", + "touchid", + "webauthn", + "windows hello" + ], + "support": { + "source": "https://github.com/Laragear/TwoFactor", + "issues": "https://github.com/Laragear/TwoFactor/issues" + }, + "funding": [ + { + "type": "Patreon", + "url": "https://patreon.com/PackagesForLaravel" + }, + { + "type": "Ko-Fi", + "url": "https://ko-fi.com/DarkGhostHunter" + }, + { + "type": "Buy me a cofee", + "url": "https://www.buymeacoffee.com/darkghosthunter" + }, + { + "type": "Paypal", + "url": "https://paypal.me/darkghosthunter" + } + ], + "time": "2022-08-26T04:25:25+00:00" + }, { "name": "laravel/framework", - "version": "v8.83.23", + "version": "v9.28.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "bdc707f8b9bcad289b24cd182d98ec7480ac4491" + "reference": "396a89e1f3654123d1c7f56306051212e5c75bc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/bdc707f8b9bcad289b24cd182d98ec7480ac4491", - "reference": "bdc707f8b9bcad289b24cd182d98ec7480ac4491", + "url": "https://api.github.com/repos/laravel/framework/zipball/396a89e1f3654123d1c7f56306051212e5c75bc0", + "reference": "396a89e1f3654123d1c7f56306051212e5c75bc0", "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.1", + "egulias/email-validator": "^3.1", "ext-mbstring": "*", "ext-openssl": "*", + "fruitcake/php-cors": "^1.2", "laravel/serializable-closure": "^1.0", - "league/commonmark": "^1.3|^2.0.2", - "league/flysystem": "^1.1", + "league/commonmark": "^2.2", + "league/flysystem": "^3.0.16", "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", + "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", + "symfony/console": "^6.0.3", + "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/var-dumper": "^6.0", "tijsverkoyen/css-to-inline-styles": "^2.2.2", "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", @@ -1887,6 +1777,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", @@ -1917,19 +1808,22 @@ "require-dev": { "aws/aws-sdk-php": "^3.198.1", "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", + "fakerphp/faker": "^1.9.2", + "guzzlehttp/guzzle": "^7.2", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.4.4", - "orchestra/testbench-core": "^6.27", + "orchestra/testbench-core": "^7.1", "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", + "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.198.1).", "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.", @@ -1941,27 +1835,29 @@ "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.2).", "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).", + "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-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", "mockery/mockery": "Required to use mocking (^1.4.4).", "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).", "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": { @@ -1975,7 +1871,8 @@ "Illuminate\\": "src/Illuminate/", "Illuminate\\Support\\": [ "src/Illuminate/Macroable/", - "src/Illuminate/Collections/" + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" ] } }, @@ -1999,7 +1896,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-07-26T13:30:00+00:00" + "time": "2022-09-06T14:57:01+00:00" }, { "name": "laravel/serializable-closure", @@ -2251,54 +2148,48 @@ }, { "name": "league/flysystem", - "version": "1.1.9", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99" + "reference": "81aea9e5217084c7850cd36e1587ee4aad721c6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/81aea9e5217084c7850cd36e1587ee4aad721c6b", + "reference": "81aea9e5217084c7850cd36e1587ee4aad721c6b", "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", + "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.0", + "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": "^2.0", + "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/", @@ -2308,45 +2199,47 @@ "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.2.1" }, "funding": [ { "url": "https://offset.earth/frankdejonge", - "type": "other" - } - ], - "time": "2021-12-09T09:40:50+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.11.0", - "source": { + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-08-14T20:48:34+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" @@ -2399,176 +2292,6 @@ ], "time": "2022-04-17T13:12:02+00:00" }, - { - "name": "league/uri", - "version": "6.7.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "2d7c87a0860f3126a39f44a8a9bf2fed402dcfea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/2d7c87a0860f3126a39f44a8a9bf2fed402dcfea", - "reference": "2d7c87a0860f3126a39f44a8a9bf2fed402dcfea", - "shasum": "" - }, - "require": { - "ext-json": "*", - "league/uri-interfaces": "^2.3", - "php": "^7.4 || ^8.0", - "psr/http-message": "^1.0" - }, - "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", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0.0", - "phpstan/phpstan-strict-rules": "^1.1.0", - "phpunit/phpunit": "^9.5.10", - "psr/http-factory": "^1.0" - }, - "suggest": { - "ext-fileinfo": "Needed to create Data URI from a filepath", - "ext-intl": "Needed to improve host validation", - "league/uri-components": "Needed to easily manipulate URI objects", - "psr/http-factory": "Needed to use the URI factory" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "uri-template", - "url", - "ws" - ], - "support": { - "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.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2022-06-29T09:48:18+00:00" - }, - { - "name": "league/uri-interfaces", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19", - "phpstan/phpstan": "^0.12.90", - "phpstan/phpstan-phpunit": "^0.12.19", - "phpstan/phpstan-strict-rules": "^0.12.9", - "phpunit/phpunit": "^8.5.15 || ^9.5" - }, - "suggest": { - "ext-intl": "to use the IDNA feature", - "symfony/intl": "to use the IDNA feature via Symfony Polyfill" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "Common interface for URI representation", - "homepage": "http://github.com/thephpleague/uri-interfaces", - "keywords": [ - "rfc3986", - "rfc3987", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/thephpleague/uri-interfaces/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/2.3.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2021-06-28T04:27:21+00:00" - }, { "name": "livewire/livewire", "version": "v2.10.7", @@ -2707,16 +2430,16 @@ }, { "name": "lychee-org/php-exif", - "version": "v0.7.11", + "version": "dev-code-safe-2.2", "source": { "type": "git", "url": "https://github.com/LycheeOrg/php-exif.git", - "reference": "a5daecb96566f88449daec95e0c22ed345933350" + "reference": "802775056b2505436dd379a342a57181bb4f409a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LycheeOrg/php-exif/zipball/a5daecb96566f88449daec95e0c22ed345933350", - "reference": "a5daecb96566f88449daec95e0c22ed345933350", + "url": "https://api.github.com/repos/LycheeOrg/php-exif/zipball/802775056b2505436dd379a342a57181bb4f409a", + "reference": "802775056b2505436dd379a342a57181bb4f409a", "shasum": "" }, "require": { @@ -2724,10 +2447,11 @@ "neitanod/forceutf8": "^2.0.4", "php": "^8.0", "php-ffmpeg/php-ffmpeg": "^1.0", - "thecodingmachine/safe": "^1.3" + "thecodingmachine/safe": "^2.2" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.3", + "infection/infection": "^0.26.13", "lychee-org/phpstan-lychee": "dev-master", "php-parallel-lint/php-parallel-lint": "^1.2", "phpmd/phpmd": "^2.9", @@ -2748,7 +2472,21 @@ "PHPExif": "lib/" } }, - "notification-url": "https://packagist.org/downloads/", + "scripts": { + "check-code-style": [ + "vendor/bin/phpcs --standard=PSR2 ./lib/" + ], + "run-tests": [ + "vendor/bin/phpunit -c phpunit.xml.dist", + "vendor/bin/phpunit --coverage-clover=coverage.xml" + ], + "validate-files": [ + "vendor/bin/parallel-lint --exclude vendor --exclude imagick ." + ], + "phpstan": [ + "vendor/bin/phpstan analyze" + ] + }, "license": [ "MIT" ], @@ -2761,21 +2499,21 @@ ], "description": "Object-Oriented EXIF parsing", "keywords": [ + "EXIF", + "FFmpeg", + "FFprobe", "IPTC", "ImageMagick", - "exif", + "Imagick", "exiftool", - "ffmpeg", - "ffprobe", - "imagick", "jpeg", "tiff" ], "support": { - "issues": "https://github.com/LycheeOrg/php-exif/issues", - "source": "https://github.com/LycheeOrg/php-exif/tree/v0.7.11" + "source": "https://github.com/LycheeOrg/php-exif/tree/code-safe-2.2", + "issues": "https://github.com/LycheeOrg/php-exif/issues" }, - "time": "2022-08-06T18:44:49+00:00" + "time": "2022-08-08T07:35:25+00:00" }, { "name": "maennchen/zipstream-php", @@ -3306,44 +3044,50 @@ "time": "2022-01-24T11:29:14+00:00" }, { - "name": "nyholm/psr7", - "version": "1.5.1", + "name": "nunomaduro/termwind", + "version": "v1.14.0", "source": { "type": "git", - "url": "https://github.com/Nyholm/psr7.git", - "reference": "f734364e38a876a23be4d906a2a089e1315be18a" + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "10065367baccf13b6e30f5e9246fa4f63a79eb1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/f734364e38a876a23be4d906a2a089e1315be18a", - "reference": "f734364e38a876a23be4d906a2a089e1315be18a", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/10065367baccf13b6e30f5e9246fa4f63a79eb1d", + "reference": "10065367baccf13b6e30f5e9246fa4f63a79eb1d", "shasum": "" }, "require": { - "php": ">=7.1", - "php-http/message-factory": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" }, "require-dev": { - "http-interop/http-factory-tests": "^0.9", - "php-http/psr7-integration-tests": "^1.0", - "phpunit/phpunit": "^7.5 || 8.5 || 9.4", - "symfony/error-handler": "^4.4" + "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": { - "branch-alias": { - "dev-master": "1.4-dev" + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] } }, "autoload": { + "files": [ + "src/Functions.php" + ], "psr-4": { - "Nyholm\\Psr7\\": "src/" + "Termwind\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3352,100 +3096,38 @@ ], "authors": [ { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com" - }, - { - "name": "Martijn van der Ven", - "email": "martijn@vanderven.se" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "A fast PHP7 implementation of PSR-7", - "homepage": "https://tnyholm.se", + "description": "Its like Tailwind CSS, but for the console.", "keywords": [ - "psr-17", - "psr-7" + "cli", + "console", + "css", + "package", + "php", + "style" ], "support": { - "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.5.1" + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.14.0" }, "funding": [ { - "url": "https://github.com/Zegnat", - "type": "github" + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" }, { - "url": "https://github.com/nyholm", + "url": "https://github.com/nunomaduro", "type": "github" - } - ], - "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" + "url": "https://github.com/xiCO2k", + "type": "github" } ], - "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" + "time": "2022-08-01T11:03:24+00:00" }, { "name": "php-ffmpeg/php-ffmpeg", @@ -4038,22 +3720,27 @@ }, { "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/" @@ -4080,9 +3767,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", @@ -4296,30 +3983,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/", @@ -4340,31 +4027,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": { @@ -4379,7 +4066,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -4391,9 +4078,9 @@ "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": "ralouphie/getallheaders", @@ -4999,258 +4686,37 @@ "time": "2022-08-23T07:15:15+00:00" }, { - "name": "spomky-labs/base64url", - "version": "v2.0.4", + "name": "symfony/cache", + "version": "v6.0.11", "source": { "type": "git", - "url": "https://github.com/Spomky-Labs/base64url.git", - "reference": "7752ce931ec285da4ed1f4c5aa27e45e097be61d" + "url": "https://github.com/symfony/cache.git", + "reference": "8c98079892d254b4e5806bedf694bddab8fe92b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/base64url/zipball/7752ce931ec285da4ed1f4c5aa27e45e097be61d", - "reference": "7752ce931ec285da4ed1f4c5aa27e45e097be61d", + "url": "https://api.github.com/repos/symfony/cache/zipball/8c98079892d254b4e5806bedf694bddab8fe92b4", + "reference": "8c98079892d254b4e5806bedf694bddab8fe92b4", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2|^3", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^5.4|^6.0" }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.11|^0.12", - "phpstan/phpstan-beberlei-assert": "^0.11|^0.12", - "phpstan/phpstan-deprecation-rules": "^0.11|^0.12", - "phpstan/phpstan-phpunit": "^0.11|^0.12", - "phpstan/phpstan-strict-rules": "^0.11|^0.12" + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" }, - "type": "library", - "autoload": { - "psr-4": { - "Base64Url\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky-Labs/base64url/contributors" - } - ], - "description": "Base 64 URL Safe Encoding/Decoding PHP Library", - "homepage": "https://github.com/Spomky-Labs/base64url", - "keywords": [ - "base64", - "rfc4648", - "safe", - "url" - ], - "support": { - "issues": "https://github.com/Spomky-Labs/base64url/issues", - "source": "https://github.com/Spomky-Labs/base64url/tree/v2.0.4" - }, - "funding": [ - { - "url": "https://github.com/Spomky", - "type": "github" - }, - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2020-11-03T09:10:25+00:00" - }, - { - "name": "spomky-labs/cbor-php", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/Spomky-Labs/cbor-php.git", - "reference": "28e2712cfc0b48fae661a48ffc6896d7abe83684" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/28e2712cfc0b48fae661a48ffc6896d7abe83684", - "reference": "28e2712cfc0b48fae661a48ffc6896d7abe83684", - "shasum": "" - }, - "require": { - "brick/math": "^0.8.15|^0.9.0", - "ext-mbstring": "*", - "php": ">=7.3" - }, - "require-dev": { - "ekino/phpstan-banned-code": "^1.0", - "ext-json": "*", - "infection/infection": "^0.18|^0.25", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-beberlei-assert": "^1.0", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.12", - "roave/security-advisories": "dev-latest", - "symplify/easy-coding-standard": "^10.0" - }, - "suggest": { - "ext-bcmath": "GMP or BCMath extensions will drastically improve the library performance. BCMath extension needed to handle the Big Float and Decimal Fraction Tags", - "ext-gmp": "GMP or BCMath extensions will drastically improve the library performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "CBOR\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/Spomky-Labs/cbor-php/contributors" - } - ], - "description": "CBOR Encoder/Decoder for PHP", - "keywords": [ - "Concise Binary Object Representation", - "RFC7049", - "cbor" - ], - "support": { - "issues": "https://github.com/Spomky-Labs/cbor-php/issues", - "source": "https://github.com/Spomky-Labs/cbor-php/tree/v2.1.0" - }, - "funding": [ - { - "url": "https://github.com/Spomky", - "type": "github" - }, - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2021-12-13T12:46:26+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" - }, - { - "name": "symfony/cache", - "version": "v6.0.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "8c98079892d254b4e5806bedf694bddab8fe92b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/8c98079892d254b4e5806bedf694bddab8fe92b4", - "reference": "8c98079892d254b4e5806bedf694bddab8fe92b4", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "psr/cache": "^2.0|^3.0", - "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^1.1.7|^2|^3", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^5.4|^6.0" - }, - "conflict": { - "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/var-dumper": "<5.4" - }, - "provide": { - "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" + "provide": { + "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", @@ -5393,46 +4859,42 @@ }, { "name": "symfony/console", - "version": "v5.4.12", + "version": "v6.0.12", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1" + "reference": "c5c2e313aa682530167c25077d6bdff36346251e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c072aa8f724c3af64e2c7a96b796a4863d24dba1", - "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1", + "url": "https://api.github.com/repos/symfony/console/zipball/c5c2e313aa682530167c25077d6bdff36346251e", + "reference": "c5c2e313aa682530167c25077d6bdff36346251e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.0.2", "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", @@ -5472,7 +4934,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.12" + "source": "https://github.com/symfony/console/tree/v6.0.12" }, "funding": [ { @@ -5488,7 +4950,7 @@ "type": "tidelift" } ], - "time": "2022-08-17T13:18:05+00:00" + "time": "2022-08-23T20:52:30+00:00" }, { "name": "symfony/css-selector", @@ -5624,27 +5086,27 @@ }, { "name": "symfony/error-handler", - "version": "v5.4.11", + "version": "v6.0.11", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "f75d17cb4769eb38cd5fccbda95cd80a054d35c8" + "reference": "cb302377e1b862540436f22be9ff07079a5836ae" }, "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/cb302377e1b862540436f22be9ff07079a5836ae", + "reference": "cb302377e1b862540436f22be9ff07079a5836ae", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "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" @@ -5675,7 +5137,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.0.11" }, "funding": [ { @@ -5691,7 +5153,7 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:37:50+00:00" + "time": "2022-07-29T07:39:48+00:00" }, { "name": "symfony/event-dispatcher", @@ -5857,22 +5319,20 @@ }, { "name": "symfony/finder", - "version": "v5.4.11", + "version": "v6.0.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" + "reference": "09cb683ba5720385ea6966e5e06be2a34f2568b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", + "url": "https://api.github.com/repos/symfony/finder/zipball/09cb683ba5720385ea6966e5e06be2a34f2568b1", + "reference": "09cb683ba5720385ea6966e5e06be2a34f2568b1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -5900,7 +5360,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.0.11" }, "funding": [ { @@ -5916,35 +5376,34 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:37:50+00:00" + "time": "2022-07-29T07:39:48+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.12", + "version": "v6.0.12", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791" + "reference": "d50ee4795c981638369dfa0b281107365fab2429" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4bfe9611b113b15d98a43da68ec9b5a00d56791", - "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d50ee4795c981638369dfa0b281107365fab2429", + "reference": "d50ee4795c981638369dfa0b281107365fab2429", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "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": { @@ -5976,7 +5435,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.0.12" }, "funding": [ { @@ -5992,67 +5451,64 @@ "type": "tidelift" } ], - "time": "2022-08-19T07:33:17+00:00" + "time": "2022-08-19T14:25:15+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.12", + "version": "v6.0.12", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "37f660fa3bcd78fe4893ce23ebe934618ec099be" + "reference": "8f3563e4518cfee24a5cc724434cc60e0818abec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/37f660fa3bcd78fe4893ce23ebe934618ec099be", - "reference": "37f660fa3bcd78fe4893ce23ebe934618ec099be", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8f3563e4518cfee24a5cc724434cc60e0818abec", + "reference": "8f3563e4518cfee24a5cc724434cc60e0818abec", "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.0.2", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^5.4|^6.0", + "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": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "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": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "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", "twig/twig": "^2.13|^3.0.4" }, @@ -6088,7 +5544,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.12" + "source": "https://github.com/symfony/http-kernel/tree/v6.0.12" }, "funding": [ { @@ -6104,47 +5560,42 @@ "type": "tidelift" } ], - "time": "2022-08-26T14:40:40+00:00" + "time": "2022-08-26T14:45:39+00:00" }, { - "name": "symfony/mime", - "version": "v5.4.12", + "name": "symfony/mailer", + "version": "v6.0.12", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90" + "url": "https://github.com/symfony/mailer.git", + "reference": "45aad5f8cfb481130e83dc4cb867c0f576182ea9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/03876e9c5a36f5b45e7d9a381edda5421eff8a90", - "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90", + "url": "https://api.github.com/repos/symfony/mailer/zipball/45aad5f8cfb481130e83dc4cb867c0f576182ea9", + "reference": "45aad5f8cfb481130e83dc4cb867c0f576182ea9", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" + "egulias/email-validator": "^2.1.10|^3", + "php": ">=8.0.2", + "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": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" + "symfony/http-kernel": "<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/serializer": "^5.2|^6.0" + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^5.4|^6.0" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Mime\\": "" + "Symfony\\Component\\Mailer\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6164,14 +5615,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Allows manipulating MIME messages", + "description": "Helps sending emails", "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.12" + "source": "https://github.com/symfony/mailer/tree/v6.0.12" }, "funding": [ { @@ -6187,48 +5634,49 @@ "type": "tidelift" } ], - "time": "2022-08-19T14:24:03+00:00" + "time": "2022-08-03T05:17:36+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "name": "symfony/mime", + "version": "v6.0.12", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "url": "https://github.com/symfony/mime.git", + "reference": "02a11577f2f9522c783179712bdf6d2d3cb9fc1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/mime/zipball/02a11577f2f9522c783179712bdf6d2d3cb9fc1d", + "reference": "02a11577f2f9522c783179712bdf6d2d3cb9fc1d", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, - "provide": { - "ext-ctype": "*" + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4" }, - "suggest": { - "ext-ctype": "For best performance" + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.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.4|^6.0" }, "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\\Ctype\\": "" - } + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6236,24 +5684,22 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "mime", + "mime-type" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/mime/tree/v6.0.12" }, "funding": [ { @@ -6269,30 +5715,30 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-08-19T14:25:15+00:00" }, { - "name": "symfony/polyfill-iconv", + "name": "symfony/polyfill-ctype", "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "143f1881e655bebca1312722af8068de235ae5dc" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", - "reference": "143f1881e655bebca1312722af8068de235ae5dc", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { "php": ">=7.1" }, "provide": { - "ext-iconv": "*" + "ext-ctype": "*" }, "suggest": { - "ext-iconv": "For best performance" + "ext-ctype": "For best performance" }, "type": "library", "extra": { @@ -6309,7 +5755,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" + "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -6318,25 +5764,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Iconv extension", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "iconv", + "ctype", "polyfill", - "portable", - "shim" + "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -6765,85 +6210,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", @@ -7008,21 +6374,20 @@ }, { "name": "symfony/process", - "version": "v5.4.11", + "version": "v6.0.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" + "reference": "44270a08ccb664143dede554ff1c00aaa2247a43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", + "url": "https://api.github.com/repos/symfony/process/zipball/44270a08ccb664143dede554ff1c00aaa2247a43", + "reference": "44270a08ccb664143dede554ff1c00aaa2247a43", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -7050,95 +6415,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.11" - }, - "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-06-27T16:58:25+00:00" - }, - { - "name": "symfony/psr-http-message-bridge", - "version": "v2.1.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "d444f85dddf65c7e57c58d8e5b3a4dbb593b1840" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/d444f85dddf65c7e57c58d8e5b3a4dbb593b1840", - "reference": "d444f85dddf65c7e57c58d8e5b3a4dbb593b1840", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0", - "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0" - }, - "require-dev": { - "nyholm/psr7": "^1.1", - "psr/log": "^1.1 || ^2 || ^3", - "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", - "symfony/config": "^4.4 || ^5.0 || ^6.0", - "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", - "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", - "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.4@dev || ^6.0" - }, - "suggest": { - "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" - }, - "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-main": "2.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Bridge\\PsrHttpMessage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "PSR HTTP message bridge", - "homepage": "http://symfony.com", - "keywords": [ - "http", - "http-message", - "psr-17", - "psr-7" - ], - "support": { - "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.3" + "source": "https://github.com/symfony/process/tree/v6.0.11" }, "funding": [ { @@ -7154,41 +6431,39 @@ "type": "tidelift" } ], - "time": "2022-09-05T10:34:54+00:00" + "time": "2022-06-27T17:10:44+00:00" }, { "name": "symfony/routing", - "version": "v5.4.11", + "version": "v6.0.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226" + "reference": "434b64f7d3a582ec33fcf69baaf085473e67d639" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3e01ccd9b2a3a4167ba2b3c53612762300300226", - "reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226", + "url": "https://api.github.com/repos/symfony/routing/zipball/434b64f7d3a582ec33fcf69baaf085473e67d639", + "reference": "434b64f7d3a582ec33fcf69baaf085473e67d639", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2" }, "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", @@ -7228,7 +6503,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.11" + "source": "https://github.com/symfony/routing/tree/v6.0.11" }, "funding": [ { @@ -7244,26 +6519,25 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2022-07-20T13:45:53+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.2", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" }, "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/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.0.2", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -7274,7 +6548,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -7311,7 +6585,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" }, "funding": [ { @@ -7327,7 +6601,7 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:29+00:00" + "time": "2022-05-30T19:17:58+00:00" }, { "name": "symfony/string", @@ -7589,32 +6863,31 @@ }, { "name": "symfony/var-dumper", - "version": "v5.4.11", + "version": "v6.0.11", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861" + "reference": "2672bdc01c1971e3d8879ce153ec4c3621be5f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8f306d7b8ef34fb3db3305be97ba8e088fb4861", - "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2672bdc01c1971e3d8879ce153ec4c3621be5f07", + "reference": "2672bdc01c1971e3d8879ce153ec4c3621be5f07", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2", + "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": { @@ -7658,7 +6931,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.11" + "source": "https://github.com/symfony/var-dumper/tree/v6.0.11" }, "funding": [ { @@ -7674,7 +6947,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2022-07-20T13:45:53+00:00" }, { "name": "symfony/var-exporter", @@ -7750,39 +7023,45 @@ }, { "name": "thecodingmachine/safe", - "version": "v1.3.3", + "version": "v2.2.3", "source": { "type": "git", "url": "https://github.com/thecodingmachine/safe.git", - "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc" + "reference": "e454a3142d2197694d1fda291a4462ccd3f66e12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/a8ab0876305a4cdaef31b2350fcb9811b5608dbc", - "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/e454a3142d2197694d1fda291a4462ccd3f66e12", + "reference": "e454a3142d2197694d1fda291a4462ccd3f66e12", "shasum": "" }, "require": { - "php": ">=7.2" + "php": "^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12", + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9.5", "squizlabs/php_codesniffer": "^3.2", - "thecodingmachine/phpstan-strict-rules": "^0.12" + "thecodingmachine/phpstan-strict-rules": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.1-dev" + "dev-master": "2.2.x-dev" } }, "autoload": { "files": [ "deprecated/apc.php", + "deprecated/array.php", + "deprecated/datetime.php", "deprecated/libevent.php", + "deprecated/password.php", "deprecated/mssql.php", "deprecated/stats.php", + "deprecated/strings.php", "lib/special_cases.php", + "deprecated/mysqli.php", "generated/apache.php", "generated/apcu.php", "generated/array.php", @@ -7803,6 +7082,7 @@ "generated/fpm.php", "generated/ftp.php", "generated/funchand.php", + "generated/gettext.php", "generated/gmp.php", "generated/gnupg.php", "generated/hash.php", @@ -7812,7 +7092,6 @@ "generated/image.php", "generated/imap.php", "generated/info.php", - "generated/ingres-ii.php", "generated/inotify.php", "generated/json.php", "generated/ldap.php", @@ -7821,20 +7100,14 @@ "generated/mailparse.php", "generated/mbstring.php", "generated/misc.php", - "generated/msql.php", "generated/mysql.php", - "generated/mysqli.php", - "generated/mysqlndMs.php", - "generated/mysqlndQc.php", "generated/network.php", "generated/oci8.php", "generated/opcache.php", "generated/openssl.php", "generated/outcontrol.php", - "generated/password.php", "generated/pcntl.php", "generated/pcre.php", - "generated/pdf.php", "generated/pgsql.php", "generated/posix.php", "generated/ps.php", @@ -7845,7 +7118,6 @@ "generated/sem.php", "generated/session.php", "generated/shmop.php", - "generated/simplexml.php", "generated/sockets.php", "generated/sodium.php", "generated/solr.php", @@ -7868,13 +7140,13 @@ "generated/zip.php", "generated/zlib.php" ], - "psr-4": { - "Safe\\": [ - "lib/", - "deprecated/", - "generated/" - ] - } + "classmap": [ + "lib/DateTime.php", + "lib/DateTimeImmutable.php", + "lib/Exceptions/", + "deprecated/Exceptions/", + "generated/Exceptions/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7883,9 +7155,9 @@ "description": "PHP core functions that throw exceptions instead of returning FALSE on error", "support": { "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v1.3.3" + "source": "https://github.com/thecodingmachine/safe/tree/v2.2.3" }, - "time": "2020-10-28T17:51:34+00:00" + "time": "2022-08-04T14:05:49+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -8022,16 +7294,16 @@ }, { "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": { @@ -8068,7 +7340,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": [ { @@ -8092,34 +7364,42 @@ "type": "tidelift" } ], - "time": "2022-01-24T18:55:24+00:00" + "time": "2022-03-08T17:03:00+00:00" }, { - "name": "web-auth/cose-lib", - "version": "v3.3.12", + "name": "webmozart/assert", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/web-auth/cose-lib.git", - "reference": "efa6ec2ba4e840bc1316a493973c9916028afeeb" + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/efa6ec2ba4e840bc1316a493973c9916028afeeb", - "reference": "efa6ec2ba4e840bc1316a493973c9916028afeeb", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "beberlei/assert": "^3.2", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "fgrosse/phpasn1": "^2.1", - "php": ">=7.2" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { - "Cose\\": "src/" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8128,241 +7408,19 @@ ], "authors": [ { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/web-auth/cose/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "CBOR Object Signing and Encryption (COSE) For PHP", - "homepage": "https://github.com/web-auth", + "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ - "COSE", - "RFC8152" + "assert", + "check", + "validate" ], "support": { - "source": "https://github.com/web-auth/cose-lib/tree/v3.3.12" - }, - "funding": [ - { - "url": "https://github.com/Spomky", - "type": "github" - }, - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2021-12-04T12:13:35+00:00" - }, - { - "name": "web-auth/metadata-service", - "version": "v3.3.12", - "source": { - "type": "git", - "url": "https://github.com/web-auth/webauthn-metadata-service.git", - "reference": "ef40d2b7b68c4964247d13fab52e2fa8dbd65246" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-metadata-service/zipball/ef40d2b7b68c4964247d13fab52e2fa8dbd65246", - "reference": "ef40d2b7b68c4964247d13fab52e2fa8dbd65246", - "shasum": "" - }, - "require": { - "beberlei/assert": "^3.2", - "ext-json": "*", - "league/uri": "^6.0", - "php": ">=7.2", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/log": "^1.1" - }, - "suggest": { - "web-token/jwt-key-mgmt": "Mandatory for fetching Metadata Statement from distant sources", - "web-token/jwt-signature-algorithm-ecdsa": "Mandatory for fetching Metadata Statement from distant sources" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webauthn\\MetadataService\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/web-auth/metadata-service/contributors" - } - ], - "description": "Metadata Service for FIDO2/Webauthn", - "homepage": "https://github.com/web-auth", - "keywords": [ - "FIDO2", - "fido", - "webauthn" - ], - "support": { - "source": "https://github.com/web-auth/webauthn-metadata-service/tree/v3.3.12" - }, - "funding": [ - { - "url": "https://github.com/Spomky", - "type": "github" - }, - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2021-11-21T11:14:31+00:00" - }, - { - "name": "web-auth/webauthn-lib", - "version": "v3.3.12", - "source": { - "type": "git", - "url": "https://github.com/web-auth/webauthn-lib.git", - "reference": "5ef9b21c8e9f8a817e524ac93290d08a9f065b33" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/5ef9b21c8e9f8a817e524ac93290d08a9f065b33", - "reference": "5ef9b21c8e9f8a817e524ac93290d08a9f065b33", - "shasum": "" - }, - "require": { - "beberlei/assert": "^3.2", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "fgrosse/phpasn1": "^2.1", - "php": ">=7.2", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "psr/log": "^1.1", - "ramsey/uuid": "^3.8|^4.0", - "spomky-labs/base64url": "^2.0", - "spomky-labs/cbor-php": "^1.0|^2.0", - "symfony/process": "^3.0|^4.0|^5.0", - "thecodingmachine/safe": "^1.1", - "web-auth/cose-lib": "self.version", - "web-auth/metadata-service": "self.version" - }, - "suggest": { - "psr/log-implementation": "Recommended to receive logs from the library", - "web-token/jwt-key-mgmt": "Mandatory for the AndroidSafetyNet Attestation Statement support", - "web-token/jwt-signature-algorithm-ecdsa": "Recommended for the AndroidSafetyNet Attestation Statement support", - "web-token/jwt-signature-algorithm-eddsa": "Recommended for the AndroidSafetyNet Attestation Statement support", - "web-token/jwt-signature-algorithm-rsa": "Mandatory for the AndroidSafetyNet Attestation Statement support" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webauthn\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florent Morselli", - "homepage": "https://github.com/Spomky" - }, - { - "name": "All contributors", - "homepage": "https://github.com/web-auth/webauthn-library/contributors" - } - ], - "description": "FIDO2/Webauthn Support For PHP", - "homepage": "https://github.com/web-auth", - "keywords": [ - "FIDO2", - "fido", - "webauthn" - ], - "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/v3.3.12" - }, - "funding": [ - { - "url": "https://github.com/Spomky", - "type": "github" - }, - { - "url": "https://www.patreon.com/FlorentMorselli", - "type": "patreon" - } - ], - "time": "2022-02-18T07:13:44+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" }, @@ -8713,299 +7771,43 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "support": { - "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.0.6" - }, - "time": "2018-12-13T10:34:14+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.3.3", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "30897edbfb15e784fe55587b4f73ceefd3c4d98c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/30897edbfb15e784fe55587b4f73ceefd3c4d98c", - "reference": "30897edbfb15e784fe55587b4f73ceefd3c4d98c", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.3.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-07-20T07:14:26+00:00" - }, - { - "name": "composer/class-map-generator", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", - "shasum": "" - }, - "require": { - "composer/pcre": "^2 || ^3", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6" - }, - "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\ClassMapGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Utilities to scan PHP code and generate class maps.", - "keywords": [ - "classmap" - ], - "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.0.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-06-19T11:31:27+00:00" - }, - { - "name": "composer/composer", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "777d542e3af65f8e7a66a4d98ce7a697da339414" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/777d542e3af65f8e7a66a4d98ce7a697da339414", - "reference": "777d542e3af65f8e7a66a4d98ce7a697da339414", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/class-map-generator": "^1.0", - "composer/metadata-minifier": "^1.0", - "composer/pcre": "^2 || ^3", - "composer/semver": "^3.0", - "composer/spdx-licenses": "^1.5.7", - "composer/xdebug-handler": "^2.0.2 || ^3.0.3", - "justinrainbow/json-schema": "^5.2.11", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "react/promise": "^2.8", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.2", - "seld/signal-handler": "^2.0", - "symfony/console": "^5.4.11 || ^6.0.11", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/polyfill-php73": "^1.24", - "symfony/polyfill-php80": "^1.24", - "symfony/process": "^5.4 || ^6.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4.1", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1", - "phpstan/phpstan-symfony": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" - }, - "bin": [ - "bin/composer" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "phpstan": { - "includes": [ - "phpstan/rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "https://www.naderman.de" - }, + "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" } ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.4.1" + "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.0.6" }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-08-20T09:44:50+00:00" + "time": "2018-12-13T10:34:14+00:00" }, { - "name": "composer/metadata-minifier", + "name": "composer/class-map-generator", "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/composer/metadata-minifier.git", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207" + "url": "https://github.com/composer/class-map-generator.git", + "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", + "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "composer/pcre": "^2 || ^3", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6" }, "require-dev": { - "composer/composer": "^2", - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.6", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/filesystem": "^5.4 || ^6", + "symfony/phpunit-bridge": "^5" }, "type": "library", "extra": { @@ -9015,7 +7817,7 @@ }, "autoload": { "psr-4": { - "Composer\\MetadataMinifier\\": "src" + "Composer\\ClassMapGenerator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9026,17 +7828,16 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], - "description": "Small utility library that handles metadata minification and expansion.", + "description": "Utilities to scan PHP code and generate class maps.", "keywords": [ - "composer", - "compression" + "classmap" ], "support": { - "issues": "https://github.com/composer/metadata-minifier/issues", - "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" + "issues": "https://github.com/composer/class-map-generator/issues", + "source": "https://github.com/composer/class-map-generator/tree/1.0.0" }, "funding": [ { @@ -9052,7 +7853,7 @@ "type": "tidelift" } ], - "time": "2021-04-07T13:37:33+00:00" + "time": "2022-06-19T11:31:27+00:00" }, { "name": "composer/pcre", @@ -9206,86 +8007,6 @@ ], "time": "2022-04-01T19:23:25+00:00" }, - { - "name": "composer/spdx-licenses", - "version": "1.5.7", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "c848241796da2abf65837d51dce1fae55a960149" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/c848241796da2abf65837d51dce1fae55a960149", - "reference": "c848241796da2abf65837d51dce1fae55a960149", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Spdx\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "SPDX licenses list and validation library.", - "keywords": [ - "license", - "spdx", - "validator" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.7" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-05-23T07:37:50+00:00" - }, { "name": "composer/xdebug-handler", "version": "3.0.3", @@ -9573,59 +8294,6 @@ ], "time": "2021-11-08T15:37:09+00:00" }, - { - "name": "facade/ignition-contracts", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/facade/ignition-contracts.git", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^v2.15.8", - "phpunit/phpunit": "^9.3.11", - "vimeo/psalm": "^3.17.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Facade\\IgnitionContracts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://flareapp.io", - "role": "Developer" - } - ], - "description": "Solution contracts for Ignition", - "homepage": "https://github.com/facade/ignition-contracts", - "keywords": [ - "contracts", - "flare", - "ignition" - ], - "support": { - "issues": "https://github.com/facade/ignition-contracts/issues", - "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" - }, - "time": "2020-10-16T08:27:54+00:00" - }, { "name": "filp/whoops", "version": "2.14.5", @@ -9905,76 +8573,6 @@ ], "time": "2022-08-14T21:23:22+00:00" }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.12", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12" - }, - "time": "2022-04-13T08:02:27+00:00" - }, { "name": "laravel/homestead", "version": "v13.2.1", @@ -10314,144 +8912,58 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" - }, - "time": "2022-09-04T07:30:47+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v5.11.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", - "shasum": "" - }, - "require": { - "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.14.3", - "php": "^7.3 || ^8.0", - "symfony/console": "^5.0" - }, - "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" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" + "BSD-3-Clause" ], - "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, + "authors": [ { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" + "name": "Nikita Popov" } ], - "time": "2022-01-10T16:22:52+00:00" + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + }, + "time": "2022-09-04T07:30:47+00:00" }, { "name": "nunomaduro/larastan", - "version": "1.0.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/larastan.git", - "reference": "f5ce15319da184a5e461ef12c60489c15a9cf65b" + "reference": "980199077a49d71ef7c03b65b9d6bcce1f6d7bad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/f5ce15319da184a5e461ef12c60489c15a9cf65b", - "reference": "f5ce15319da184a5e461ef12c60489c15a9cf65b", + "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/980199077a49d71ef7c03b65b9d6bcce1f6d7bad", + "reference": "980199077a49d71ef7c03b65b9d6bcce1f6d7bad", "shasum": "" }, "require": { - "composer/composer": "^1.0 || ^2.0", + "composer/class-map-generator": "^1.0", + "composer/pcre": "^3.0", "ext-json": "*", - "illuminate/console": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/container": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/contracts": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/database": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/http": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/pipeline": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "mockery/mockery": "^0.9 || ^1.0", - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.0", - "symfony/process": "^4.3 || ^5.0 || ^6.0" + "illuminate/console": "^9", + "illuminate/container": "^9", + "illuminate/contracts": "^9", + "illuminate/database": "^9", + "illuminate/http": "^9", + "illuminate/pipeline": "^9", + "illuminate/support": "^9", + "mockery/mockery": "^1.4.4", + "php": "^8.0.2", + "phpmyadmin/sql-parser": "^5.5", + "phpstan/phpstan": "^1.8.1" }, "require-dev": { - "nikic/php-parser": "^4.13.0", - "orchestra/testbench": "^4.0 || ^5.0 || ^6.0 || ^7.0", - "phpunit/phpunit": "^7.3 || ^8.2 || ^9.3" + "nikic/php-parser": "^4.13.2", + "orchestra/testbench": "^7.0.0", + "phpunit/phpunit": "^9.5.11" }, "suggest": { "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" @@ -10459,7 +8971,7 @@ "type": "phpstan-extension", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" }, "phpstan": { "includes": [ @@ -10495,7 +9007,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/larastan/issues", - "source": "https://github.com/nunomaduro/larastan/tree/1.0.3" + "source": "https://github.com/nunomaduro/larastan/tree/v2.2.0" }, "funding": [ { @@ -10515,7 +9027,7 @@ "type": "patreon" } ], - "time": "2022-01-20T19:33:48+00:00" + "time": "2022-08-30T19:02:01+00:00" }, { "name": "phar-io/manifest", @@ -10788,6 +9300,79 @@ }, "time": "2022-03-15T21:29:03+00:00" }, + { + "name": "phpmyadmin/sql-parser", + "version": "5.5.0", + "source": { + "type": "git", + "url": "https://github.com/phpmyadmin/sql-parser.git", + "reference": "8ab99cd0007d880f49f5aa1807033dbfa21b1cb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/8ab99cd0007d880f49f5aa1807033dbfa21b1cb5", + "reference": "8ab99cd0007d880f49f5aa1807033dbfa21b1cb5", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "symfony/polyfill-mbstring": "^1.3" + }, + "conflict": { + "phpmyadmin/motranslator": "<3.0" + }, + "require-dev": { + "phpmyadmin/coding-standard": "^3.0", + "phpmyadmin/motranslator": "^4.0 || ^5.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.2", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.11", + "zumba/json-serializer": "^3.0" + }, + "suggest": { + "ext-mbstring": "For best performance", + "phpmyadmin/motranslator": "Translate messages to your favorite locale" + }, + "bin": [ + "bin/highlight-query", + "bin/lint-query", + "bin/tokenize-query" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpMyAdmin\\SqlParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "The phpMyAdmin Team", + "email": "developers@phpmyadmin.net", + "homepage": "https://www.phpmyadmin.net/team/" + } + ], + "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", + "homepage": "https://github.com/phpmyadmin/sql-parser", + "keywords": [ + "analysis", + "lexer", + "parser", + "sql" + ], + "support": { + "issues": "https://github.com/phpmyadmin/sql-parser/issues", + "source": "https://github.com/phpmyadmin/sql-parser" + }, + "time": "2021-12-09T04:31:52+00:00" + }, { "name": "phpstan/phpstan", "version": "1.8.4", @@ -11361,82 +9946,6 @@ ], "time": "2022-08-30T07:42:16+00:00" }, - { - "name": "react/promise", - "version": "v2.9.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], - "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.9.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-02-11T10:27:51+00:00" - }, { "name": "sebastian/cli-parser", "version": "1.0.1", @@ -12401,179 +10910,6 @@ ], "time": "2020-09-28T06:39:44+00:00" }, - { - "name": "seld/jsonlint", - "version": "1.9.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "4211420d25eba80712bff236a98960ef68b866b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", - "reference": "4211420d25eba80712bff236a98960ef68b866b7", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "support": { - "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", - "type": "tidelift" - } - ], - "time": "2022-04-01T13:37:23+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\PharUtils\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "PHAR file format utilities, for when PHP phars you up", - "keywords": [ - "phar" - ], - "support": { - "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1" - }, - "time": "2022-08-31T10:31:18+00:00" - }, - { - "name": "seld/signal-handler", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/signal-handler.git", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/f69d119511dc0360440cdbdaa71829c149b7be75", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "require-dev": { - "phpstan/phpstan": "^1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^7.5.20 || ^8.5.23", - "psr/log": "^1 || ^2 || ^3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\Signal\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development", - "keywords": [ - "posix", - "sigint", - "signal", - "sigterm", - "unix" - ], - "support": { - "issues": "https://github.com/Seldaek/signal-handler/issues", - "source": "https://github.com/Seldaek/signal-handler/tree/2.0.1" - }, - "time": "2022-07-20T18:31:45+00:00" - }, { "name": "slam/phpstan-extensions", "version": "v6.0.0", @@ -13077,13 +11413,14 @@ "aliases": [], "minimum-stability": "dev", "stability-flags": { - "darkghosthunter/larapass": 20, + "laragear/webauthn": 20, + "lychee-org/php-exif": 20, "lychee-org/phpstan-lychee": 20 }, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.0", + "php": "^8.0.2", "ext-bcmath": "*", "ext-ctype": "*", "ext-exif": "*", diff --git a/config/app.php b/config/app.php index a7a422b36c8..b006db8cf3d 100644 --- a/config/app.php +++ b/config/app.php @@ -1,5 +1,7 @@ 'en', + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + /* |-------------------------------------------------------------------------- | Log DB SQL statements @@ -135,6 +150,24 @@ 'cipher' => env('APP_CIPHER', 'AES-256-CBC'), + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => 'file', + // 'store' => 'redis', + ], + /* |-------------------------------------------------------------------------- | Autoloaded Service Providers @@ -201,45 +234,10 @@ | */ - 'aliases' => [ - 'App' => Illuminate\Support\Facades\App::class, - 'Arr' => Illuminate\Support\Arr::class, - 'Artisan' => Illuminate\Support\Facades\Artisan::class, - 'Auth' => Illuminate\Support\Facades\Auth::class, - 'Blade' => Illuminate\Support\Facades\Blade::class, - 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, - 'Bus' => Illuminate\Support\Facades\Bus::class, - 'Cache' => Illuminate\Support\Facades\Cache::class, - 'Config' => Illuminate\Support\Facades\Config::class, - 'Cookie' => Illuminate\Support\Facades\Cookie::class, - 'Crypt' => Illuminate\Support\Facades\Crypt::class, - 'DB' => Illuminate\Support\Facades\DB::class, + 'aliases' => Facade::defaultAliases()->merge([ + // 'ExampleClass' => App\Example\ExampleClass::class, 'DebugBar' => Barryvdh\Debugbar\Facades\Debugbar::class, - 'Eloquent' => Illuminate\Database\Eloquent\Model::class, - 'Event' => Illuminate\Support\Facades\Event::class, - 'File' => Illuminate\Support\Facades\File::class, - 'Gate' => Illuminate\Support\Facades\Gate::class, - 'Hash' => Illuminate\Support\Facades\Hash::class, - 'Http' => Illuminate\Support\Facades\Http::class, - // 'Lang' => Illuminate\Support\Facades\Lang::class, 'Helpers' => App\Facades\Helpers::class, 'Lang' => App\Facades\Lang::class, - 'Log' => Illuminate\Support\Facades\Log::class, - 'Mail' => Illuminate\Support\Facades\Mail::class, - 'Notification' => Illuminate\Support\Facades\Notification::class, - // 'Password' => Illuminate\Support\Facades\Password::class, - 'Queue' => Illuminate\Support\Facades\Queue::class, - 'Redirect' => Illuminate\Support\Facades\Redirect::class, - 'Redis' => Illuminate\Support\Facades\Redis::class, - 'Request' => Illuminate\Support\Facades\Request::class, - 'Response' => Illuminate\Support\Facades\Response::class, - 'Route' => Illuminate\Support\Facades\Route::class, - 'Schema' => Illuminate\Support\Facades\Schema::class, - 'Session' => Illuminate\Support\Facades\Session::class, - 'Storage' => Illuminate\Support\Facades\Storage::class, - 'Str' => Illuminate\Support\Str::class, - 'URL' => Illuminate\Support\Facades\URL::class, - 'Validator' => Illuminate\Support\Facades\Validator::class, - 'View' => Illuminate\Support\Facades\View::class, - ], + ])->toArray(), ]; diff --git a/config/auth.php b/config/auth.php index 266da91513e..68c1fd95568 100644 --- a/config/auth.php +++ b/config/auth.php @@ -63,9 +63,9 @@ 'providers' => [ 'users' => [ - 'driver' => 'eloquent', - // 'driver' => 'eloquent-webauthn', + 'driver' => 'eloquent-webauthn', 'model' => App\Models\User::class, + 'password_fallback' => true, ], // 'users' => [ diff --git a/config/broadcasting.php b/config/broadcasting.php index a5284122a67..c48467a6e31 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -34,9 +34,20 @@ 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ - 'cluster' => env('PUSHER_APP_CLUSTER'), - 'useTLS' => true, + 'host' => env('PUSHER_HOST', 'api-' . env('PUSHER_APP_CLUSTER', 'mt1') . '.pusher.com') ?: 'api-' . env('PUSHER_APP_CLUSTER', 'mt1') . '.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), ], 'redis' => [ diff --git a/config/cache.php b/config/cache.php index cad0c945e87..da158160bca 100644 --- a/config/cache.php +++ b/config/cache.php @@ -28,6 +28,9 @@ | well as their drivers. You may even define multiple stores for the | same cache driver to group types of items stored in your caches. | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | */ 'stores' => [ @@ -44,6 +47,7 @@ 'driver' => 'database', 'table' => 'cache', 'connection' => env('DB_CONNECTION'), + 'lock_connection' => null, ], 'file' => [ @@ -70,6 +74,7 @@ 'redis' => [ 'driver' => 'redis', 'connection' => 'cache', + 'lock_connection' => 'default', ], 'dynamodb' => [ @@ -80,6 +85,10 @@ 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), 'endpoint' => env('DYNAMODB_ENDPOINT'), ], + + 'octane' => [ + 'driver' => 'octane', + ], ], /* @@ -93,8 +102,5 @@ | */ - 'prefix' => env( - 'CACHE_PREFIX', - Str::slug(env('APP_NAME', 'Lychee'), '_') . '_cache' - ), + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'Lychee'), '_') . '_cache_'), ]; diff --git a/config/cors.php b/config/cors.php new file mode 100644 index 00000000000..8583af2e347 --- /dev/null +++ b/config/cors.php @@ -0,0 +1,32 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, +]; \ No newline at end of file diff --git a/config/database.php b/config/database.php index 827550ea316..16a031b58b7 100644 --- a/config/database.php +++ b/config/database.php @@ -119,7 +119,7 @@ 'timezone' => 'UTC', 'prefix' => '', 'prefix_indexes' => true, - 'schema' => 'public', + 'search_path' => 'public', 'sslmode' => 'prefer', ], diff --git a/config/filesystems.php b/config/filesystems.php index dcc0965c976..819b72bc6d5 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -41,12 +41,38 @@ */ 'disks' => [ + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + 'throw' => true, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL') . '/storage', + 'visibility' => 'public', + 'throw' => true, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => true, + ], + // Lychee uses the disk "images" to store the media files 'images' => [ 'driver' => 'local', 'root' => env('LYCHEE_UPLOADS', public_path('uploads/')), 'url' => env('LYCHEE_UPLOADS_URL', 'uploads/'), - 'visibility' => env('LYCHEE_IMAGE_VISIBILITY', 'public'), + 'visibility' => 'public', 'permissions' => [ 'file' => [ 'world' => 00666, @@ -61,20 +87,6 @@ ], ], - // This is an example how the "images" disk can be hosted on an AWS S3 - // ATTENTION: This is NOT supported yet!!! - // This is only a placeholder/reminder for the future - /* - 'images' => [ - 'driver' => 's3', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), - 'bucket' => env('AWS_BUCKET'), - 'url' => env('AWS_URL'), - 'endpoint' => env('AWS_ENDPOINT'), - ],*/ - // Lychee uses this disk to store the customized CSS file provided by the user // ATTENTION: This disk MUST ALWAYS point to the local `./public/dist` directory. // TODO: Maybe we should drop this Flysystem disk, because neither the driver nor the root must be changed and hence the whole point of using the Flysystem abstraction is gone. diff --git a/config/logging.php b/config/logging.php index 4b10a9500da..2427faad4a7 100644 --- a/config/logging.php +++ b/config/logging.php @@ -14,6 +14,22 @@ 'default' => 'log', + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => false, + ], + /* |-------------------------------------------------------------------------- | Log Channels diff --git a/config/mail.php b/config/mail.php index 96c5abde391..aa5712ae9fb 100644 --- a/config/mail.php +++ b/config/mail.php @@ -41,7 +41,7 @@ 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, - 'auth_mode' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN'), ], 'ses' => [ @@ -58,12 +58,20 @@ 'sendmail' => [ 'transport' => 'sendmail', - 'path' => '/usr/sbin/sendmail -bs', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), ], 'array' => [ 'transport' => 'array', ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], ], /* diff --git a/config/queue.php b/config/queue.php index 628b39e8835..4064a5d5cfb 100644 --- a/config/queue.php +++ b/config/queue.php @@ -37,6 +37,7 @@ 'table' => 'jobs', 'queue' => 'default', 'retry_after' => 90, + 'after_commit' => false, ], 'beanstalkd' => [ @@ -45,6 +46,7 @@ 'queue' => 'default', 'retry_after' => 90, 'block_for' => 0, + 'after_commit' => false, ], 'sqs' => [ @@ -52,9 +54,10 @@ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), - 'queue' => env('SQS_QUEUE', 'your-queue-name'), + 'queue' => env('SQS_QUEUE', 'default'), 'suffix' => env('SQS_SUFFIX'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, ], 'redis' => [ @@ -63,6 +66,7 @@ 'queue' => env('REDIS_QUEUE', 'default'), 'retry_after' => 90, 'block_for' => null, + 'after_commit' => false, ], ], diff --git a/config/trustedproxy.php b/config/trustedproxy.php index 5204cd7bde6..85b7b273280 100644 --- a/config/trustedproxy.php +++ b/config/trustedproxy.php @@ -33,6 +33,9 @@ * * @link https://symfony.com/doc/current/deployment/proxies.html */ - 'headers' => Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT - | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_PREFIX, + 'headers' => Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB, ]; diff --git a/database/migrations/2019_10_06_152017_add_force_32bit_ids.php b/database/migrations/2019_10_06_152017_add_force_32bit_ids.php index 5cd0ba44edc..b5c83df1623 100644 --- a/database/migrations/2019_10_06_152017_add_force_32bit_ids.php +++ b/database/migrations/2019_10_06_152017_add_force_32bit_ids.php @@ -2,6 +2,7 @@ use App\Models\Configs; use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; class AddForce32BitIds extends Migration { diff --git a/database/migrations/2020_06_04_104605_config_editor_enabled.php b/database/migrations/2020_06_04_104605_config_editor_enabled.php index ead9a4914cd..c4e22cb0c40 100644 --- a/database/migrations/2020_06_04_104605_config_editor_enabled.php +++ b/database/migrations/2020_06_04_104605_config_editor_enabled.php @@ -2,6 +2,7 @@ use App\Models\Configs; use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; class ConfigEditorEnabled extends Migration { diff --git a/database/migrations/2020_07_11_104605_config_lossless_optimization.php b/database/migrations/2020_07_11_104605_config_lossless_optimization.php index dda147977db..4c5e203b9ff 100644 --- a/database/migrations/2020_07_11_104605_config_lossless_optimization.php +++ b/database/migrations/2020_07_11_104605_config_lossless_optimization.php @@ -2,6 +2,7 @@ use App\Models\Configs; use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; class ConfigLosslessOptimization extends Migration { diff --git a/database/migrations/2020_07_26_085322_config_swipe_tolerance.php b/database/migrations/2020_07_26_085322_config_swipe_tolerance.php index 3a17c29e940..fcf6489fff4 100644 --- a/database/migrations/2020_07_26_085322_config_swipe_tolerance.php +++ b/database/migrations/2020_07_26_085322_config_swipe_tolerance.php @@ -2,6 +2,7 @@ use App\Models\Configs; use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; class ConfigSwipeTolerance extends Migration { diff --git a/database/migrations/2020_07_29_132731_config_local_takestamp.php b/database/migrations/2020_07_29_132731_config_local_takestamp.php index 89560099479..268297a97e1 100644 --- a/database/migrations/2020_07_29_132731_config_local_takestamp.php +++ b/database/migrations/2020_07_29_132731_config_local_takestamp.php @@ -2,6 +2,7 @@ use App\Models\Configs; use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; class ConfigLocalTakestamp extends Migration { diff --git a/database/migrations/2020_10_15_104504_add_log_max_num_line.php b/database/migrations/2020_10_15_104504_add_log_max_num_line.php index a1d6c45048f..63e08340ca1 100644 --- a/database/migrations/2020_10_15_104504_add_log_max_num_line.php +++ b/database/migrations/2020_10_15_104504_add_log_max_num_line.php @@ -2,6 +2,7 @@ use App\Models\Configs; use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; class AddLogMaxNumLine extends Migration { diff --git a/database/migrations/2020_11_12_183345_config_password_url_param_for_smart_album.php b/database/migrations/2020_11_12_183345_config_password_url_param_for_smart_album.php index b51884737ba..cf768c35c71 100644 --- a/database/migrations/2020_11_12_183345_config_password_url_param_for_smart_album.php +++ b/database/migrations/2020_11_12_183345_config_password_url_param_for_smart_album.php @@ -2,6 +2,7 @@ use App\Models\Configs; use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; class ConfigPasswordUrlParamForSmartAlbum extends Migration { diff --git a/database/migrations/2020_12_12_203831_create_web_authn_tables.php b/database/migrations/2020_12_12_203831_create_web_authn_tables.php index 62de4aac9d3..394d5688f0a 100644 --- a/database/migrations/2020_12_12_203831_create_web_authn_tables.php +++ b/database/migrations/2020_12_12_203831_create_web_authn_tables.php @@ -1,9 +1,7 @@ string('id', 255); - - // Change accordingly for your users table if you need to. - $table->unsignedBigInteger('user_id'); - - $table->string('name')->nullable(); - $table->string('type', 16); - $table->json('transports'); - $table->json('attestation_type'); - $table->json('trust_path'); - $table->uuid('aaguid'); - $table->binary('public_key'); - $table->unsignedInteger('counter')->default(0); - - // This saves the external "ID" that identifies the user. We use UUID default - // since it's very straightforward. You can change this for a plain string. - // It must be nullable because those old U2F keys do not use user handle. - $table->uuid('user_handle')->nullable(); - - $table->timestamps(); - $table->softDeletes(WebAuthnCredential::DELETED_AT); - Configs::where('key', '=', 'username')->orWhere('key', '=', 'password')->update(['type_range' => STRING]); - - $table->primary(['id', 'user_id']); - }); } /** @@ -52,10 +22,8 @@ public function up() */ public function down() { - defined('STRING_REQ') or define('STRING_REQ', 'string_required'); - if (Schema::hasTable('configs')) { - Configs::where('key', '=', 'username')->orWhere('key', '=', 'password')->update(['type_range' => STRING_REQ]); + Configs::where('key', '=', 'username')->orWhere('key', '=', 'password')->update(['type_range' => 'string_required']); } Schema::dropIfExists('web_authn_credentials'); } diff --git a/database/migrations/2020_12_18_162155_add_nsfw_album.php b/database/migrations/2020_12_18_162155_add_nsfw_album.php index 5c19d454b0f..361416a35d3 100644 --- a/database/migrations/2020_12_18_162155_add_nsfw_album.php +++ b/database/migrations/2020_12_18_162155_add_nsfw_album.php @@ -3,6 +3,7 @@ use App\Models\Configs; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; class AddNsfwAlbum extends Migration diff --git a/database/migrations/2021_01_30_111736_display_takedate.php b/database/migrations/2021_01_30_111736_display_takedate.php index 55c5a8ad0a4..579bc56ab5b 100644 --- a/database/migrations/2021_01_30_111736_display_takedate.php +++ b/database/migrations/2021_01_30_111736_display_takedate.php @@ -2,6 +2,7 @@ use App\Models\Configs; use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; class DisplayTakedate extends Migration { diff --git a/database/migrations/2021_12_04_181200_refactor_models.php b/database/migrations/2021_12_04_181200_refactor_models.php index 4d156bf1805..d3cff789131 100644 --- a/database/migrations/2021_12_04_181200_refactor_models.php +++ b/database/migrations/2021_12_04_181200_refactor_models.php @@ -13,7 +13,7 @@ use Illuminate\Support\Facades\Storage; use Kalnoy\Nestedset\Node; use Kalnoy\Nestedset\NodeTrait; -use League\Flysystem\FileNotFoundException; +use League\Flysystem\FilesystemException; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Output\ConsoleSectionOutput; @@ -280,7 +280,7 @@ public function up() $this->createSizeVariantTableUp(); $this->createSymLinkTableUp(); $this->createRemainingForeignConstraints(); - $this->createWebAuthnTableUp(); + // $this->createWebAuthnTableUp(); $this->createPageTableUp(); $this->createPageContentTableUp(); $this->createLogTableUp(); @@ -319,7 +319,7 @@ public function down() $this->createUserAlbumTableDown(); $this->createPhotoTableDown(); $this->createSymLinkTableDown(); - $this->createWebAuthnTableDown(); + // $this->createWebAuthnTableDown(); $this->createPageTableDown(); $this->createPageContentTableDown(); $this->createLogTableDown(); @@ -388,10 +388,12 @@ private function renameTables(): void $this->dropIndexIfExists($table, 'photos_album_id_is_starred_type_index'); }); Schema::rename('photos', 'photos_tmp'); - Schema::table('web_authn_credentials', function (Blueprint $table) { - $this->dropForeignIfExists($table, 'web_authn_credentials_user_id_foreign'); - }); - Schema::rename('web_authn_credentials', 'web_authn_credentials_tmp'); + if (Schema::hasTable('web_authn_credentials')) { + Schema::table('web_authn_credentials', function (Blueprint $table) { + $this->dropForeignIfExists($table, 'web_authn_credentials_user_id_foreign'); + }); + Schema::rename('web_authn_credentials', 'web_authn_credentials_tmp'); + } Schema::table('users', function (Blueprint $table) { $this->dropUniqueIfExists($table, 'users_username_unique'); $this->dropUniqueIfExists($table, 'users_email_unique'); @@ -417,7 +419,9 @@ private function dropTemporaryTablesUp(): void DB::table('albums_tmp')->update(['cover_id' => null]); Schema::drop('photos_tmp'); Schema::drop('albums_tmp'); - Schema::drop('web_authn_credentials_tmp'); + if (Schema::hasTable('web_authn_credentials_tmp')) { + Schema::drop('web_authn_credentials_tmp'); + } Schema::drop('users_tmp'); Schema::drop('page_contents_tmp'); Schema::drop('pages_tmp'); @@ -442,7 +446,9 @@ private function dropTemporaryTablesDown(): void Schema::drop('albums_tmp'); Schema::drop('tag_albums'); Schema::drop('base_albums'); - Schema::drop('web_authn_credentials_tmp'); + if (Schema::hasTable('web_authn_credentials_tmp')) { + Schema::drop('web_authn_credentials_tmp'); + } Schema::drop('users_tmp'); Schema::drop('page_contents_tmp'); Schema::drop('pages_tmp'); @@ -986,40 +992,40 @@ private function renamePageContentTable(): void Schema::drop('page_contents'); } - private function createWebAuthnTable(int $precision): void - { - Schema::create('web_authn_credentials', function (Blueprint $table) use ($precision) { - $table->string('id', 255); - $table->dateTime('created_at', $precision)->nullable(false); - $table->dateTime('updated_at', $precision)->nullable(false); - $table->dateTime('disabled_at', $precision)->nullable(true); - $table->unsignedInteger('user_id')->nullable(false); - $table->string('name')->nullable(); - $table->string('type', 16); - $table->json('transports'); - $table->json('attestation_type'); - $table->json('trust_path'); - $table->uuid('aaguid'); - $table->binary('public_key'); - $table->unsignedInteger('counter')->default(0); - $table->uuid('user_handle')->nullable(); - // Indices - $table->primary(['id', 'user_id']); - $table->foreign('user_id') - ->references('id')->on('users') - ->cascadeOnDelete(); - }); - } - - private function createWebAuthnTableUp(): void - { - $this->createWebAuthnTable(6); - } - - private function createWebAuthnTableDown(): void - { - $this->createWebAuthnTable(0); - } + // private function createWebAuthnTable(int $precision): void + // { + // Schema::create('web_authn_credentials', function (Blueprint $table) use ($precision) { + // $table->string('id', 255); + // $table->dateTime('created_at', $precision)->nullable(false); + // $table->dateTime('updated_at', $precision)->nullable(false); + // $table->dateTime('disabled_at', $precision)->nullable(true); + // $table->unsignedInteger('user_id')->nullable(false); + // $table->string('name')->nullable(); + // $table->string('type', 16); + // $table->json('transports'); + // $table->json('attestation_type'); + // $table->json('trust_path'); + // $table->uuid('aaguid'); + // $table->binary('public_key'); + // $table->unsignedInteger('counter')->default(0); + // $table->uuid('user_handle')->nullable(); + // // Indices + // $table->primary(['id', 'user_id']); + // $table->foreign('user_id') + // ->references('id')->on('users') + // ->cascadeOnDelete(); + // }); + // } + + // private function createWebAuthnTableUp(): void + // { + // $this->createWebAuthnTable(6); + // } + + // private function createWebAuthnTableDown(): void + // { + // $this->createWebAuthnTable(0); + // } /** * Creates remaining foreign constraints which could not immediately be @@ -1428,7 +1434,7 @@ private function downgradeCopy(): void if ($sizeVariant->short_path !== $expectedShortPath) { try { Storage::move($sizeVariant->short_path, $expectedShortPath); - } catch (FileNotFoundException $e) { + } catch (FilesystemException $e) { // sic! just ignore // This exception is thrown if there are duplicate // photos which point to the same physical file. @@ -1476,27 +1482,29 @@ private function downgradeCopy(): void */ private function copyStructurallyUnchangedTables(): void { - $pgBar = $this->getProgressBar('web_authn_credentials'); - $credentials = DB::table('web_authn_credentials_tmp')->get(); - $pgBar->setMaxSteps($credentials->count()); - foreach ($credentials as $credential) { - $pgBar->advance(); - DB::table('web_authn_credentials')->insert([ - 'id' => $credential->id, - 'created_at' => $credential->created_at, - 'updated_at' => $credential->updated_at, - 'disabled_at' => $credential->disabled_at, - 'user_id' => $credential->user_id, - 'name' => $credential->name, - 'type' => $credential->type, - 'transports' => $credential->transports, - 'attestation_type' => $credential->attestation_type, - 'trust_path' => $credential->trust_path, - 'aaguid' => $credential->aaguid, - 'public_key' => $credential->public_key, - 'counter' => $credential->counter, - 'user_handle' => $credential->user_handle, - ]); + if (Schema::hasTable('web_authn_credentials')) { + $pgBar = $this->getProgressBar('web_authn_credentials'); + $credentials = DB::table('web_authn_credentials_tmp')->get(); + $pgBar->setMaxSteps($credentials->count()); + foreach ($credentials as $credential) { + $pgBar->advance(); + DB::table('web_authn_credentials')->insert([ + 'id' => $credential->id, + 'created_at' => $credential->created_at, + 'updated_at' => $credential->updated_at, + 'disabled_at' => $credential->disabled_at, + 'user_id' => $credential->user_id, + 'name' => $credential->name, + 'type' => $credential->type, + 'transports' => $credential->transports, + 'attestation_type' => $credential->attestation_type, + 'trust_path' => $credential->trust_path, + 'aaguid' => $credential->aaguid, + 'public_key' => $credential->public_key, + 'counter' => $credential->counter, + 'user_handle' => $credential->user_handle, + ]); + } } $pgBar = $this->getProgressBar('pages'); @@ -2044,7 +2052,9 @@ private function ensureDBConsistency(): void // If the album of a photo is missing, assign it to root (unsorted) album $isConsistent &= $checkRelation('photo', 'photos', 'album_id', 'album', 'albums', 'nullify'); // Delete orphaned WebAuthn credentials - $isConsistent &= $checkRelation('web authentication credential', 'web_authn_credentials', 'user_id', 'user', 'users', 'delete'); + if (Schema::hasTable('web_authn_credentials')) { + $isConsistent &= $checkRelation('web authentication credential', 'web_authn_credentials', 'user_id', 'user', 'users', 'delete'); + } // There is no obvious fix for orphaned page content $isConsistent &= $checkRelation('page content', 'page_contents', 'page_id', 'page', 'pages'); diff --git a/database/migrations/2022_07_09_130303_create_webauthn_credentials.php b/database/migrations/2022_07_09_130303_create_webauthn_credentials.php new file mode 100644 index 00000000000..57e36a34cde --- /dev/null +++ b/database/migrations/2022_07_09_130303_create_webauthn_credentials.php @@ -0,0 +1,79 @@ +timestamp('last_login_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + Schema::dropIfExists('webauthn_credentials'); + } + + /** + * Generate the default blueprint for the WebAuthn credentials table. + * + * @param \Illuminate\Database\Schema\Blueprint $table + * + * @return void + */ + protected static function defaultBlueprint(Blueprint $table): void + { + $table->string('id')->primary(); + + $table->morphs('authenticatable', 'webauthn_user_index'); + + // This is the user UUID that is generated automatically when a credential for the + // given user is created. If a second credential is created, this UUID is queried + // and then copied on top of the new one, this way the real User ID doesn't change. + $table->uuid('user_id'); + + // The app may allow the user to name or rename a credential to a friendly name, + // like "John's iPhone" or "Office Computer". + $table->string('alias')->nullable(); + + // Allows to detect cloned credentials when the assertion does not have this same counter. + $table->unsignedBigInteger('counter')->nullable(); + // Who created the credential. Should be the same reported by the Authenticator. + $table->string('rp_id'); + // Where the credential was created. Should be the same reported by the Authenticator. + $table->string('origin'); + $table->json('transports')->nullable(); + $table->uuid('aaguid')->nullable(); // GUID are essentially UUID + + // This is the public key the credential uses to verify the challenges. + $table->text('public_key'); + // The attestation of the public key. + $table->string('attestation_format')->default('none'); + // This would hold the certificate chain for other different attestation formats. + $table->json('certificates')->nullable(); + + // A way to disable the credential without deleting it. + $table->timestamp('disabled_at')->nullable(); + $table->timestamps(); + } +}; \ No newline at end of file diff --git a/resources/lang/en/auth.php b/lang/en/auth.php similarity index 100% rename from resources/lang/en/auth.php rename to lang/en/auth.php diff --git a/resources/lang/en/pagination.php b/lang/en/pagination.php similarity index 100% rename from resources/lang/en/pagination.php rename to lang/en/pagination.php diff --git a/resources/lang/en/passwords.php b/lang/en/passwords.php similarity index 100% rename from resources/lang/en/passwords.php rename to lang/en/passwords.php diff --git a/resources/lang/en/validation.php b/lang/en/validation.php similarity index 100% rename from resources/lang/en/validation.php rename to lang/en/validation.php diff --git a/phpstan.neon b/phpstan.neon index 322b83373db..4f6a4a1e506 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -3,9 +3,11 @@ includes: - vendor/lychee-org/phpstan-lychee/phpstan.neon parameters: + checkGenericClassInNonGenericObjectType: false paths: - app - scripts + - lang excludePaths: - app/View/* - app/Http/Livewire/* @@ -34,20 +36,26 @@ parameters: - '#Return type \(Illuminate\\Support\\Carbon\|null\) of method App\\Models\\.*::asDateTime\(\) should be covariant with return type \(Illuminate\\Support\\Carbon\) of method Illuminate\\Database\\Eloquent\\Model::asDateTime\(\)#' - '#Return type \(App\\Models\\Photo\) of method App\\Models\\Photo::replicate\(\) should be covariant with return type \(static\(.*\)\) of method Illuminate\\Database\\Eloquent\\Model::replicate\(\)#' - '#Return type \(Illuminate\\Support\\Collection&iterable\) of method App\\Http\\Requests\\Album\\.*::albums\(\) should be covariant with return type \(Illuminate\\Support\\Collection&iterable\) of method App\\Http\\Requests\\Contracts\\HasAlbums::albums\(\)#' - - '#Parameter \#1 \$column \(array\|Closure\|Illuminate\\Database\\Query\\Expression\|string\) of method .* should be contravariant with parameter \$column \(array\|Closure\|Illuminate\\Database\\Query\\Expression\|string\) of method .*#' + - + message: '#Parameter \#1 \$column \(array\|Closure\|Illuminate\\Database\\Query\\Expression\|string\) of method .* should be contravariant with parameter \$column \(array\|\(Closure.*\)\|\(Closure.*\)\|Illuminate\\Database\\Query\\Expression\|string\) of method .*#' + paths: + - app/Models/Extensions/FixedQueryBuilderTrait.php - '#Parameter \#1 \$models \(array<.*>\) of method .*::initRelation\(\) should be contravariant with parameter \$models \(array\) of method .*::initRelation\(\)#' - '#Parameter \#1 \$models \(array<.*>\) of method .*::match\(\) should be contravariant with parameter \$models \(array\) of method .*::match\(\)#' - '#Parameter \#1 \$models \(array<.*>\) of method .*::addEagerConstraints\(\) should be contravariant with parameter \$models \(array\) of method .*::addEagerConstraints\(\)#' - '#Parameter \#1 \$albums \(array<.*>\) of method .*::addEagerConstraints\(\) should be contravariant with parameter \$models \(array\) of method .*::addEagerConstraints\(\)#' + - '#Parameter \#1 \$key of method .*::partition\(\) expects \(callable\(.*\): bool\)\|Illuminate\\Database\\Eloquent\\Model\|string, Closure\(.*\): bool given.#' + + - '#Call to an undefined( static)? method Kalnoy\\Nestedset\\.*::(whereIn|select|join|leftJoin|orderBy|addSelect)\(\)#' - '#Parameter .* of method .*::newEloquentBuilder\(\) should be contravariant with parameter \$query \(mixed\) of method Kalnoy\\Nestedset\\Node::newEloquentBuilder\(\)#' - '#Call to an undefined method Geocoder\\Location::getDisplayName\(\)#' - '#Call to an undefined method COM::getfolder\(\).#' - - '#Call to an undefined method League\\Flysystem\\FilesystemInterface::getAdapter\(\)#' + - '#Dynamic call to static method Laragear\\WebAuthn\\Http\\Requests\\AssertionRequest::validate\(\).#' - - '#Property .* \(App\\Models\\.*(\|null)?\) does not accept (Illuminate\\Database\\Eloquent\\Collection\|)?Illuminate\\Database\\Eloquent\\Model(\|null)?.#' - - '#Property .* \(Illuminate\\Database\\Eloquent\\Collection\) does not accept Illuminate\\Database\\Eloquent\\Collection(\|Illuminate\\Database\\Eloquent\\Model)?.#' + - '#Property .* \(App\\Models\\.*(\|null)?\) does not accept (Illuminate\\Database\\Eloquent\\Collection\|)?Illuminate\\Database\\Eloquent\\Model(\|null)?.#' + - '#Property .* \(Illuminate\\Database\\Eloquent\\Collection&iterable\) does not accept Illuminate\\Database\\Eloquent\\Collection(\|Illuminate\\Database\\Eloquent\\Model)?.#' # False positive as stub code for PHP has not yet been updated to 2nd parameter, see https://github.com/php/doc-en/issues/1529 and https://www.php.net/imagick.writeimagefile - '#Method Imagick::writeImageFile\(\) invoked with 2 parameters, 1 required#' diff --git a/public/Lychee-front b/public/Lychee-front index ab0f314cac7..b515fb42283 160000 --- a/public/Lychee-front +++ b/public/Lychee-front @@ -1 +1 @@ -Subproject commit ab0f314cac720b28fbe1689a482bdd3af0f18efe +Subproject commit b515fb42283da1692a9d3dc7935a089fdd3a5281 diff --git a/public/dist/Larapass.js b/public/dist/Larapass.js deleted file mode 100644 index 7459055b5be..00000000000 --- a/public/dist/Larapass.js +++ /dev/null @@ -1,295 +0,0 @@ -/** - * MIT License - * - * Copyright (c) Italo Israel Baeza Cabrera - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -class Larapass -{ - /** - * Headers to use in ALL requests done. - * - * @type {{Accept: string, "X-Requested-With": string, "Content-Type": string}} - */ - headers = { - 'Content-Type': 'application/json', - 'Accept': 'application/json', - 'X-Requested-With': 'XMLHttpRequest' - }; - - /** - * Routes for WebAuthn assertion (login) and attestation (register). - * - * @type {{registerOptions: string, loginOptions: string, login: string, register: string}} - */ - routes = { - loginOptions: 'webauthn/login/options', - login: 'webauthn/login', - registerOptions: 'webauthn/register/options', - register: 'webauthn/register', - } - - /** - * Create a new Larapass instance. - * - * @param routes {{registerOptions: string, loginOptions: string, login: string, register: string}} - * @param headers {{string}} - */ - constructor(routes = {}, headers = {}) - { - this.routes = {...this.routes, ...routes}; - - this.headers = { - ...this.headers, - ...headers - } - - // If the developer didn't issue an XSRF token, we will find it ourselves. - if (headers['X-XSRF-TOKEN'] === undefined) { - this.headers['X-XSRF-TOKEN'] = Larapass.#getXsrfToken() - } - } - - /** - * Returns the XSRF token if it exists. - * - * @returns string|undefined - * @throws TypeError - */ - static #getXsrfToken() - { - let tokenContainer; - - // First, let's get the token if it exists as a cookie, since most apps use it by default. - tokenContainer = document.cookie.split('; ').find(row => row.startsWith('XSRF-TOKEN')) - if (tokenContainer !== undefined) { - return decodeURIComponent(tokenContainer.split('=')[1]); - } - - // If it doesn't exists, we will try to get it from the head meta tags as last resort. - tokenContainer = document.getElementsByName('csrf-token')[0]; - if (tokenContainer !== undefined) { - return tokenContainer.content; - } - - throw new TypeError('There is no cookie with "X-XSRF-TOKEN" or meta tag with "csrf-token".') - } - - /** - * Returns a fetch promise to resolve later. - * - * @param data {{string}} - * @param route {string} - * @param headers {{string}} - * @returns {Promise} - */ - #fetch(data, route, headers = {}) - { - return fetch(route, { - method: 'POST', - credentials: 'same-origin', - redirect: 'error', - headers: {...this.headers, ...headers}, - body: JSON.stringify(data) - }) - } - - /** - * Decodes a BASE64 URL string into a normal string. - * - * @param input {string} - * @returns {string|Iterable} - */ - static #base64UrlDecode(input) - { - input = input.replace(/-/g, '+').replace(/_/g, '/'); - - const pad = input.length % 4; - if (pad) { - if (pad === 1) { - throw new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding'); - } - input += new Array(5-pad).join('='); - } - - return window.atob(input); - } - - /** - * Transform an string into Uint8Array instance. - * - * @param input {string} - * @param atob {boolean} - * @returns {Uint8Array} - */ - static #uint8Array(input, atob = false) - { - return Uint8Array.from( - atob ? window.atob(input) : Larapass.#base64UrlDecode(input), - c => c.charCodeAt(0) - ) - } - - /** - * Encodes an array of bytes to a BASE64 URL string - * - * @param arrayBuffer {ArrayBuffer|Uint8Array} - * @returns {string} - */ - static #arrayToBase64String(arrayBuffer) - { - return btoa(String.fromCharCode(...new Uint8Array(arrayBuffer))); - } - - /** - * Parses the Public Key Options received from the Server for the browser. - * - * @param publicKey {Object} - * @returns {Object} - */ - #parseIncomingServerOptions(publicKey) - { - publicKey.challenge = Larapass.#uint8Array(publicKey.challenge) - - if (publicKey.user !== undefined) { - publicKey.user = { - ...publicKey.user, - id: Larapass.#uint8Array(publicKey.user.id, true), - }; - } - - ['excludeCredentials', 'allowCredentials'] - .filter(key => publicKey[key] !== undefined) - .forEach(key => { - publicKey[key] = publicKey[key].map( - data => { - return { - ...data, - id: Larapass.#uint8Array(data.id), - }; - } - ) - }) - - return publicKey; - } - - /** - * Parses the outgoing credentials from the browser to the server. - * - * @param credentials {Credential|PublicKeyCredential} - * @return {{response: {string}, rawId: string, id: string, type: string}} - */ - #parseOutgoingCredentials(credentials) - { - let parseCredentials = { - id: credentials.id, - type: credentials.type, - rawId: Larapass.#arrayToBase64String(credentials.rawId), - response: {}, - }; - - ['clientDataJSON', 'attestationObject', 'authenticatorData', 'signature', 'userHandle'] - .filter(key => credentials.response[key] !== undefined) - .forEach(key => { - parseCredentials.response[key] = Larapass.#arrayToBase64String(credentials.response[key]); - }) - - return parseCredentials; - } - - /** - * Checks if the browser supports WebAuthn. - * - * @returns {boolean} - */ - static supportsWebAuthn() - { - return typeof(PublicKeyCredential) != 'undefined'; - } - - /** - * Handles the response from the Server. - * - * Throws the entire response if is not OK (HTTP 2XX). - * - * @param response {Response} - * @returns Promise - * @throws Response - */ - static #handleResponse(response) - { - if (! response.ok) { - throw response; - } - - // Here we will do a small trick. Since most of the responses from the server - // are JSON, we will automatically parse the JSON body from the response. If - // it's not JSON, we will push the body verbatim and let the dev handle it. - return new Promise(resolve => { - response.json() - .then(json => resolve(json)) - .catch(() => resolve(response.body)) - }) - } - - /** - * Log in an user with his credentials. - * - * If no credentials are given, Larapass can return a blank assertion for typeless login. - * - * @param data {{string}} - * @param headers {{string}} - * @returns Promise - */ - async login(data = {}, headers = {}) - { - const optionsResponse = await this.#fetch(data, this.routes.loginOptions) - const json = await optionsResponse.json() - const publicKey = this.#parseIncomingServerOptions(json) - const credentials = await navigator.credentials.get({publicKey}) - const publicKeyCredential = this.#parseOutgoingCredentials(credentials) - - return await this.#fetch(publicKeyCredential, this.routes.login, headers) - .then(Larapass.#handleResponse); - } - - /** - * Register the user credentials from the browser/device. - * - * You can add data if you are planning to register an user with WebAuthn from scratch. - * - * @param data {{string}} - * @param headers {{string}} - * @returns Promise - */ - async register(data = {}, headers = {}) - { - const optionsResponse = await this.#fetch(data, this.routes.registerOptions) - const json = await optionsResponse.json() - const publicKey = this.#parseIncomingServerOptions(json) - const credentials = await navigator.credentials.create({publicKey}) - const publicKeyCredential = this.#parseOutgoingCredentials(credentials) - - return await this.#fetch(publicKeyCredential, this.routes.register, headers) - .then(Larapass.#handleResponse); - } -} \ No newline at end of file diff --git a/public/dist/WebAuthn.js b/public/dist/WebAuthn.js new file mode 100644 index 00000000000..ab32c4e681f --- /dev/null +++ b/public/dist/WebAuthn.js @@ -0,0 +1,356 @@ +/** + * MIT License + * + * Copyright (c) Italo Israel Baeza Cabrera + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + class WebAuthn { + /** + * Routes for WebAuthn assertion (login) and attestation (register). + * + * @type {{registerOptions: string, register: string, loginOptions: string, login: string, }} + */ + #routes = { + registerOptions: "WebAuthn/register/options", + register: "WebAuthn/register", + loginOptions: "WebAuthn/login/options", + login: "WebAuthn/login", + } + + /** + * Headers to use in ALL requests done. + * + * @type {{Accept: string, "Content-Type": string, "X-Requested-With": string}} + */ + #headers = { + "Accept": "application/json", + "Content-Type": "application/json", + "X-Requested-With": "XMLHttpRequest" + }; + + /** + * If set to true, the credentials option will be set to 'include' on all fetch calls, + * or else it will use the default 'same-origin'. Use this if the backend is not the + * same origin as the client or the XSRF protection will break without the session. + * + * @type {boolean} + */ + #includeCredentials = false + + /** + * Create a new WebAuthn instance. + * + * @param routes {{registerOptions: string, register: string, loginOptions: string, login: string}} + * @param headers {{string}} + * @param includeCredentials {boolean} + * @param xcsrfToken {string|null} Either a csrf token (40 chars) or xsrfToken (224 chars) + */ + constructor(routes = {}, headers = {}, includeCredentials = false, xcsrfToken = null) { + Object.assign(this.#routes, routes); + Object.assign(this.#headers, headers); + + this.#includeCredentials = includeCredentials; + + let xsrfToken; + let csrfToken; + + if (xcsrfToken === null) { + // If the developer didn't issue an XSRF token, we will find it ourselves. + xsrfToken = WebAuthn.#XsrfToken; + csrfToken = WebAuthn.#firstInputWithCsrfToken; + } else{ + // Check if it is a CSRF or XSRF token + if (xcsrfToken.length === 40) { + csrfToken = xcsrfToken; + } else if (xcsrfToken.length === 224) { + xsrfToken = xcsrfToken; + } else { + throw new TypeError('CSRF token or XSRF token provided does not match requirements. Must be 40 or 224 characters.'); + } + } + + if (xsrfToken !== null) { + this.#headers["X-XSRF-TOKEN"] ??= xsrfToken; + } else if (csrfToken !== null) { + this.#headers["X-CSRF-TOKEN"] ??= csrfToken; + } else { + // We didn't find it, and since is required, we will bail out. + throw new TypeError('Ensure a CSRF/XSRF token is manually set, or provided in a cookie "XSRF-TOKEN" or or there is meta tag named "csrf-token".'); + } + } + + /** + * Returns the CSRF token if it exists as a form input tag. + * + * @returns string + * @throws TypeError + */ + static get #firstInputWithCsrfToken() { + // First, try finding an CSRF Token in the head. + let token = Array.from(document.head.getElementsByTagName("meta")) + .find(element => element.name === "csrf-token"); + + if (token) { + return token.content; + } + + // Then, try to find a hidden input containing the CSRF token. + token = Array.from(document.getElementsByTagName('input')) + .find(input => input.name === "_token" && input.type === "hidden") + + if (token) { + return token.value; + } + + return null; + } + + /** + * Returns the value of the XSRF token if it exists in a cookie. + * + * Inspired by https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#example_2_get_a_sample_cookie_named_test2 + * + * @returns {?string} + */ + static get #XsrfToken() { + const cookie = document.cookie.split(";").find((row) => /^\s*(X-)?[XC]SRF-TOKEN\s*=/.test(row)); + // We must remove all '%3D' from the end of the string. + // Background: + // The actual binary value of the CSFR value is encoded in Base64. + // If the length of original, binary value is not a multiple of 3 bytes, + // the encoding gets padded with `=` on the right; i.e. there might be + // zero, one or two `=` at the end of the encoded value. + // If the value is sent from the server to the client as part of a cookie, + // the `=` character is URL-encoded as `%3D`, because `=` is already used + // to separate a cookie key from its value. + // When we send back the value to the server as part of an AJAX request, + // Laravel expects an unpadded value. + // Hence, we must remove the `%3D`. + return cookie ? cookie.split("=")[1].trim().replaceAll("%3D", "") : null; + }; + + /** + * Returns a fetch promise to resolve later. + * + * @param data {Object} + * @param route {string} + * @param headers {{string}} + * @returns {Promise} + */ + #fetch(data, route, headers = {}) { + return fetch(route, { + method: "POST", + credentials: this.#includeCredentials ? "include" : "same-origin", + redirect: "error", + headers: {...this.#headers, ...headers}, + body: JSON.stringify(data) + }); + } + + /** + * Decodes a BASE64 URL string into a normal string. + * + * @param input {string} + * @returns {string|Iterable} + */ + static #base64UrlDecode(input) { + input = input.replace(/-/g, "+").replace(/_/g, "/"); + + const pad = input.length % 4; + + if (pad) { + if (pad === 1) { + throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding"); + } + + input += new Array(5 - pad).join("="); + } + + return atob(input); + } + + /** + * Transform a string into Uint8Array instance. + * + * @param input {string} + * @param useAtob {boolean} + * @returns {Uint8Array} + */ + static #uint8Array(input, useAtob = false) { + return Uint8Array.from( + useAtob ? atob(input) : WebAuthn.#base64UrlDecode(input), c => c.charCodeAt(0) + ); + } + + /** + * Encodes an array of bytes to a BASE64 URL string + * + * @param arrayBuffer {ArrayBuffer|Uint8Array} + * @returns {string} + */ + static #arrayToBase64String(arrayBuffer) { + return btoa(String.fromCharCode(...new Uint8Array(arrayBuffer))); + } + + /** + * Parses the Public Key Options received from the Server for the browser. + * + * @param publicKey {Object} + * @returns {Object} + */ + #parseIncomingServerOptions(publicKey) { + console.debug(publicKey); + + publicKey.challenge = WebAuthn.#uint8Array(publicKey.challenge); + + if ('user' in publicKey) { + publicKey.user = { + ...publicKey.user, + id: WebAuthn.#uint8Array(publicKey.user.id) + }; + } + + [ + "excludeCredentials", + "allowCredentials" + ] + .filter(key => key in publicKey) + .forEach(key => { + publicKey[key] = publicKey[key].map(data => { + return {...data, id: WebAuthn.#uint8Array(data.id)}; + }); + }); + + return publicKey; + } + + /** + * Parses the outgoing credentials from the browser to the server. + * + * @param credentials {Credential|PublicKeyCredential} + * @return {{response: {string}, rawId: string, id: string, type: string}} + */ + #parseOutgoingCredentials(credentials) { + let parseCredentials = { + id: credentials.id, + type: credentials.type, + rawId: WebAuthn.#arrayToBase64String(credentials.rawId), + response: {} + }; + + [ + "clientDataJSON", + "attestationObject", + "authenticatorData", + "signature", + "userHandle" + ] + .filter(key => key in credentials.response) + .forEach(key => parseCredentials.response[key] = WebAuthn.#arrayToBase64String(credentials.response[key])); + + return parseCredentials; + } + + /** + * Handles the response from the Server. + * + * Throws the entire response if is not OK (HTTP 2XX). + * + * @param response {Response} + * @returns Promise + * @throws Response + */ + static #handleResponse(response) { + if (!response.ok) { + throw response; + } + + // Here we will do a small trick. Since most of the responses from the server + // are JSON, we will automatically parse the JSON body from the response. If + // it's not JSON, we will push the body verbatim and let the dev handle it. + return new Promise((resolve) => { + response + .json() + .then((json) => resolve(json)) + .catch(() => resolve(response.body)); + }); + } + + /** + * Register the user credentials from the browser/device. + * + * You can add request input if you are planning to register a user with WebAuthn from scratch. + * + * @param request {{string}} + * @param response {{string}} + * @returns Promise + */ + async register(request = {}, response = {}) { + const optionsResponse = await this.#fetch(request, this.#routes.registerOptions); + const json = await optionsResponse.json(); + const publicKey = this.#parseIncomingServerOptions(json); + const credentials = await navigator.credentials.create({publicKey}); + const publicKeyCredential = this.#parseOutgoingCredentials(credentials); + + Object.assign(publicKeyCredential, response); + + return await this.#fetch(publicKeyCredential, this.#routes.register).then(WebAuthn.#handleResponse); + } + + /** + * Log in a user with his credentials. + * + * If no credentials are given, the app may return a blank assertion for userless login. + * + * @param request {{string}} + * @param response {{string}} + * @returns Promise + */ + async login(request = {}, response = {}) { + const optionsResponse = await this.#fetch(request, this.#routes.loginOptions); + const json = await optionsResponse.json(); + const publicKey = this.#parseIncomingServerOptions(json); + const credentials = await navigator.credentials.get({publicKey}); + const publicKeyCredential = this.#parseOutgoingCredentials(credentials); + + Object.assign(publicKeyCredential, response); + + return await this.#fetch(publicKeyCredential, this.#routes.login, response).then(WebAuthn.#handleResponse); + } + + /** + * Checks if the browser supports WebAuthn. + * + * @returns {boolean} + */ + static supportsWebAuthn() { + return typeof PublicKeyCredential != "undefined"; + } + + /** + * Checks if the browser doesn't support WebAuthn. + * + * @returns {boolean} + */ + static doesntSupportWebAuthn() { + return !this.supportsWebAuthn(); + } +} diff --git a/public/dist/frame.js b/public/dist/frame.js index d685d7c3260..07f9f5b5fe6 100644 --- a/public/dist/frame.js +++ b/public/dist/frame.js @@ -1,5 +1,5 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0", " $", ""], ["$", ""]), _templateObject35 = _taggedTemplateLiteral(["
", "
"], ["
", "
"]), _templateObject36 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t

\n\t\t\tSave\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t

\n\t\t\tSave\n\t\t\tDelete\n\t\t
\n\t\t"]), - _templateObject37 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"]), + _templateObject37 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"]), _templateObject38 = _taggedTemplateLiteral(["\n\t\t\t ", "\n\t\t\t \"thumbnail\"\n\t\t\t
$", "
\n\t\t\t "], ["\n\t\t\t ", "\n\t\t\t \"thumbnail\"\n\t\t\t
$", "
\n\t\t\t "]), _templateObject39 = _taggedTemplateLiteral(["$", "", ""], ["$", "", ""]), _templateObject40 = _taggedTemplateLiteral(["\n\t\t", "\n\t\t×\n\t\t", ""], ["\n\t\t", "\n\t\t×\n\t\t", ""]), @@ -11024,10 +11024,10 @@ u2f.login = function () { return; } - new Larapass({ + new WebAuthn({ login: "/api/WebAuthn::login", - loginOptions: "/api/WebAuthn::login/gen" - }).login({ + loginOptions: "/api/WebAuthn::login/options" + }, {}, false).login({ user_id: 0 // for now it is only available to Admin user via a secret key shortcut. }).then(function () { loadingBar.show("success", lychee.locale["U2F_AUTHENTIFICATION_SUCCESS"]); @@ -11045,12 +11045,12 @@ u2f.register = function () { return; } - var larapass = new Larapass({ + var webauthn = new WebAuthn({ register: "/api/WebAuthn::register", - registerOptions: "/api/WebAuthn::register/gen" - }); - if (Larapass.supportsWebAuthn()) { - larapass.register().then(function () { + registerOptions: "/api/WebAuthn::register/options" + }, {}, false); + if (WebAuthn.supportsWebAuthn()) { + webauthn.register().then(function () { loadingBar.show("success", lychee.locale["U2F_REGISTRATION_SUCCESS"]); u2f.list(); // reload credential list }).catch(function () { diff --git a/public/dist/page.css b/public/dist/page.css index 191b9d12b6e..2ddf8f4ebb5 100644 --- a/public/dist/page.css +++ b/public/dist/page.css @@ -3935,7 +3935,6 @@ div.right_70 { float: none !important; margin: 0 0 30px 0; } - div.left_50 img { width: 100% !important; } diff --git a/public/dist/view.js b/public/dist/view.js index 00116d2750b..6dddbaa77e0 100644 --- a/public/dist/view.js +++ b/public/dist/view.js @@ -1,5 +1,5 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0$", ""], ["$", ""]), _templateObject23 = _taggedTemplateLiteral(["
", "
"], ["
", "
"]), _templateObject24 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t

\n\t\t\tSave\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t

\n\t\t\tSave\n\t\t\tDelete\n\t\t
\n\t\t"]), - _templateObject25 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"]), + _templateObject25 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"]), _templateObject26 = _taggedTemplateLiteral(["$", "", ""], ["$", "", ""]), _templateObject27 = _taggedTemplateLiteral([", "], [", "]), _templateObject28 = _taggedTemplateLiteral(["$", ""], ["$", ""]), diff --git a/resources/js/vendor/webauthn/webauthn.js b/resources/js/vendor/webauthn/webauthn.js new file mode 100644 index 00000000000..a5301930d47 --- /dev/null +++ b/resources/js/vendor/webauthn/webauthn.js @@ -0,0 +1,356 @@ +/** + * MIT License + * + * Copyright (c) Italo Israel Baeza Cabrera + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +class WebAuthn { + /** + * Routes for WebAuthn assertion (login) and attestation (register). + * + * @type {{registerOptions: string, register: string, loginOptions: string, login: string, }} + */ + #routes = { + registerOptions: "webauthn::register/options", + register: "webauthn::register", + loginOptions: "webauthn::login/options", + login: "webauthn::login", + } + + /** + * Headers to use in ALL requests done. + * + * @type {{Accept: string, "Content-Type": string, "X-Requested-With": string}} + */ + #headers = { + "Accept": "application/json", + "Content-Type": "application/json", + "X-Requested-With": "XMLHttpRequest" + }; + + /** + * If set to true, the credentials option will be set to 'include' on all fetch calls, + * or else it will use the default 'same-origin'. Use this if the backend is not the + * same origin as the client or the XSRF protection will break without the session. + * + * @type {boolean} + */ + #includeCredentials = false + + /** + * Create a new WebAuthn instance. + * + * @param routes {{registerOptions: string, register: string, loginOptions: string, login: string}} + * @param headers {{string}} + * @param includeCredentials {boolean} + * @param xcsrfToken {string|null} Either a csrf token (40 chars) or xsrfToken (224 chars) + */ + constructor(routes = {}, headers = {}, includeCredentials = false, xcsrfToken = null) { + Object.assign(this.#routes, routes); + Object.assign(this.#headers, headers); + + this.#includeCredentials = includeCredentials; + + let xsrfToken; + let csrfToken; + + if (xcsrfToken === null) { + // If the developer didn't issue an XSRF token, we will find it ourselves. + xsrfToken = WebAuthn.#XsrfToken; + csrfToken = WebAuthn.#firstInputWithCsrfToken; + } else{ + // Check if it is a CSRF or XSRF token + if (xcsrfToken.length === 40) { + csrfToken = xcsrfToken; + } else if (xcsrfToken.length === 224) { + xsrfToken = xcsrfToken; + } else { + throw new TypeError('CSRF token or XSRF token provided does not match requirements. Must be 40 or 224 characters.'); + } + } + + if (xsrfToken !== null) { + this.#headers["X-XSRF-TOKEN"] ??= xsrfToken; + } else if (csrfToken !== null) { + this.#headers["X-CSRF-TOKEN"] ??= csrfToken; + } else { + // We didn't find it, and since is required, we will bail out. + throw new TypeError('Ensure a CSRF/XSRF token is manually set, or provided in a cookie "XSRF-TOKEN" or or there is meta tag named "csrf-token".'); + } + } + + /** + * Returns the CSRF token if it exists as a form input tag. + * + * @returns string + * @throws TypeError + */ + static get #firstInputWithCsrfToken() { + // First, try finding an CSRF Token in the head. + let token = Array.from(document.head.getElementsByTagName("meta")) + .find(element => element.name === "csrf-token"); + + if (token) { + return token.content; + } + + // Then, try to find a hidden input containing the CSRF token. + token = Array.from(document.getElementsByTagName('input')) + .find(input => input.name === "_token" && input.type === "hidden") + + if (token) { + return token.value; + } + + return null; + } + + /** + * Returns the value of the XSRF token if it exists in a cookie. + * + * Inspired by https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#example_2_get_a_sample_cookie_named_test2 + * + * @returns {?string} + */ + static get #XsrfToken() { + const cookie = document.cookie.split(";").find((row) => /^\s*(X-)?[XC]SRF-TOKEN\s*=/.test(row)); + // We must remove all '%3D' from the end of the string. + // Background: + // The actual binary value of the CSFR value is encoded in Base64. + // If the length of original, binary value is not a multiple of 3 bytes, + // the encoding gets padded with `=` on the right; i.e. there might be + // zero, one or two `=` at the end of the encoded value. + // If the value is sent from the server to the client as part of a cookie, + // the `=` character is URL-encoded as `%3D`, because `=` is already used + // to separate a cookie key from its value. + // When we send back the value to the server as part of an AJAX request, + // Laravel expects an unpadded value. + // Hence, we must remove the `%3D`. + return cookie ? cookie.split("=")[1].trim().replaceAll("%3D", "") : null; + }; + + /** + * Returns a fetch promise to resolve later. + * + * @param data {Object} + * @param route {string} + * @param headers {{string}} + * @returns {Promise} + */ + #fetch(data, route, headers = {}) { + return fetch(route, { + method: "POST", + credentials: this.#includeCredentials ? "include" : "same-origin", + redirect: "error", + headers: {...this.#headers, ...headers}, + body: JSON.stringify(data) + }); + } + + /** + * Decodes a BASE64 URL string into a normal string. + * + * @param input {string} + * @returns {string|Iterable} + */ + static #base64UrlDecode(input) { + input = input.replace(/-/g, "+").replace(/_/g, "/"); + + const pad = input.length % 4; + + if (pad) { + if (pad === 1) { + throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding"); + } + + input += new Array(5 - pad).join("="); + } + + return atob(input); + } + + /** + * Transform a string into Uint8Array instance. + * + * @param input {string} + * @param useAtob {boolean} + * @returns {Uint8Array} + */ + static #uint8Array(input, useAtob = false) { + return Uint8Array.from( + useAtob ? atob(input) : WebAuthn.#base64UrlDecode(input), c => c.charCodeAt(0) + ); + } + + /** + * Encodes an array of bytes to a BASE64 URL string + * + * @param arrayBuffer {ArrayBuffer|Uint8Array} + * @returns {string} + */ + static #arrayToBase64String(arrayBuffer) { + return btoa(String.fromCharCode(...new Uint8Array(arrayBuffer))); + } + + /** + * Parses the Public Key Options received from the Server for the browser. + * + * @param publicKey {Object} + * @returns {Object} + */ + #parseIncomingServerOptions(publicKey) { + console.debug(publicKey); + + publicKey.challenge = WebAuthn.#uint8Array(publicKey.challenge); + + if ('user' in publicKey) { + publicKey.user = { + ...publicKey.user, + id: WebAuthn.#uint8Array(publicKey.user.id) + }; + } + + [ + "excludeCredentials", + "allowCredentials" + ] + .filter(key => key in publicKey) + .forEach(key => { + publicKey[key] = publicKey[key].map(data => { + return {...data, id: WebAuthn.#uint8Array(data.id)}; + }); + }); + + return publicKey; + } + + /** + * Parses the outgoing credentials from the browser to the server. + * + * @param credentials {Credential|PublicKeyCredential} + * @return {{response: {string}, rawId: string, id: string, type: string}} + */ + #parseOutgoingCredentials(credentials) { + let parseCredentials = { + id: credentials.id, + type: credentials.type, + rawId: WebAuthn.#arrayToBase64String(credentials.rawId), + response: {} + }; + + [ + "clientDataJSON", + "attestationObject", + "authenticatorData", + "signature", + "userHandle" + ] + .filter(key => key in credentials.response) + .forEach(key => parseCredentials.response[key] = WebAuthn.#arrayToBase64String(credentials.response[key])); + + return parseCredentials; + } + + /** + * Handles the response from the Server. + * + * Throws the entire response if is not OK (HTTP 2XX). + * + * @param response {Response} + * @returns Promise + * @throws Response + */ + static #handleResponse(response) { + if (!response.ok) { + throw response; + } + + // Here we will do a small trick. Since most of the responses from the server + // are JSON, we will automatically parse the JSON body from the response. If + // it's not JSON, we will push the body verbatim and let the dev handle it. + return new Promise((resolve) => { + response + .json() + .then((json) => resolve(json)) + .catch(() => resolve(response.body)); + }); + } + + /** + * Register the user credentials from the browser/device. + * + * You can add request input if you are planning to register a user with WebAuthn from scratch. + * + * @param request {{string}} + * @param response {{string}} + * @returns Promise + */ + async register(request = {}, response = {}) { + const optionsResponse = await this.#fetch(request, this.#routes.registerOptions); + const json = await optionsResponse.json(); + const publicKey = this.#parseIncomingServerOptions(json); + const credentials = await navigator.credentials.create({publicKey}); + const publicKeyCredential = this.#parseOutgoingCredentials(credentials); + + Object.assign(publicKeyCredential, response); + + return await this.#fetch(publicKeyCredential, this.#routes.register).then(WebAuthn.#handleResponse); + } + + /** + * Log in a user with his credentials. + * + * If no credentials are given, the app may return a blank assertion for userless login. + * + * @param request {{string}} + * @param response {{string}} + * @returns Promise + */ + async login(request = {}, response = {}) { + const optionsResponse = await this.#fetch(request, this.#routes.loginOptions); + const json = await optionsResponse.json(); + const publicKey = this.#parseIncomingServerOptions(json); + const credentials = await navigator.credentials.get({publicKey}); + const publicKeyCredential = this.#parseOutgoingCredentials(credentials); + + Object.assign(publicKeyCredential, response); + + return await this.#fetch(publicKeyCredential, this.#routes.login, response).then(WebAuthn.#handleResponse); + } + + /** + * Checks if the browser supports WebAuthn. + * + * @returns {boolean} + */ + static supportsWebAuthn() { + return typeof PublicKeyCredential != "undefined"; + } + + /** + * Checks if the browser doesn't support WebAuthn. + * + * @returns {boolean} + */ + static doesntSupportWebAuthn() { + return !this.supportsWebAuthn(); + } +} diff --git a/resources/views/includes/head.blade.php b/resources/views/includes/head.blade.php index 369cff467dd..5eecde58621 100644 --- a/resources/views/includes/head.blade.php +++ b/resources/views/includes/head.blade.php @@ -17,6 +17,6 @@ @include('feed::links') @endif - + @yield('head-meta') diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 3a05d4925ac..58e46f04aab 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -26,7 +26,7 @@ @include('feed::links') @endif --}} - + @yield('head-meta') @livewireStyles diff --git a/routes/api.php b/routes/api.php index b97cc5698dd..984abf6e0a8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -93,9 +93,20 @@ Route::post('/Sharing::add', [Administration\SharingController::class, 'add']); Route::post('/Sharing::delete', [Administration\SharingController::class, 'delete']); -Route::post('/WebAuthn::register/gen', [Administration\WebAuthController::class, 'generateRegistration']); -Route::post('/WebAuthn::register', [Administration\WebAuthController::class, 'verifyRegistration']); -Route::post('/WebAuthn::login/gen', [Administration\WebAuthController::class, 'generateAuthentication']); -Route::post('/WebAuthn::login', [Administration\WebAuthController::class, 'verifyAuthentication']); -Route::post('/WebAuthn::list', [Administration\WebAuthController::class, 'list'])->middleware(['admin']); -Route::post('/WebAuthn::delete', [Administration\WebAuthController::class, 'delete'])->middleware(['admin']); +// Route::post('/WebAuthn::register/gen', [Administration\WebAuthController::class, 'generateRegistration']); +// Route::post('/WebAuthn::register', [Administration\WebAuthController::class, 'verifyRegistration']); +// Route::post('/WebAuthn::login/gen', [Administration\WebAuthController::class, 'generateAuthentication']); +// Route::post('/WebAuthn::login', [Administration\WebAuthController::class, 'verifyAuthentication']); +Route::post('/WebAuthn::list', [WebAuthn\WebAuthnManageController::class, 'list']); +Route::post('/WebAuthn::delete', [WebAuthn\WebAuthnManageController::class, 'delete']); + +// WebAuthn Routes +Route::post('/WebAuthn::register/options', [\App\Http\Controllers\WebAuthn\WebAuthnRegisterController::class, 'options']) + ->name('webauthn.register.options'); +Route::post('/WebAuthn::register', [\App\Http\Controllers\WebAuthn\WebAuthnRegisterController::class, 'register']) + ->name('webauthn.register'); + +Route::post('/WebAuthn::login/options', [\App\Http\Controllers\WebAuthn\WebAuthnLoginController::class, 'options']) + ->name('webauthn.login.options'); +Route::post('/WebAuthn::login', [\App\Http\Controllers\WebAuthn\WebAuthnLoginController::class, 'login']) + ->name('webauthn.login'); diff --git a/scripts/gen_release.php b/scripts/gen_release.php index feb7063e918..327230bf8f7 100755 --- a/scripts/gen_release.php +++ b/scripts/gen_release.php @@ -8,8 +8,6 @@ use function Safe\file_get_contents; use function Safe\file_put_contents; use function Safe\scandir; -use function Safe\sprintf; -use function Safe\substr; /** * Template for migration. diff --git a/tests/Feature/CommandFixPermissionsTest.php b/tests/Feature/CommandFixPermissionsTest.php index 4bfe8c732bb..3fcd4a66570 100644 --- a/tests/Feature/CommandFixPermissionsTest.php +++ b/tests/Feature/CommandFixPermissionsTest.php @@ -50,8 +50,8 @@ public function testFixPermissions(): void ])->assertSuccessful(); clearstatcache(true); - static::assertEquals(00664, fileperms($filePath) & 07777); - static::assertEquals(02775, fileperms($dirPath) & 07777); + static::assertEquals(00664, fileperms($filePath) & 07777, $filePath); + static::assertEquals(02775, fileperms($dirPath) & 07777, $dirPath); chmod($filePath, 00777); chmod($dirPath, 06777); diff --git a/tests/Feature/InstallTest.php b/tests/Feature/InstallTest.php index ecf5dae1d8a..2081417ba37 100644 --- a/tests/Feature/InstallTest.php +++ b/tests/Feature/InstallTest.php @@ -69,6 +69,7 @@ public function testInstall(): void 'albums', 'base_albums', 'web_authn_credentials', + 'webauthn_credentials', 'users', ]; diff --git a/tests/Feature/PhotosAddNegativeTest.php b/tests/Feature/PhotosAddNegativeTest.php index 07337b6b4a8..b6cb0604d4d 100644 --- a/tests/Feature/PhotosAddNegativeTest.php +++ b/tests/Feature/PhotosAddNegativeTest.php @@ -69,7 +69,7 @@ public function testUploadWithReadOnlyStorage(): void TestCase::createUploadedFile(TestCase::SAMPLE_FILE_NIGHT_IMAGE), null, 500, - 'Impossible to create the root directory' + 'Unable to create a directory' ); } diff --git a/tests/Feature/PhotosOperationsTest.php b/tests/Feature/PhotosOperationsTest.php index 9b94dd3b6b6..9294130d652 100644 --- a/tests/Feature/PhotosOperationsTest.php +++ b/tests/Feature/PhotosOperationsTest.php @@ -84,7 +84,7 @@ public function testManyFunctionsAtOnce(): void $this->photos_tests->set_star([$id], true); $this->photos_tests->set_tag([$id], ['night']); $this->photos_tests->set_public($id, true); - $this->photos_tests->set_license($id, 'WTFPL', 422, 'The given data was invalid'); + $this->photos_tests->set_license($id, 'WTFPL', 422, 'license must be one out of'); $this->photos_tests->set_license($id, 'CC0'); $this->photos_tests->set_license($id, 'CC-BY-1.0'); $this->photos_tests->set_license($id, 'CC-BY-2.0'); diff --git a/tests/Feature/Traits/InteractsWithFilesystemPermissions.php b/tests/Feature/Traits/InteractsWithFilesystemPermissions.php index 5d99e0455dc..37c38c29d78 100644 --- a/tests/Feature/Traits/InteractsWithFilesystemPermissions.php +++ b/tests/Feature/Traits/InteractsWithFilesystemPermissions.php @@ -13,7 +13,6 @@ namespace Tests\Feature\Traits; use function Safe\fileowner; -use function Safe\sprintf; trait InteractsWithFilesystemPermissions { diff --git a/tests/Feature/WebAuthTest.php b/tests/Feature/WebAuthTest.php index 3c4c6e8cc93..0362068eb2e 100644 --- a/tests/Feature/WebAuthTest.php +++ b/tests/Feature/WebAuthTest.php @@ -13,9 +13,9 @@ namespace Tests\Feature; use App\Models\User; -use DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Session; +use Laragear\WebAuthn\Models\WebAuthnCredential; use Tests\TestCase; class WebAuthTest extends TestCase @@ -29,7 +29,7 @@ public function testWebAuthTest(): void { Auth::loginUsingId(0); - $response = $this->postJson('/api/WebAuthn::register/gen'); + $response = $this->postJson('/api/WebAuthn::register/options'); $response->assertOk(); $response = $this->postJson('/api/WebAuthn::register', [ @@ -41,12 +41,12 @@ public function testWebAuthTest(): void ], 'type' => 'public-key', ]); - $response->assertForbidden(); + $response->assertStatus(422); Auth::logout(); Session::flush(); - $response = $this->postJson('/api/WebAuthn::login/gen', ['user_id' => 0]); + $response = $this->postJson('/api/WebAuthn::login/options', ['user_id' => 0]); $response->assertOk(); $response = $this->postJson('/api/WebAuthn::login', [ @@ -60,34 +60,36 @@ public function testWebAuthTest(): void ], 'type' => 'public-key', ]); - $response->assertUnauthorized(); - - Auth::loginUsingId(0); - - $response = $this->postJson('/api/WebAuthn::list'); - $response->assertOk(); // code 200 something + $response->assertStatus(422); - $key = new WebAuthnCredential([ - 'id' => '1234', - 'user_handle' => '575bcef3-5e74-4785-b089-575dcefbff33', - 'type' => 'public-key', + $key = (new WebAuthnCredential())->forceFill([ + 'id' => 'hyxPTjCUCWYPcVTxFy7WjCXATwU7UDLI9nPGqifqs9ohskBuVih4Nzdp3UAl-wHTda4CUoAE_ylfQveayx07ug', + 'authenticatable_id' => 0, + 'user_id' => '9058e01e7d84466595fd3ae7b8ad89a3', + 'alias' => '', + 'counter' => '0', + 'rp_id' => 'https://localhost', + 'origin' => 'https://localhost', 'transports' => '[]', - 'attestation_type' => '"none"', - 'trust_path' => '{"type":"Webauthn\\TrustPath\\EmptyTrustPath"}', 'aaguid' => '00000000-0000-0000-0000-000000000000', + 'attestation_format' => 'none', 'public_key' => '', - 'counter' => '0', ]); $user = User::query()->find(0); $user->webAuthnCredentials()->save($key); - $response = $this->postJson('/api/WebAuthn::delete', ['id' => '1234']); + Auth::loginUsingId(0); + + $response = $this->postJson('/api/WebAuthn::list'); + $response->assertOk(); // code 200 something + + $response = $this->postJson('/api/WebAuthn::delete', ['id' => 'hyxPTjCUCWYPcVTxFy7WjCXATwU7UDLI9nPGqifqs9ohskBuVih4Nzdp3UAl-wHTda4CUoAE_ylfQveayx07ug']); $response->assertNoContent(); Auth::logout(); Session::flush(); - $response = $this->postJson('/api/WebAuthn::delete', ['id' => '1234']); - $response->assertForbidden(); + $response = $this->postJson('/api/WebAuthn::delete', ['id' => 'hyxPTjCUCWYPcVTxFy7WjCXATwU7UDLI9nPGqifqs9ohskBuVih4Nzdp3UAl-wHTda4CUoAE_ylfQveayx07ug']); + $response->assertUnauthorized(); } } From a0667203456e97901e8985e4236d633c788a3336 Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 29 Sep 2022 19:39:02 +0200 Subject: [PATCH 02/29] WRTC --- app/Factories/AlbumFactory.php | 2 +- composer.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/Factories/AlbumFactory.php b/app/Factories/AlbumFactory.php index 034846d66b4..c4e38d2182c 100644 --- a/app/Factories/AlbumFactory.php +++ b/app/Factories/AlbumFactory.php @@ -153,7 +153,7 @@ public function findBaseAlbumsOrFail(array $albumIDs, bool $withRelations = true $albumQuery->with(['photos', 'children', 'photos.size_variants']); } - /** @var Collection $result */ + /** @var Collection $result */ $result = new Collection(array_merge( $tagAlbumQuery->findMany($albumIDs)->all(), $albumQuery->findMany($albumIDs)->all(), diff --git a/composer.lock b/composer.lock index bd5d9fde8b0..25b94441307 100644 --- a/composer.lock +++ b/composer.lock @@ -1720,16 +1720,16 @@ }, { "name": "laravel/framework", - "version": "v9.31.0", + "version": "v9.32.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "75013d4fffe3b24748d313fbbea53206351214f7" + "reference": "aae3b59f82434176546c9dd10804adda16da5278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/75013d4fffe3b24748d313fbbea53206351214f7", - "reference": "75013d4fffe3b24748d313fbbea53206351214f7", + "url": "https://api.github.com/repos/laravel/framework/zipball/aae3b59f82434176546c9dd10804adda16da5278", + "reference": "aae3b59f82434176546c9dd10804adda16da5278", "shasum": "" }, "require": { @@ -1902,7 +1902,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-09-20T13:32:50+00:00" + "time": "2022-09-27T13:32:56+00:00" }, { "name": "laravel/serializable-closure", @@ -2441,12 +2441,12 @@ "source": { "type": "git", "url": "https://github.com/LycheeOrg/php-exif.git", - "reference": "802775056b2505436dd379a342a57181bb4f409a" + "reference": "f2c5cb5661a4c804550331e2e63a9794189f17fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LycheeOrg/php-exif/zipball/802775056b2505436dd379a342a57181bb4f409a", - "reference": "802775056b2505436dd379a342a57181bb4f409a", + "url": "https://api.github.com/repos/LycheeOrg/php-exif/zipball/f2c5cb5661a4c804550331e2e63a9794189f17fd", + "reference": "f2c5cb5661a4c804550331e2e63a9794189f17fd", "shasum": "" }, "require": { @@ -2520,7 +2520,7 @@ "source": "https://github.com/LycheeOrg/php-exif/tree/code-safe-2.2", "issues": "https://github.com/LycheeOrg/php-exif/issues" }, - "time": "2022-08-08T07:35:25+00:00" + "time": "2022-09-29T16:10:11+00:00" }, { "name": "maennchen/zipstream-php", From 773f0855084f1c229cfe17229574fd747be83d02 Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 29 Sep 2022 19:46:41 +0200 Subject: [PATCH 03/29] fix login via u2f --- .../WebAuthn/WebAuthnLoginController.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php b/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php index a0621ca4897..da703c8199d 100644 --- a/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php +++ b/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php @@ -6,12 +6,10 @@ use App\Models\User; use App\Pipelines\AssertionValidator; use Illuminate\Contracts\Support\Responsable; -use Illuminate\Http\Response; use Illuminate\Support\Facades\Auth; use Laragear\WebAuthn\Assertion\Validator\AssertionValidation; use Laragear\WebAuthn\Http\Requests\AssertedRequest; use Laragear\WebAuthn\Http\Requests\AssertionRequest; -use function response; class WebAuthnLoginController { @@ -32,20 +30,20 @@ public function options(AssertionRequest $request): Responsable * * @param AssertedRequest $request * - * @return \Illuminate\Http\Response + * @return void */ - public function login(AssertedRequest $request, AssertionValidator $assertion): Response + public function login(AssertedRequest $request, AssertionValidator $assertion): void { $credential = $assertion ->send(new AssertionValidation($request, User::findOrFail(0))) ->thenReturn()->credential; - if ($credential !== null) { - /** @var \Illuminate\Contracts\Auth\Authenticatable $authenticatable */ - $authenticatable = $credential->authenticatable; - Auth::login($authenticatable); + if ($credential === null) { + throw new UnauthenticatedException('Invalid credentials'); } - return response()->noContent($credential !== null ? 204 : throw new UnauthenticatedException('Invalid credentials')); + /** @var \Illuminate\Contracts\Auth\Authenticatable $authenticatable */ + $authenticatable = $credential->authenticatable; + Auth::login($authenticatable); } } From ae607b8418eb244707f42e45b970298328d2eb6e Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 29 Sep 2022 19:49:21 +0200 Subject: [PATCH 04/29] align the catch blocks --- app/Console/Commands/FixPermissions.php | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/app/Console/Commands/FixPermissions.php b/app/Console/Commands/FixPermissions.php index 3e62f4cd55d..5104ac922a3 100644 --- a/app/Console/Commands/FixPermissions.php +++ b/app/Console/Commands/FixPermissions.php @@ -89,13 +89,7 @@ public function handle(): int private function fixPermissionsRecursively(string $path): void { try { - try { - $actualPerm = fileperms($path); - } catch (FilesystemException) { - $this->warn(sprintf('Unable to determine permissions for %s' . PHP_EOL, $path)); - - return; - } + $actualPerm = fileperms($path); // `fileperms` also returns the higher bits of the inode mode. // Hence, we must AND it with 07777 to only get what we are @@ -143,6 +137,8 @@ private function fixPermissionsRecursively(string $path): void } } } + } catch (FilesystemException) { + $this->warn(sprintf('Unable to determine permissions for %s' . PHP_EOL, $path)); } catch (\Exception $e) { $this->error($e->getMessage()); } From 97cc858f83753f0dee4d6a4527593bf38fc99b16 Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 29 Sep 2022 20:38:32 +0200 Subject: [PATCH 05/29] remove unused import --- app/Http/Requests/Album/GetAlbumRequest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Http/Requests/Album/GetAlbumRequest.php b/app/Http/Requests/Album/GetAlbumRequest.php index aaf707cea24..25b83561729 100644 --- a/app/Http/Requests/Album/GetAlbumRequest.php +++ b/app/Http/Requests/Album/GetAlbumRequest.php @@ -7,7 +7,6 @@ use App\Http\Requests\BaseApiRequest; use App\Http\Requests\Contracts\HasAbstractAlbum; use App\Http\Requests\Traits\HasAbstractAlbumTrait; -use App\Models\Album; use App\Models\Extensions\BaseAlbum; use App\Policies\AlbumPolicy; use App\Rules\AlbumIDRule; From d2052dc2dbd87fe49b1bf75434ef40ed6ce22e29 Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 29 Sep 2022 22:40:56 +0200 Subject: [PATCH 06/29] WRTC --- .../Controllers/WebAuthn/WebAuthnLoginController.php | 5 +++-- .../Controllers/WebAuthn/WebAuthnManageController.php | 3 +-- .../WebAuthn/WebAuthnRegisterController.php | 11 ++--------- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php b/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php index da703c8199d..6d1808fcfbd 100644 --- a/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php +++ b/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php @@ -35,8 +35,9 @@ public function options(AssertionRequest $request): Responsable public function login(AssertedRequest $request, AssertionValidator $assertion): void { $credential = $assertion - ->send(new AssertionValidation($request, User::findOrFail(0))) - ->thenReturn()->credential; + ->send(new AssertionValidation($request, User::findOrFail(0))) + ->thenReturn() + ->credential; if ($credential === null) { throw new UnauthenticatedException('Invalid credentials'); diff --git a/app/Http/Controllers/WebAuthn/WebAuthnManageController.php b/app/Http/Controllers/WebAuthn/WebAuthnManageController.php index 4dfd9bec92c..9038c8f572c 100644 --- a/app/Http/Controllers/WebAuthn/WebAuthnManageController.php +++ b/app/Http/Controllers/WebAuthn/WebAuthnManageController.php @@ -25,10 +25,9 @@ public function list(): Collection */ public function delete(Request $request): void { - $id = $request->validate(['id' => 'required|string']); - /** @var \App\Models\User $user */ $user = Auth::user() ?? throw new UnauthenticatedException(); + $id = $request->validate(['id' => 'required|string']); $user->webAuthnCredentials()->where('id', $id)->delete(); } } diff --git a/app/Http/Controllers/WebAuthn/WebAuthnRegisterController.php b/app/Http/Controllers/WebAuthn/WebAuthnRegisterController.php index 61995ede561..c2bb1ebd77d 100644 --- a/app/Http/Controllers/WebAuthn/WebAuthnRegisterController.php +++ b/app/Http/Controllers/WebAuthn/WebAuthnRegisterController.php @@ -4,11 +4,9 @@ use App\Exceptions\UnauthenticatedException; use Illuminate\Contracts\Support\Responsable; -use Illuminate\Http\Response; use Illuminate\Support\Facades\Auth; use Laragear\WebAuthn\Http\Requests\AttestationRequest; use Laragear\WebAuthn\Http\Requests\AttestedRequest; -use function response; class WebAuthnRegisterController { @@ -25,8 +23,6 @@ public function options(AttestationRequest $request): Responsable return $request ->fastRegistration() -// ->userless() -// ->allowDuplicates() ->toCreate(); } @@ -35,14 +31,11 @@ public function options(AttestationRequest $request): Responsable * * @param \Laragear\WebAuthn\Http\Requests\AttestedRequest $request * - * @return \Illuminate\Http\Response + * @return void */ - public function register(AttestedRequest $request): Response + public function register(AttestedRequest $request): void { $request->user = Auth::user() ?? throw new UnauthenticatedException(); - $request->save(); - - return response()->noContent(); } } From bb29f730217eb210ec0f538355080e183a74fe0c Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 29 Sep 2022 23:56:14 +0200 Subject: [PATCH 07/29] fix config WRTC --- config/app.php | 1 - config/filesystems.php | 44 ++++++++++++++++-------------------------- 2 files changed, 17 insertions(+), 28 deletions(-) diff --git a/config/app.php b/config/app.php index b006db8cf3d..371844ec6e5 100644 --- a/config/app.php +++ b/config/app.php @@ -235,7 +235,6 @@ */ 'aliases' => Facade::defaultAliases()->merge([ - // 'ExampleClass' => App\Example\ExampleClass::class, 'DebugBar' => Barryvdh\Debugbar\Facades\Debugbar::class, 'Helpers' => App\Facades\Helpers::class, 'Lang' => App\Facades\Lang::class, diff --git a/config/filesystems.php b/config/filesystems.php index 819b72bc6d5..ec7a0edcd34 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -41,38 +41,12 @@ */ 'disks' => [ - 'local' => [ - 'driver' => 'local', - 'root' => storage_path('app'), - 'throw' => true, - ], - - 'public' => [ - 'driver' => 'local', - 'root' => storage_path('app/public'), - 'url' => env('APP_URL') . '/storage', - 'visibility' => 'public', - 'throw' => true, - ], - - 's3' => [ - 'driver' => 's3', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION'), - 'bucket' => env('AWS_BUCKET'), - 'url' => env('AWS_URL'), - 'endpoint' => env('AWS_ENDPOINT'), - 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), - 'throw' => true, - ], - // Lychee uses the disk "images" to store the media files 'images' => [ 'driver' => 'local', 'root' => env('LYCHEE_UPLOADS', public_path('uploads/')), 'url' => env('LYCHEE_UPLOADS_URL', 'uploads/'), - 'visibility' => 'public', + 'visibility' => env('LYCHEE_IMAGE_VISIBILITY', 'public'), 'permissions' => [ 'file' => [ 'world' => 00666, @@ -87,6 +61,22 @@ ], ], + // This is an example how the "images" disk can be hosted on an AWS S3 + // ATTENTION: This is NOT supported yet!!! + // This is only a placeholder/reminder for the future + /* + 'images' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => true, + ],*/ + // Lychee uses this disk to store the customized CSS file provided by the user // ATTENTION: This disk MUST ALWAYS point to the local `./public/dist` directory. // TODO: Maybe we should drop this Flysystem disk, because neither the driver nor the root must be changed and hence the whole point of using the Flysystem abstraction is gone. From 3338936b0ec2c21f32d512c53e849b7e74c04468 Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 30 Sep 2022 00:07:00 +0200 Subject: [PATCH 08/29] more details about Laravel stupidity --- app/Pipelines/AssertionValidator.php | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app/Pipelines/AssertionValidator.php b/app/Pipelines/AssertionValidator.php index 09d351cbf11..4c732467e61 100644 --- a/app/Pipelines/AssertionValidator.php +++ b/app/Pipelines/AssertionValidator.php @@ -20,11 +20,20 @@ use Laragear\WebAuthn\Assertion\Validator\Pipes\RetrievesCredentialId; /** - * This validator is literally a copy of the one in WebAuthn, - * It is needed because Laragear makes use of is() which is wrong in Laravel - * We Update the CheckCredentialsForUser pipe for this reason. + * This validator is literally a copy of {@link Laragear\WebAuthn\Assertion\Validator\Pipes\AssertionValidator}, + * This copy is needed because {@link Laragear\WebAuthn\Assertion\Validator\Pipes\CheckCredentialIsForUser} + * uses isNot() from {@link Illuminate\Database\Eloquent\Relations\Concerns\ComparesRelatedModels} which + * internally calls is() and subsequently compareKeys(). * - * TODO: remove once Laravel fixed their stupidity: https://github.com/laravel/framework/pull/43860 + * compareKeys() uses the lose check empty() on id to prune the null ones. + * However, this also returns false on 0. As a result, two related models with a same id of 0 (admin in our case) + * will be considered different entities. + * + * For this reason, we replace {@link Laragear\WebAuthn\Assertion\Validator\Pipes\CheckCredentialIsForUser} + * by our own {@link App\Pipelines\Pipes\CheckCredentialIsForUser} to achieve the expected behaviour. + * + * The Laravel team, in their brilliant stupidity, decided this was not worth their reading consideration. + * See here: https://github.com/laravel/framework/pull/43860 * * @method \Laragear\WebAuthn\Assertion\Validator\AssertionValidation thenReturn() */ From faf44a2f63086be3902560abe44d2c11a8daf791 Mon Sep 17 00:00:00 2001 From: ildyria Date: Sat, 1 Oct 2022 22:55:22 +0200 Subject: [PATCH 09/29] fix migrations with respect to comments --- .../2021_12_04_181200_refactor_models.php | 37 ------------------- ..._09_130303_create_webauthn_credentials.php | 14 +++---- 2 files changed, 6 insertions(+), 45 deletions(-) diff --git a/database/migrations/2021_12_04_181200_refactor_models.php b/database/migrations/2021_12_04_181200_refactor_models.php index d3cff789131..fa6d9df75aa 100644 --- a/database/migrations/2021_12_04_181200_refactor_models.php +++ b/database/migrations/2021_12_04_181200_refactor_models.php @@ -280,7 +280,6 @@ public function up() $this->createSizeVariantTableUp(); $this->createSymLinkTableUp(); $this->createRemainingForeignConstraints(); - // $this->createWebAuthnTableUp(); $this->createPageTableUp(); $this->createPageContentTableUp(); $this->createLogTableUp(); @@ -319,7 +318,6 @@ public function down() $this->createUserAlbumTableDown(); $this->createPhotoTableDown(); $this->createSymLinkTableDown(); - // $this->createWebAuthnTableDown(); $this->createPageTableDown(); $this->createPageContentTableDown(); $this->createLogTableDown(); @@ -992,41 +990,6 @@ private function renamePageContentTable(): void Schema::drop('page_contents'); } - // private function createWebAuthnTable(int $precision): void - // { - // Schema::create('web_authn_credentials', function (Blueprint $table) use ($precision) { - // $table->string('id', 255); - // $table->dateTime('created_at', $precision)->nullable(false); - // $table->dateTime('updated_at', $precision)->nullable(false); - // $table->dateTime('disabled_at', $precision)->nullable(true); - // $table->unsignedInteger('user_id')->nullable(false); - // $table->string('name')->nullable(); - // $table->string('type', 16); - // $table->json('transports'); - // $table->json('attestation_type'); - // $table->json('trust_path'); - // $table->uuid('aaguid'); - // $table->binary('public_key'); - // $table->unsignedInteger('counter')->default(0); - // $table->uuid('user_handle')->nullable(); - // // Indices - // $table->primary(['id', 'user_id']); - // $table->foreign('user_id') - // ->references('id')->on('users') - // ->cascadeOnDelete(); - // }); - // } - - // private function createWebAuthnTableUp(): void - // { - // $this->createWebAuthnTable(6); - // } - - // private function createWebAuthnTableDown(): void - // { - // $this->createWebAuthnTable(0); - // } - /** * Creates remaining foreign constraints which could not immediately be * created while the owning table was created due to circular dependencies. diff --git a/database/migrations/2022_07_09_130303_create_webauthn_credentials.php b/database/migrations/2022_07_09_130303_create_webauthn_credentials.php index 57e36a34cde..03f9a4d8af0 100644 --- a/database/migrations/2022_07_09_130303_create_webauthn_credentials.php +++ b/database/migrations/2022_07_09_130303_create_webauthn_credentials.php @@ -7,7 +7,8 @@ /** * @see \Laragear\WebAuthn\Models\WebAuthnCredential */ -return new class() extends Migration { +class CreateWebauthnCredentials extends Migration +{ /** * Run the migrations. * @@ -17,10 +18,6 @@ public function up(): void { Schema::create('webauthn_credentials', static function (Blueprint $table): void { static::defaultBlueprint($table); - - // You may add here your own columns... - // - // $table->timestamp('last_login_at')->nullable(); }); } @@ -73,7 +70,8 @@ protected static function defaultBlueprint(Blueprint $table): void $table->json('certificates')->nullable(); // A way to disable the credential without deleting it. - $table->timestamp('disabled_at')->nullable(); - $table->timestamps(); + $table->dateTime('disabled_at')->nullable(); + $table->dateTime('created_at')->nullable(false); + $table->dateTime('updated_at')->nullable(false); } -}; \ No newline at end of file +} \ No newline at end of file From 4cdfc8cfffc94a3b571ec8c68b2fa6063a0e5d1f Mon Sep 17 00:00:00 2001 From: ildyria Date: Tue, 4 Oct 2022 14:20:43 +0200 Subject: [PATCH 10/29] WRTC --- routes/api.php | 8 +------- tests/Feature/InstallTest.php | 1 - 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/routes/api.php b/routes/api.php index 984abf6e0a8..b813b904cfe 100644 --- a/routes/api.php +++ b/routes/api.php @@ -93,19 +93,13 @@ Route::post('/Sharing::add', [Administration\SharingController::class, 'add']); Route::post('/Sharing::delete', [Administration\SharingController::class, 'delete']); -// Route::post('/WebAuthn::register/gen', [Administration\WebAuthController::class, 'generateRegistration']); -// Route::post('/WebAuthn::register', [Administration\WebAuthController::class, 'verifyRegistration']); -// Route::post('/WebAuthn::login/gen', [Administration\WebAuthController::class, 'generateAuthentication']); -// Route::post('/WebAuthn::login', [Administration\WebAuthController::class, 'verifyAuthentication']); +// WebAuthn Routes Route::post('/WebAuthn::list', [WebAuthn\WebAuthnManageController::class, 'list']); Route::post('/WebAuthn::delete', [WebAuthn\WebAuthnManageController::class, 'delete']); - -// WebAuthn Routes Route::post('/WebAuthn::register/options', [\App\Http\Controllers\WebAuthn\WebAuthnRegisterController::class, 'options']) ->name('webauthn.register.options'); Route::post('/WebAuthn::register', [\App\Http\Controllers\WebAuthn\WebAuthnRegisterController::class, 'register']) ->name('webauthn.register'); - Route::post('/WebAuthn::login/options', [\App\Http\Controllers\WebAuthn\WebAuthnLoginController::class, 'options']) ->name('webauthn.login.options'); Route::post('/WebAuthn::login', [\App\Http\Controllers\WebAuthn\WebAuthnLoginController::class, 'login']) diff --git a/tests/Feature/InstallTest.php b/tests/Feature/InstallTest.php index 2081417ba37..50df8baada0 100644 --- a/tests/Feature/InstallTest.php +++ b/tests/Feature/InstallTest.php @@ -68,7 +68,6 @@ public function testInstall(): void 'tag_albums', 'albums', 'base_albums', - 'web_authn_credentials', 'webauthn_credentials', 'users', ]; From 2d9074661a26d88cde545f9dfd78ee16747e5e21 Mon Sep 17 00:00:00 2001 From: ildyria Date: Tue, 11 Oct 2022 10:55:41 +0200 Subject: [PATCH 11/29] update StreamStatFilter --- app/Image/BinaryBlob.php | 2 +- app/Image/StreamStatFilter.php | 36 +----- composer.json | 1 + composer.lock | 226 ++++++++++++++++----------------- 4 files changed, 121 insertions(+), 144 deletions(-) diff --git a/app/Image/BinaryBlob.php b/app/Image/BinaryBlob.php index f7d36bc2201..b13ebb0e628 100644 --- a/app/Image/BinaryBlob.php +++ b/app/Image/BinaryBlob.php @@ -109,7 +109,7 @@ protected static function appendStatFilter($stream): StreamStat $stream, StreamStatFilter::REGISTERED_NAME, STREAM_FILTER_READ, - [$streamStat] + $streamStat ); return $streamStat; diff --git a/app/Image/StreamStatFilter.php b/app/Image/StreamStatFilter.php index b06e1666d4f..213b288a887 100644 --- a/app/Image/StreamStatFilter.php +++ b/app/Image/StreamStatFilter.php @@ -27,9 +27,8 @@ public function filter($in, $out, &$consumed, bool $closing): int while ($bucket = stream_bucket_make_writeable($in)) { $consumed += $bucket->datalen; - $streamStat = $this->getStreamStats(); - if ($streamStat !== null) { - $streamStat->bytes += $bucket->datalen; + if ($this->params instanceof StreamStat) { + $this->params->bytes += $bucket->datalen; \hash_update($this->hashContext, $bucket->data); } stream_bucket_append($out, $bucket); @@ -47,9 +46,8 @@ public function filter($in, $out, &$consumed, bool $closing): int */ public function onClose(): void { - $streamStat = $this->getStreamStats(); - if ($streamStat !== null) { - $streamStat->checksum = \hash_final($this->hashContext); + if ($this->params instanceof StreamStat) { + $this->params->checksum = \hash_final($this->hashContext); } parent::onClose(); } @@ -63,33 +61,11 @@ public function onClose(): void */ public function onCreate(): bool { - $streamStat = $this->getStreamStats(); - if ($streamStat !== null) { - $streamStat->bytes = 0; + if ($this->params instanceof StreamStat) { + $this->params->bytes = 0; $this->hashContext = \hash_init(self::HASH_ALGO_NAME); } return parent::onCreate(); } - - /** - * Retrieve StreamStat. - * - * @return StreamStat|null - */ - private function getStreamStats(): StreamStat|null - { - if ($this->params instanceof StreamStat) { - return $this->params; - } - if (is_array($this->params)) { - for ($i = 0; $i < count($this->params); $i++) { - if ($this->params[$i] instanceof StreamStat) { - return $this->params[$i]; - } - } - } - - return null; - } } diff --git a/composer.json b/composer.json index b92e0c26b81..a2d22572405 100644 --- a/composer.json +++ b/composer.json @@ -62,6 +62,7 @@ "spatie/laravel-feed": "^4.0", "spatie/laravel-image-optimizer": "^1.6.2", "symfony/cache": "^v6.0.0", + "thecodingmachine/safe": "^2.4", "whichbrowser/parser": "^2.1" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 25b94441307..058256611d3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0c5163c00d9eab2f1ac3b09e3fd39314", + "content-hash": "391db0298d19034bce0444b14e153406", "packages": [ { "name": "bepsvpt/secure-headers", @@ -1720,37 +1720,37 @@ }, { "name": "laravel/framework", - "version": "v9.32.0", + "version": "v9.34.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "aae3b59f82434176546c9dd10804adda16da5278" + "reference": "b7af7ff35497eb1c4e61652f522a862164dbba5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/aae3b59f82434176546c9dd10804adda16da5278", - "reference": "aae3b59f82434176546c9dd10804adda16da5278", + "url": "https://api.github.com/repos/laravel/framework/zipball/b7af7ff35497eb1c4e61652f522a862164dbba5a", + "reference": "b7af7ff35497eb1c4e61652f522a862164dbba5a", "shasum": "" }, "require": { "doctrine/inflector": "^2.0", - "dragonmantank/cron-expression": "^3.1", - "egulias/email-validator": "^3.1", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1", "ext-mbstring": "*", "ext-openssl": "*", "fruitcake/php-cors": "^1.2", - "laravel/serializable-closure": "^1.0", + "laravel/serializable-closure": "^1.2.2", "league/commonmark": "^2.2", "league/flysystem": "^3.0.16", "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.53.1", + "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", - "symfony/console": "^6.0.3", + "symfony/console": "^6.0.9", "symfony/error-handler": "^6.0", "symfony/finder": "^6.0", "symfony/http-foundation": "^6.0", @@ -1761,7 +1761,7 @@ "symfony/routing": "^6.0", "symfony/uid": "^6.0", "symfony/var-dumper": "^6.0", - "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" }, @@ -1808,26 +1808,26 @@ }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.198.1", + "aws/aws-sdk-php": "^3.235.5", "doctrine/dbal": "^2.13.3|^3.1.4", "fakerphp/faker": "^1.9.2", - "guzzlehttp/guzzle": "^7.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.4.4", - "orchestra/testbench-core": "^7.1", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.8", "pda/pheanstalk": "^4.0", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^9.5.8", - "predis/predis": "^1.1.9|^2.0", + "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.", @@ -1839,18 +1839,18 @@ "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 and the ping methods on schedules (^7.2).", + "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 (^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.4.4).", + "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 (^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9|^2.0).", + "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 (^6.0|^7.0).", "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", @@ -1902,7 +1902,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-09-27T13:32:56+00:00" + "time": "2022-10-04T13:33:43+00:00" }, { "name": "laravel/serializable-closure", @@ -4575,16 +4575,16 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.13.5", + "version": "1.13.6", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "163ee3bc6c0a987535d8a99722a7dbcc5471a140" + "reference": "c377cc7223655c2278c148c1685b8b5a78af5c65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/163ee3bc6c0a987535d8a99722a7dbcc5471a140", - "reference": "163ee3bc6c0a987535d8a99722a7dbcc5471a140", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/c377cc7223655c2278c148c1685b8b5a78af5c65", + "reference": "c377cc7223655c2278c148c1685b8b5a78af5c65", "shasum": "" }, "require": { @@ -4622,7 +4622,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.13.5" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.13.6" }, "funding": [ { @@ -4630,7 +4630,7 @@ "type": "github" } ], - "time": "2022-09-07T14:31:31+00:00" + "time": "2022-10-11T06:37:42+00:00" }, { "name": "spatie/temporary-directory", @@ -4695,16 +4695,16 @@ }, { "name": "symfony/cache", - "version": "v6.0.11", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "8c98079892d254b4e5806bedf694bddab8fe92b4" + "reference": "908edffec894ef7c60d6a66869ecb826d76a491f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/8c98079892d254b4e5806bedf694bddab8fe92b4", - "reference": "8c98079892d254b4e5806bedf694bddab8fe92b4", + "url": "https://api.github.com/repos/symfony/cache/zipball/908edffec894ef7c60d6a66869ecb826d76a491f", + "reference": "908edffec894ef7c60d6a66869ecb826d76a491f", "shasum": "" }, "require": { @@ -4761,14 +4761,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/v6.0.11" + "source": "https://github.com/symfony/cache/tree/v6.0.13" }, "funding": [ { @@ -4784,7 +4784,7 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:39:48+00:00" + "time": "2022-09-08T09:32:44+00:00" }, { "name": "symfony/cache-contracts", @@ -4867,16 +4867,16 @@ }, { "name": "symfony/console", - "version": "v6.0.12", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c5c2e313aa682530167c25077d6bdff36346251e" + "reference": "8f14753b865651c2aad107ef97475740a9b0730f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c5c2e313aa682530167c25077d6bdff36346251e", - "reference": "c5c2e313aa682530167c25077d6bdff36346251e", + "url": "https://api.github.com/repos/symfony/console/zipball/8f14753b865651c2aad107ef97475740a9b0730f", + "reference": "8f14753b865651c2aad107ef97475740a9b0730f", "shasum": "" }, "require": { @@ -4942,7 +4942,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.12" + "source": "https://github.com/symfony/console/tree/v6.0.13" }, "funding": [ { @@ -4958,7 +4958,7 @@ "type": "tidelift" } ], - "time": "2022-08-23T20:52:30+00:00" + "time": "2022-09-03T14:23:25+00:00" }, { "name": "symfony/css-selector", @@ -5388,16 +5388,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.0.12", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d50ee4795c981638369dfa0b281107365fab2429" + "reference": "294208f37a73b7ae64b4297d936e890d5b514902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d50ee4795c981638369dfa0b281107365fab2429", - "reference": "d50ee4795c981638369dfa0b281107365fab2429", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/294208f37a73b7ae64b4297d936e890d5b514902", + "reference": "294208f37a73b7ae64b4297d936e890d5b514902", "shasum": "" }, "require": { @@ -5443,7 +5443,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.0.12" + "source": "https://github.com/symfony/http-foundation/tree/v6.0.13" }, "funding": [ { @@ -5459,20 +5459,20 @@ "type": "tidelift" } ], - "time": "2022-08-19T14:25:15+00:00" + "time": "2022-09-17T07:33:45+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.0.12", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "8f3563e4518cfee24a5cc724434cc60e0818abec" + "reference": "5939a039103580d8d86a4c80e245258ad50c91b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8f3563e4518cfee24a5cc724434cc60e0818abec", - "reference": "8f3563e4518cfee24a5cc724434cc60e0818abec", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/5939a039103580d8d86a4c80e245258ad50c91b2", + "reference": "5939a039103580d8d86a4c80e245258ad50c91b2", "shasum": "" }, "require": { @@ -5552,7 +5552,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/v6.0.12" + "source": "https://github.com/symfony/http-kernel/tree/v6.0.13" }, "funding": [ { @@ -5568,20 +5568,20 @@ "type": "tidelift" } ], - "time": "2022-08-26T14:45:39+00:00" + "time": "2022-09-30T08:03:37+00:00" }, { "name": "symfony/mailer", - "version": "v6.0.12", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "45aad5f8cfb481130e83dc4cb867c0f576182ea9" + "reference": "6269c872ab4792e8facbf8af27a2fbee8429f217" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/45aad5f8cfb481130e83dc4cb867c0f576182ea9", - "reference": "45aad5f8cfb481130e83dc4cb867c0f576182ea9", + "url": "https://api.github.com/repos/symfony/mailer/zipball/6269c872ab4792e8facbf8af27a2fbee8429f217", + "reference": "6269c872ab4792e8facbf8af27a2fbee8429f217", "shasum": "" }, "require": { @@ -5626,7 +5626,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.0.12" + "source": "https://github.com/symfony/mailer/tree/v6.0.13" }, "funding": [ { @@ -5642,20 +5642,20 @@ "type": "tidelift" } ], - "time": "2022-08-03T05:17:36+00:00" + "time": "2022-08-29T06:49:22+00:00" }, { "name": "symfony/mime", - "version": "v6.0.12", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "02a11577f2f9522c783179712bdf6d2d3cb9fc1d" + "reference": "c1d6eba531d956c23b3127dc6ae6f5ac4a90db6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/02a11577f2f9522c783179712bdf6d2d3cb9fc1d", - "reference": "02a11577f2f9522c783179712bdf6d2d3cb9fc1d", + "url": "https://api.github.com/repos/symfony/mime/zipball/c1d6eba531d956c23b3127dc6ae6f5ac4a90db6c", + "reference": "c1d6eba531d956c23b3127dc6ae6f5ac4a90db6c", "shasum": "" }, "require": { @@ -5707,7 +5707,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.0.12" + "source": "https://github.com/symfony/mime/tree/v6.0.13" }, "funding": [ { @@ -5723,7 +5723,7 @@ "type": "tidelift" } ], - "time": "2022-08-19T14:25:15+00:00" + "time": "2022-09-02T08:05:03+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6695,16 +6695,16 @@ }, { "name": "symfony/string", - "version": "v6.0.12", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "3a975ba1a1508ad97df45f4590f55b7cc4c1a0a0" + "reference": "65e99fb179e7241606377e4042cd2161f3dd1c05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/3a975ba1a1508ad97df45f4590f55b7cc4c1a0a0", - "reference": "3a975ba1a1508ad97df45f4590f55b7cc4c1a0a0", + "url": "https://api.github.com/repos/symfony/string/zipball/65e99fb179e7241606377e4042cd2161f3dd1c05", + "reference": "65e99fb179e7241606377e4042cd2161f3dd1c05", "shasum": "" }, "require": { @@ -6760,7 +6760,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.12" + "source": "https://github.com/symfony/string/tree/v6.0.13" }, "funding": [ { @@ -6776,7 +6776,7 @@ "type": "tidelift" } ], - "time": "2022-08-12T18:05:20+00:00" + "time": "2022-09-02T08:05:03+00:00" }, { "name": "symfony/translation", @@ -6953,16 +6953,16 @@ }, { "name": "symfony/uid", - "version": "v6.0.11", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "7ae9cb6ad0728f9a425499112929575c0b2cc09f" + "reference": "db426b27173f5e2d8b960dd10fa8ce19ea9ca5f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/7ae9cb6ad0728f9a425499112929575c0b2cc09f", - "reference": "7ae9cb6ad0728f9a425499112929575c0b2cc09f", + "url": "https://api.github.com/repos/symfony/uid/zipball/db426b27173f5e2d8b960dd10fa8ce19ea9ca5f3", + "reference": "db426b27173f5e2d8b960dd10fa8ce19ea9ca5f3", "shasum": "" }, "require": { @@ -7007,7 +7007,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.0.11" + "source": "https://github.com/symfony/uid/tree/v6.0.13" }, "funding": [ { @@ -7023,20 +7023,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:45:53+00:00" + "time": "2022-09-09T09:33:56+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.0.11", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2672bdc01c1971e3d8879ce153ec4c3621be5f07" + "reference": "367522dc769072f2abe554013e073eb079593829" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2672bdc01c1971e3d8879ce153ec4c3621be5f07", - "reference": "2672bdc01c1971e3d8879ce153ec4c3621be5f07", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/367522dc769072f2abe554013e073eb079593829", + "reference": "367522dc769072f2abe554013e073eb079593829", "shasum": "" }, "require": { @@ -7095,7 +7095,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.11" + "source": "https://github.com/symfony/var-dumper/tree/v6.0.13" }, "funding": [ { @@ -7111,7 +7111,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:45:53+00:00" + "time": "2022-09-08T09:32:44+00:00" }, { "name": "symfony/var-exporter", @@ -7187,16 +7187,16 @@ }, { "name": "thecodingmachine/safe", - "version": "v2.3.1", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/thecodingmachine/safe.git", - "reference": "b141ff557fafcd00a475298883e567fc06bd95dd" + "reference": "e788f3d09dcd36f806350aedb77eac348fafadd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/b141ff557fafcd00a475298883e567fc06bd95dd", - "reference": "b141ff557fafcd00a475298883e567fc06bd95dd", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/e788f3d09dcd36f806350aedb77eac348fafadd3", + "reference": "e788f3d09dcd36f806350aedb77eac348fafadd3", "shasum": "" }, "require": { @@ -7320,9 +7320,9 @@ "description": "PHP core functions that throw exceptions instead of returning FALSE on error", "support": { "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v2.3.1" + "source": "https://github.com/thecodingmachine/safe/tree/v2.4.0" }, - "time": "2022-09-20T12:01:26+00:00" + "time": "2022-10-07T14:02:17+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -9097,16 +9097,16 @@ }, { "name": "nunomaduro/larastan", - "version": "v2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/larastan.git", - "reference": "980199077a49d71ef7c03b65b9d6bcce1f6d7bad" + "reference": "a2567963b61ee35dedf87aac95136ac4944e86fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/980199077a49d71ef7c03b65b9d6bcce1f6d7bad", - "reference": "980199077a49d71ef7c03b65b9d6bcce1f6d7bad", + "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/a2567963b61ee35dedf87aac95136ac4944e86fa", + "reference": "a2567963b61ee35dedf87aac95136ac4944e86fa", "shasum": "" }, "require": { @@ -9123,7 +9123,7 @@ "mockery/mockery": "^1.4.4", "php": "^8.0.2", "phpmyadmin/sql-parser": "^5.5", - "phpstan/phpstan": "^1.8.1" + "phpstan/phpstan": "^1.8.7" }, "require-dev": { "nikic/php-parser": "^4.13.2", @@ -9172,7 +9172,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/larastan/issues", - "source": "https://github.com/nunomaduro/larastan/tree/v2.2.0" + "source": "https://github.com/nunomaduro/larastan/tree/2.2.1" }, "funding": [ { @@ -9192,7 +9192,7 @@ "type": "patreon" } ], - "time": "2022-08-30T19:02:01+00:00" + "time": "2022-10-04T16:15:14+00:00" }, { "name": "phar-io/manifest", @@ -9540,16 +9540,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.8.6", + "version": "1.8.8", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "c386ab2741e64cc9e21729f891b28b2b10fe6618" + "reference": "08310ce271984587e2a4cda94e1ac66510a6ea07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c386ab2741e64cc9e21729f891b28b2b10fe6618", - "reference": "c386ab2741e64cc9e21729f891b28b2b10fe6618", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/08310ce271984587e2a4cda94e1ac66510a6ea07", + "reference": "08310ce271984587e2a4cda94e1ac66510a6ea07", "shasum": "" }, "require": { @@ -9579,7 +9579,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.8.6" + "source": "https://github.com/phpstan/phpstan/tree/1.8.8" }, "funding": [ { @@ -9595,7 +9595,7 @@ "type": "tidelift" } ], - "time": "2022-09-23T09:54:39+00:00" + "time": "2022-10-06T12:51:57+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -11207,16 +11207,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.0.12", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "a36b782dc19dce3ab7e47d4b92b13cefb3511da3" + "reference": "3adca49133bd055ebe6011ed1e012be3c908af79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/a36b782dc19dce3ab7e47d4b92b13cefb3511da3", - "reference": "a36b782dc19dce3ab7e47d4b92b13cefb3511da3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3adca49133bd055ebe6011ed1e012be3c908af79", + "reference": "3adca49133bd055ebe6011ed1e012be3c908af79", "shasum": "" }, "require": { @@ -11250,7 +11250,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.12" + "source": "https://github.com/symfony/filesystem/tree/v6.0.13" }, "funding": [ { @@ -11266,7 +11266,7 @@ "type": "tidelift" } ], - "time": "2022-08-02T16:01:06+00:00" + "time": "2022-09-21T20:25:27+00:00" }, { "name": "symfony/options-resolver", @@ -11337,16 +11337,16 @@ }, { "name": "symfony/stopwatch", - "version": "v6.0.5", + "version": "v6.0.13", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "f2c1780607ec6502f2121d9729fd8150a655d337" + "reference": "7554fde6848af5ef1178f8ccbdbdb8ae1092c70a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f2c1780607ec6502f2121d9729fd8150a655d337", - "reference": "f2c1780607ec6502f2121d9729fd8150a655d337", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/7554fde6848af5ef1178f8ccbdbdb8ae1092c70a", + "reference": "7554fde6848af5ef1178f8ccbdbdb8ae1092c70a", "shasum": "" }, "require": { @@ -11379,7 +11379,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.5" + "source": "https://github.com/symfony/stopwatch/tree/v6.0.13" }, "funding": [ { @@ -11395,7 +11395,7 @@ "type": "tidelift" } ], - "time": "2022-02-21T17:15:17+00:00" + "time": "2022-09-28T15:52:47+00:00" }, { "name": "symfony/yaml", From 9f063810edba917a0fa1b989812eb5616b21f4d8 Mon Sep 17 00:00:00 2001 From: ildyria Date: Tue, 11 Oct 2022 10:57:29 +0200 Subject: [PATCH 12/29] fix logLevel --- app/ModelFunctions/LogFunctions.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/ModelFunctions/LogFunctions.php b/app/ModelFunctions/LogFunctions.php index f2150ebc342..3b34f1c83ba 100644 --- a/app/ModelFunctions/LogFunctions.php +++ b/app/ModelFunctions/LogFunctions.php @@ -38,7 +38,7 @@ private function interpolate(string $message, array $context = []): string /** * Implements log so that AbstractLogger works. */ - public function log($log, Stringable|string $message, array $context = []): void + public function log($level, Stringable|string $message, array $context = []): void { $dbt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3); // debug_backtrace return the backtrace of all the function calls @@ -53,7 +53,7 @@ public function log($log, Stringable|string $message, array $context = []): void } $log = Logs::create([ - 'type' => $log, + 'type' => $level, 'function' => $fun, 'line' => $line, 'text' => $text, From fae68b46c3e00709a6f54df5e1f9a284c14fe7d1 Mon Sep 17 00:00:00 2001 From: ildyria Date: Tue, 11 Oct 2022 11:29:29 +0200 Subject: [PATCH 13/29] reverted test WRTC --- tests/Feature/CommandFixPermissionsTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Feature/CommandFixPermissionsTest.php b/tests/Feature/CommandFixPermissionsTest.php index 3fcd4a66570..4bfe8c732bb 100644 --- a/tests/Feature/CommandFixPermissionsTest.php +++ b/tests/Feature/CommandFixPermissionsTest.php @@ -50,8 +50,8 @@ public function testFixPermissions(): void ])->assertSuccessful(); clearstatcache(true); - static::assertEquals(00664, fileperms($filePath) & 07777, $filePath); - static::assertEquals(02775, fileperms($dirPath) & 07777, $dirPath); + static::assertEquals(00664, fileperms($filePath) & 07777); + static::assertEquals(02775, fileperms($dirPath) & 07777); chmod($filePath, 00777); chmod($dirPath, 06777); From 25db8c3a0f74087e089b3d677ffea1c66e742b60 Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 14 Oct 2022 11:47:30 +0200 Subject: [PATCH 14/29] fix phpstan errors --- app/Actions/RSS/Generate.php | 1 + app/Actions/User/Notify.php | 6 +- app/Console/Commands/Optimize.php | 3 +- app/DTO/ArrayableDTO.php | 1 - composer.lock | 184 +++++++++++++++--------------- phpstan.neon | 6 +- 6 files changed, 105 insertions(+), 96 deletions(-) diff --git a/app/Actions/RSS/Generate.php b/app/Actions/RSS/Generate.php index 05b442822ee..8665025e00a 100644 --- a/app/Actions/RSS/Generate.php +++ b/app/Actions/RSS/Generate.php @@ -65,6 +65,7 @@ public function do(): Collection throw new FrameworkException('Date/Time component (Carbon)', $e); } + /** @var Collection $photos */ $photos = $this->photoQueryPolicy ->applySearchabilityFilter( Photo::with(['album', 'owner', 'size_variants', 'size_variants.sym_links']) diff --git a/app/Actions/User/Notify.php b/app/Actions/User/Notify.php index 839df23ed11..781af6aedf2 100644 --- a/app/Actions/User/Notify.php +++ b/app/Actions/User/Notify.php @@ -19,9 +19,13 @@ public function do(Photo $photo): void } // The admin is always informed - $users = new Collection(User::query()->find(0)); + $users = new Collection([User::query()->find(0)]); $album = $photo->album; if ($album !== null) { + // phpstan throws this error + // Parameter #1 ...$values of method Illuminate\Support\Collection::push() expects Illuminate\Database\Eloquent\Model|null, Illuminate\Database\Eloquent\Collection given. + // However the signature is push(... $values) which also consider collection/array... + // @phpstan-ignore-next-line $users->push($album->shared_with); $users->push($album->owner); } diff --git a/app/Console/Commands/Optimize.php b/app/Console/Commands/Optimize.php index a1505ecea0f..1e5428c0e87 100644 --- a/app/Console/Commands/Optimize.php +++ b/app/Console/Commands/Optimize.php @@ -6,7 +6,6 @@ use Illuminate\Foundation\Console\OptimizeCommand; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; -use function Safe\sprintf; use Symfony\Component\Console\Exception\ExceptionInterface as ConsoleException; use Symfony\Component\Console\Exception\InvalidOptionException; @@ -57,7 +56,7 @@ public function handle(): void 'assume-yes' => true, 'assume-no' => false, null => null, - default => throw new InvalidOptionException(sprintf('Unexpected option value %s for --dont-confirm', $this->option('dont-confirm'))) + default => throw new InvalidOptionException(sprintf('Unexpected option value %s for --dont-confirm', strval($this->option('dont-confirm')))) }; $hasPreviousCache = file_exists($this->laravel->getCachedConfigPath()) || file_exists($this->laravel->getCachedRoutesPath()); diff --git a/app/DTO/ArrayableDTO.php b/app/DTO/ArrayableDTO.php index 993b332cc34..880d614db6d 100644 --- a/app/DTO/ArrayableDTO.php +++ b/app/DTO/ArrayableDTO.php @@ -6,7 +6,6 @@ use Illuminate\Contracts\Support\Arrayable; use ReflectionClass; use ReflectionProperty; -use function Safe\sprintf; /** * In some cases, when a DTO does not need to apply casts on attributes diff --git a/composer.lock b/composer.lock index 058256611d3..dffa33e8e57 100644 --- a/composer.lock +++ b/composer.lock @@ -532,34 +532,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/", @@ -603,7 +604,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": [ { @@ -619,7 +620,7 @@ "type": "tidelift" } ], - "time": "2022-07-27T22:18:11+00:00" + "time": "2022-10-12T20:51:15+00:00" }, { "name": "doctrine/inflector", @@ -1720,16 +1721,16 @@ }, { "name": "laravel/framework", - "version": "v9.34.0", + "version": "v9.35.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "b7af7ff35497eb1c4e61652f522a862164dbba5a" + "reference": "79aed20f54b6ab75f926bf7d0dd7a5043ceb774a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/b7af7ff35497eb1c4e61652f522a862164dbba5a", - "reference": "b7af7ff35497eb1c4e61652f522a862164dbba5a", + "url": "https://api.github.com/repos/laravel/framework/zipball/79aed20f54b6ab75f926bf7d0dd7a5043ceb774a", + "reference": "79aed20f54b6ab75f926bf7d0dd7a5043ceb774a", "shasum": "" }, "require": { @@ -1902,7 +1903,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-10-04T13:33:43+00:00" + "time": "2022-10-11T17:30:47+00:00" }, { "name": "laravel/serializable-closure", @@ -2154,16 +2155,16 @@ }, { "name": "league/flysystem", - "version": "3.5.2", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "c73c4eb31f2e883b3897ab5591aa2dbc48112433" + "reference": "8eded334b9894dc90ebdcb7be81e3a1c9413f709" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c73c4eb31f2e883b3897ab5591aa2dbc48112433", - "reference": "c73c4eb31f2e883b3897ab5591aa2dbc48112433", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8eded334b9894dc90ebdcb7be81e3a1c9413f709", + "reference": "8eded334b9894dc90ebdcb7be81e3a1c9413f709", "shasum": "" }, "require": { @@ -2225,7 +2226,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.5.2" + "source": "https://github.com/thephpleague/flysystem/tree/3.6.0" }, "funding": [ { @@ -2241,7 +2242,7 @@ "type": "tidelift" } ], - "time": "2022-09-23T18:59:16+00:00" + "time": "2022-10-13T20:05:14+00:00" }, { "name": "league/mime-type-detection", @@ -4867,16 +4868,16 @@ }, { "name": "symfony/console", - "version": "v6.0.13", + "version": "v6.0.14", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8f14753b865651c2aad107ef97475740a9b0730f" + "reference": "1f89cab8d52c84424f798495b3f10342a7b1a070" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8f14753b865651c2aad107ef97475740a9b0730f", - "reference": "8f14753b865651c2aad107ef97475740a9b0730f", + "url": "https://api.github.com/repos/symfony/console/zipball/1f89cab8d52c84424f798495b3f10342a7b1a070", + "reference": "1f89cab8d52c84424f798495b3f10342a7b1a070", "shasum": "" }, "require": { @@ -4942,7 +4943,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.13" + "source": "https://github.com/symfony/console/tree/v6.0.14" }, "funding": [ { @@ -4958,7 +4959,7 @@ "type": "tidelift" } ], - "time": "2022-09-03T14:23:25+00:00" + "time": "2022-10-07T08:02:12+00:00" }, { "name": "symfony/css-selector", @@ -5094,16 +5095,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.0.11", + "version": "v6.0.14", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "cb302377e1b862540436f22be9ff07079a5836ae" + "reference": "81e57c793d9a573f29f8b5296d5d8ee4602badcb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/cb302377e1b862540436f22be9ff07079a5836ae", - "reference": "cb302377e1b862540436f22be9ff07079a5836ae", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/81e57c793d9a573f29f8b5296d5d8ee4602badcb", + "reference": "81e57c793d9a573f29f8b5296d5d8ee4602badcb", "shasum": "" }, "require": { @@ -5145,7 +5146,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/v6.0.11" + "source": "https://github.com/symfony/error-handler/tree/v6.0.14" }, "funding": [ { @@ -5161,7 +5162,7 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:39:48+00:00" + "time": "2022-10-07T08:02:12+00:00" }, { "name": "symfony/event-dispatcher", @@ -5388,16 +5389,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.0.13", + "version": "v6.0.14", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "294208f37a73b7ae64b4297d936e890d5b514902" + "reference": "e8aa505d35660877e6695d68be53df2ceac7cf57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/294208f37a73b7ae64b4297d936e890d5b514902", - "reference": "294208f37a73b7ae64b4297d936e890d5b514902", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8aa505d35660877e6695d68be53df2ceac7cf57", + "reference": "e8aa505d35660877e6695d68be53df2ceac7cf57", "shasum": "" }, "require": { @@ -5443,7 +5444,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.0.13" + "source": "https://github.com/symfony/http-foundation/tree/v6.0.14" }, "funding": [ { @@ -5459,20 +5460,20 @@ "type": "tidelift" } ], - "time": "2022-09-17T07:33:45+00:00" + "time": "2022-10-02T08:16:40+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.0.13", + "version": "v6.0.14", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "5939a039103580d8d86a4c80e245258ad50c91b2" + "reference": "f9fc93c4f12e2fd7dea37f7b5840deb34e9037fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/5939a039103580d8d86a4c80e245258ad50c91b2", - "reference": "5939a039103580d8d86a4c80e245258ad50c91b2", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f9fc93c4f12e2fd7dea37f7b5840deb34e9037fc", + "reference": "f9fc93c4f12e2fd7dea37f7b5840deb34e9037fc", "shasum": "" }, "require": { @@ -5552,7 +5553,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/v6.0.13" + "source": "https://github.com/symfony/http-kernel/tree/v6.0.14" }, "funding": [ { @@ -5568,7 +5569,7 @@ "type": "tidelift" } ], - "time": "2022-09-30T08:03:37+00:00" + "time": "2022-10-12T07:43:45+00:00" }, { "name": "symfony/mailer", @@ -5646,16 +5647,16 @@ }, { "name": "symfony/mime", - "version": "v6.0.13", + "version": "v6.0.14", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "c1d6eba531d956c23b3127dc6ae6f5ac4a90db6c" + "reference": "c01b88b63418131daf2edd0bdc17fc8a6d1c939a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/c1d6eba531d956c23b3127dc6ae6f5ac4a90db6c", - "reference": "c1d6eba531d956c23b3127dc6ae6f5ac4a90db6c", + "url": "https://api.github.com/repos/symfony/mime/zipball/c01b88b63418131daf2edd0bdc17fc8a6d1c939a", + "reference": "c01b88b63418131daf2edd0bdc17fc8a6d1c939a", "shasum": "" }, "require": { @@ -5667,7 +5668,8 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4" + "symfony/mailer": "<5.4", + "symfony/serializer": "<5.4.14|>=6.0,<6.0.14|>=6.1,<6.1.6" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1", @@ -5675,7 +5677,7 @@ "symfony/dependency-injection": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/serializer": "^5.4.14|~6.0.14|^6.1.6" }, "type": "library", "autoload": { @@ -5707,7 +5709,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.0.13" + "source": "https://github.com/symfony/mime/tree/v6.0.14" }, "funding": [ { @@ -5723,7 +5725,7 @@ "type": "tidelift" } ], - "time": "2022-09-02T08:05:03+00:00" + "time": "2022-10-07T08:02:12+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6695,16 +6697,16 @@ }, { "name": "symfony/string", - "version": "v6.0.13", + "version": "v6.0.14", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "65e99fb179e7241606377e4042cd2161f3dd1c05" + "reference": "3db7da820a6e4a584b714b3933c34c6a7db4d86c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/65e99fb179e7241606377e4042cd2161f3dd1c05", - "reference": "65e99fb179e7241606377e4042cd2161f3dd1c05", + "url": "https://api.github.com/repos/symfony/string/zipball/3db7da820a6e4a584b714b3933c34c6a7db4d86c", + "reference": "3db7da820a6e4a584b714b3933c34c6a7db4d86c", "shasum": "" }, "require": { @@ -6760,7 +6762,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.13" + "source": "https://github.com/symfony/string/tree/v6.0.14" }, "funding": [ { @@ -6776,20 +6778,20 @@ "type": "tidelift" } ], - "time": "2022-09-02T08:05:03+00:00" + "time": "2022-10-10T09:34:08+00:00" }, { "name": "symfony/translation", - "version": "v6.0.12", + "version": "v6.0.14", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "5e71973b4991e141271465dacf4bf9e719941424" + "reference": "6f99eb179aee4652c0a7cd7c11f2a870d904330c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/5e71973b4991e141271465dacf4bf9e719941424", - "reference": "5e71973b4991e141271465dacf4bf9e719941424", + "url": "https://api.github.com/repos/symfony/translation/zipball/6f99eb179aee4652c0a7cd7c11f2a870d904330c", + "reference": "6f99eb179aee4652c0a7cd7c11f2a870d904330c", "shasum": "" }, "require": { @@ -6855,7 +6857,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.12" + "source": "https://github.com/symfony/translation/tree/v6.0.14" }, "funding": [ { @@ -6871,7 +6873,7 @@ "type": "tidelift" } ], - "time": "2022-08-02T16:01:06+00:00" + "time": "2022-10-07T08:02:12+00:00" }, { "name": "symfony/translation-contracts", @@ -7027,16 +7029,16 @@ }, { "name": "symfony/var-dumper", - "version": "v6.0.13", + "version": "v6.0.14", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "367522dc769072f2abe554013e073eb079593829" + "reference": "72af925ddd41ca0372d166d004bc38a00c4608cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/367522dc769072f2abe554013e073eb079593829", - "reference": "367522dc769072f2abe554013e073eb079593829", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/72af925ddd41ca0372d166d004bc38a00c4608cc", + "reference": "72af925ddd41ca0372d166d004bc38a00c4608cc", "shasum": "" }, "require": { @@ -7095,7 +7097,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.13" + "source": "https://github.com/symfony/var-dumper/tree/v6.0.14" }, "funding": [ { @@ -7111,7 +7113,7 @@ "type": "tidelift" } ], - "time": "2022-09-08T09:32:44+00:00" + "time": "2022-10-07T08:02:12+00:00" }, { "name": "symfony/var-exporter", @@ -8532,16 +8534,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.11.0", + "version": "v3.12.0", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "7dcdea3f2f5f473464e835be9be55283ff8cfdc3" + "reference": "eae11d945e2885d86e1c080eec1bb30a2aa27998" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/7dcdea3f2f5f473464e835be9be55283ff8cfdc3", - "reference": "7dcdea3f2f5f473464e835be9be55283ff8cfdc3", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/eae11d945e2885d86e1c080eec1bb30a2aa27998", + "reference": "eae11d945e2885d86e1c080eec1bb30a2aa27998", "shasum": "" }, "require": { @@ -8574,8 +8576,8 @@ "phpspec/prophecy": "^1.15", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", "symfony/phpunit-bridge": "^6.0", "symfony/yaml": "^5.4 || ^6.0" }, @@ -8609,7 +8611,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.11.0" + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.12.0" }, "funding": [ { @@ -8617,7 +8619,7 @@ "type": "github" } ], - "time": "2022-09-01T18:24:51+00:00" + "time": "2022-10-12T14:20:51+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9540,16 +9542,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.8.8", + "version": "1.8.9", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "08310ce271984587e2a4cda94e1ac66510a6ea07" + "reference": "3a72d9d9f2528fbd50c2d8fcf155fd9f74ade3f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/08310ce271984587e2a4cda94e1ac66510a6ea07", - "reference": "08310ce271984587e2a4cda94e1ac66510a6ea07", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/3a72d9d9f2528fbd50c2d8fcf155fd9f74ade3f2", + "reference": "3a72d9d9f2528fbd50c2d8fcf155fd9f74ade3f2", "shasum": "" }, "require": { @@ -9579,7 +9581,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.8.8" + "source": "https://github.com/phpstan/phpstan/tree/1.8.9" }, "funding": [ { @@ -9595,7 +9597,7 @@ "type": "tidelift" } ], - "time": "2022-10-06T12:51:57+00:00" + "time": "2022-10-13T13:40:18+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -11399,16 +11401,16 @@ }, { "name": "symfony/yaml", - "version": "v6.0.12", + "version": "v6.0.14", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "8c68efb08b038ec02753da6f16e1601a6ed4ef17" + "reference": "e65020d137ad54beb85a67ffe6435e980f35ccf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/8c68efb08b038ec02753da6f16e1601a6ed4ef17", - "reference": "8c68efb08b038ec02753da6f16e1601a6ed4ef17", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e65020d137ad54beb85a67ffe6435e980f35ccf3", + "reference": "e65020d137ad54beb85a67ffe6435e980f35ccf3", "shasum": "" }, "require": { @@ -11453,7 +11455,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.0.12" + "source": "https://github.com/symfony/yaml/tree/v6.0.14" }, "funding": [ { @@ -11469,7 +11471,7 @@ "type": "tidelift" } ], - "time": "2022-08-02T16:01:06+00:00" + "time": "2022-10-07T08:02:12+00:00" }, { "name": "thecodingmachine/phpstan-safe-rule", diff --git a/phpstan.neon b/phpstan.neon index 324ca805610..ae2c1c84bc4 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -17,7 +17,11 @@ parameters: - phpstan/stubs/imageexception.stub ignoreErrors: # bunch of false positives from Eloquent - - '#Dynamic call to static method App\\Models\\Extensions\\FixedQueryBuilder::from\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Extensions\\FixedQueryBuilder)(<.*>)?::from\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Extensions\\FixedQueryBuilder)(<.*>)?::limit\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Extensions\\FixedQueryBuilder)(<.*>)?::offset\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Extensions\\FixedQueryBuilder)(<.*>)?::take\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Extensions\\FixedQueryBuilder)(<.*>)?::truncate\(\).#' - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Extensions\\FixedQueryBuilder)(<.*>)?::insert\(\).#' - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Extensions\\FixedQueryBuilder)(<.*>)?::select\(\).#' - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Extensions\\FixedQueryBuilder)(<.*>)?::orderBy\(\)#' From 317315682bd1bc5e5c95bc2f959adde8cff2d402 Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 14 Oct 2022 12:08:16 +0200 Subject: [PATCH 15/29] reverted migrations --- ...0_12_12_203831_create_web_authn_tables.php | 34 +++++- .../2021_12_04_181200_refactor_models.php | 107 +++++++++++------- 2 files changed, 100 insertions(+), 41 deletions(-) diff --git a/database/migrations/2020_12_12_203831_create_web_authn_tables.php b/database/migrations/2020_12_12_203831_create_web_authn_tables.php index 394d5688f0a..62de4aac9d3 100644 --- a/database/migrations/2020_12_12_203831_create_web_authn_tables.php +++ b/database/migrations/2020_12_12_203831_create_web_authn_tables.php @@ -1,7 +1,9 @@ string('id', 255); + + // Change accordingly for your users table if you need to. + $table->unsignedBigInteger('user_id'); + + $table->string('name')->nullable(); + $table->string('type', 16); + $table->json('transports'); + $table->json('attestation_type'); + $table->json('trust_path'); + $table->uuid('aaguid'); + $table->binary('public_key'); + $table->unsignedInteger('counter')->default(0); + + // This saves the external "ID" that identifies the user. We use UUID default + // since it's very straightforward. You can change this for a plain string. + // It must be nullable because those old U2F keys do not use user handle. + $table->uuid('user_handle')->nullable(); + + $table->timestamps(); + $table->softDeletes(WebAuthnCredential::DELETED_AT); + Configs::where('key', '=', 'username')->orWhere('key', '=', 'password')->update(['type_range' => STRING]); + + $table->primary(['id', 'user_id']); + }); } /** @@ -22,8 +52,10 @@ public function up() */ public function down() { + defined('STRING_REQ') or define('STRING_REQ', 'string_required'); + if (Schema::hasTable('configs')) { - Configs::where('key', '=', 'username')->orWhere('key', '=', 'password')->update(['type_range' => 'string_required']); + Configs::where('key', '=', 'username')->orWhere('key', '=', 'password')->update(['type_range' => STRING_REQ]); } Schema::dropIfExists('web_authn_credentials'); } diff --git a/database/migrations/2021_12_04_181200_refactor_models.php b/database/migrations/2021_12_04_181200_refactor_models.php index fa6d9df75aa..4d156bf1805 100644 --- a/database/migrations/2021_12_04_181200_refactor_models.php +++ b/database/migrations/2021_12_04_181200_refactor_models.php @@ -13,7 +13,7 @@ use Illuminate\Support\Facades\Storage; use Kalnoy\Nestedset\Node; use Kalnoy\Nestedset\NodeTrait; -use League\Flysystem\FilesystemException; +use League\Flysystem\FileNotFoundException; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Output\ConsoleSectionOutput; @@ -280,6 +280,7 @@ public function up() $this->createSizeVariantTableUp(); $this->createSymLinkTableUp(); $this->createRemainingForeignConstraints(); + $this->createWebAuthnTableUp(); $this->createPageTableUp(); $this->createPageContentTableUp(); $this->createLogTableUp(); @@ -318,6 +319,7 @@ public function down() $this->createUserAlbumTableDown(); $this->createPhotoTableDown(); $this->createSymLinkTableDown(); + $this->createWebAuthnTableDown(); $this->createPageTableDown(); $this->createPageContentTableDown(); $this->createLogTableDown(); @@ -386,12 +388,10 @@ private function renameTables(): void $this->dropIndexIfExists($table, 'photos_album_id_is_starred_type_index'); }); Schema::rename('photos', 'photos_tmp'); - if (Schema::hasTable('web_authn_credentials')) { - Schema::table('web_authn_credentials', function (Blueprint $table) { - $this->dropForeignIfExists($table, 'web_authn_credentials_user_id_foreign'); - }); - Schema::rename('web_authn_credentials', 'web_authn_credentials_tmp'); - } + Schema::table('web_authn_credentials', function (Blueprint $table) { + $this->dropForeignIfExists($table, 'web_authn_credentials_user_id_foreign'); + }); + Schema::rename('web_authn_credentials', 'web_authn_credentials_tmp'); Schema::table('users', function (Blueprint $table) { $this->dropUniqueIfExists($table, 'users_username_unique'); $this->dropUniqueIfExists($table, 'users_email_unique'); @@ -417,9 +417,7 @@ private function dropTemporaryTablesUp(): void DB::table('albums_tmp')->update(['cover_id' => null]); Schema::drop('photos_tmp'); Schema::drop('albums_tmp'); - if (Schema::hasTable('web_authn_credentials_tmp')) { - Schema::drop('web_authn_credentials_tmp'); - } + Schema::drop('web_authn_credentials_tmp'); Schema::drop('users_tmp'); Schema::drop('page_contents_tmp'); Schema::drop('pages_tmp'); @@ -444,9 +442,7 @@ private function dropTemporaryTablesDown(): void Schema::drop('albums_tmp'); Schema::drop('tag_albums'); Schema::drop('base_albums'); - if (Schema::hasTable('web_authn_credentials_tmp')) { - Schema::drop('web_authn_credentials_tmp'); - } + Schema::drop('web_authn_credentials_tmp'); Schema::drop('users_tmp'); Schema::drop('page_contents_tmp'); Schema::drop('pages_tmp'); @@ -990,6 +986,41 @@ private function renamePageContentTable(): void Schema::drop('page_contents'); } + private function createWebAuthnTable(int $precision): void + { + Schema::create('web_authn_credentials', function (Blueprint $table) use ($precision) { + $table->string('id', 255); + $table->dateTime('created_at', $precision)->nullable(false); + $table->dateTime('updated_at', $precision)->nullable(false); + $table->dateTime('disabled_at', $precision)->nullable(true); + $table->unsignedInteger('user_id')->nullable(false); + $table->string('name')->nullable(); + $table->string('type', 16); + $table->json('transports'); + $table->json('attestation_type'); + $table->json('trust_path'); + $table->uuid('aaguid'); + $table->binary('public_key'); + $table->unsignedInteger('counter')->default(0); + $table->uuid('user_handle')->nullable(); + // Indices + $table->primary(['id', 'user_id']); + $table->foreign('user_id') + ->references('id')->on('users') + ->cascadeOnDelete(); + }); + } + + private function createWebAuthnTableUp(): void + { + $this->createWebAuthnTable(6); + } + + private function createWebAuthnTableDown(): void + { + $this->createWebAuthnTable(0); + } + /** * Creates remaining foreign constraints which could not immediately be * created while the owning table was created due to circular dependencies. @@ -1397,7 +1428,7 @@ private function downgradeCopy(): void if ($sizeVariant->short_path !== $expectedShortPath) { try { Storage::move($sizeVariant->short_path, $expectedShortPath); - } catch (FilesystemException $e) { + } catch (FileNotFoundException $e) { // sic! just ignore // This exception is thrown if there are duplicate // photos which point to the same physical file. @@ -1445,29 +1476,27 @@ private function downgradeCopy(): void */ private function copyStructurallyUnchangedTables(): void { - if (Schema::hasTable('web_authn_credentials')) { - $pgBar = $this->getProgressBar('web_authn_credentials'); - $credentials = DB::table('web_authn_credentials_tmp')->get(); - $pgBar->setMaxSteps($credentials->count()); - foreach ($credentials as $credential) { - $pgBar->advance(); - DB::table('web_authn_credentials')->insert([ - 'id' => $credential->id, - 'created_at' => $credential->created_at, - 'updated_at' => $credential->updated_at, - 'disabled_at' => $credential->disabled_at, - 'user_id' => $credential->user_id, - 'name' => $credential->name, - 'type' => $credential->type, - 'transports' => $credential->transports, - 'attestation_type' => $credential->attestation_type, - 'trust_path' => $credential->trust_path, - 'aaguid' => $credential->aaguid, - 'public_key' => $credential->public_key, - 'counter' => $credential->counter, - 'user_handle' => $credential->user_handle, - ]); - } + $pgBar = $this->getProgressBar('web_authn_credentials'); + $credentials = DB::table('web_authn_credentials_tmp')->get(); + $pgBar->setMaxSteps($credentials->count()); + foreach ($credentials as $credential) { + $pgBar->advance(); + DB::table('web_authn_credentials')->insert([ + 'id' => $credential->id, + 'created_at' => $credential->created_at, + 'updated_at' => $credential->updated_at, + 'disabled_at' => $credential->disabled_at, + 'user_id' => $credential->user_id, + 'name' => $credential->name, + 'type' => $credential->type, + 'transports' => $credential->transports, + 'attestation_type' => $credential->attestation_type, + 'trust_path' => $credential->trust_path, + 'aaguid' => $credential->aaguid, + 'public_key' => $credential->public_key, + 'counter' => $credential->counter, + 'user_handle' => $credential->user_handle, + ]); } $pgBar = $this->getProgressBar('pages'); @@ -2015,9 +2044,7 @@ private function ensureDBConsistency(): void // If the album of a photo is missing, assign it to root (unsorted) album $isConsistent &= $checkRelation('photo', 'photos', 'album_id', 'album', 'albums', 'nullify'); // Delete orphaned WebAuthn credentials - if (Schema::hasTable('web_authn_credentials')) { - $isConsistent &= $checkRelation('web authentication credential', 'web_authn_credentials', 'user_id', 'user', 'users', 'delete'); - } + $isConsistent &= $checkRelation('web authentication credential', 'web_authn_credentials', 'user_id', 'user', 'users', 'delete'); // There is no obvious fix for orphaned page content $isConsistent &= $checkRelation('page content', 'page_contents', 'page_id', 'page', 'pages'); From 6a74bc3634de4f36a162b57f875c42fb0965cd2c Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 14 Oct 2022 12:18:16 +0200 Subject: [PATCH 16/29] reverted Storage change --- app/Http/Middleware/LocalStorageOnly.php | 4 ++-- app/Image/FileDeleter.php | 2 +- app/Image/FlysystemFile.php | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/Http/Middleware/LocalStorageOnly.php b/app/Http/Middleware/LocalStorageOnly.php index 9fba527cef6..511e70334d5 100644 --- a/app/Http/Middleware/LocalStorageOnly.php +++ b/app/Http/Middleware/LocalStorageOnly.php @@ -2,9 +2,9 @@ namespace App\Http\Middleware; +use App\Contracts\SizeVariantNamingStrategy; use App\Exceptions\RequestUnsupportedException; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Storage; use League\Flysystem\Local\LocalFilesystemAdapter; class LocalStorageOnly @@ -21,7 +21,7 @@ class LocalStorageOnly */ public function handle(Request $request, \Closure $next) { - $storageAdapter = Storage::disk()->getAdapter(); + $storageAdapter = SizeVariantNamingStrategy::getImageDisk()->getAdapter(); if (!($storageAdapter instanceof LocalFilesystemAdapter)) { throw new RequestUnsupportedException($request->url() . ' not implemented for non-local storage'); } diff --git a/app/Image/FileDeleter.php b/app/Image/FileDeleter.php index 6fdf6cca3c0..f8126458a70 100644 --- a/app/Image/FileDeleter.php +++ b/app/Image/FileDeleter.php @@ -108,7 +108,7 @@ public function do(): void if ($isLocalDisk) { foreach ($this->regularFilesOrSymbolicLinks as $fileOrLink) { try { - $absolutePath = Storage::path($fileOrLink); + $absolutePath = $defaultDisk->path($fileOrLink); // Note, `file_exist` returns `false` for existing, // but dead links. // So the first part takes care of deleting links no matter diff --git a/app/Image/FlysystemFile.php b/app/Image/FlysystemFile.php index 1030215bb10..e62a7107822 100644 --- a/app/Image/FlysystemFile.php +++ b/app/Image/FlysystemFile.php @@ -6,7 +6,6 @@ use App\Exceptions\MediaFileOperationException; use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Contracts\Filesystem\Filesystem; -use Illuminate\Support\Facades\Storage; use League\Flysystem\FilesystemException; use League\Flysystem\Local\LocalFilesystemAdapter; use function Safe\fclose; @@ -176,6 +175,6 @@ public function toLocalFile(): NativeLocalFile throw new MediaFileOperationException('file is not hosted locally'); } - return new NativeLocalFile(Storage::path($this->relativePath)); + return new NativeLocalFile($this->disk->path($this->relativePath)); } } From 6f0918d21ee0e4416cb21c7fa931189cf48c1e2b Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 14 Oct 2022 12:20:33 +0200 Subject: [PATCH 17/29] remove hard link dependency --- .../migrations/2020_12_12_203831_create_web_authn_tables.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/database/migrations/2020_12_12_203831_create_web_authn_tables.php b/database/migrations/2020_12_12_203831_create_web_authn_tables.php index 62de4aac9d3..bffd6fa4526 100644 --- a/database/migrations/2020_12_12_203831_create_web_authn_tables.php +++ b/database/migrations/2020_12_12_203831_create_web_authn_tables.php @@ -1,13 +1,14 @@ uuid('user_handle')->nullable(); $table->timestamps(); - $table->softDeletes(WebAuthnCredential::DELETED_AT); + $table->softDeletes(self::DELETED_AT); Configs::where('key', '=', 'username')->orWhere('key', '=', 'password')->update(['type_range' => STRING]); $table->primary(['id', 'user_id']); From 80d541296a638e644bd5aaab46fde837ab2fdd9b Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 14 Oct 2022 12:28:11 +0200 Subject: [PATCH 18/29] Drop webauthn table when switching provider --- .../migrations/2022_07_09_130303_create_webauthn_credentials.php | 1 + 1 file changed, 1 insertion(+) diff --git a/database/migrations/2022_07_09_130303_create_webauthn_credentials.php b/database/migrations/2022_07_09_130303_create_webauthn_credentials.php index 03f9a4d8af0..8bcf6d885b6 100644 --- a/database/migrations/2022_07_09_130303_create_webauthn_credentials.php +++ b/database/migrations/2022_07_09_130303_create_webauthn_credentials.php @@ -16,6 +16,7 @@ class CreateWebauthnCredentials extends Migration */ public function up(): void { + Schema::dropIfExists('web_authn_credentials'); Schema::create('webauthn_credentials', static function (Blueprint $table): void { static::defaultBlueprint($table); }); From 3bf2eb8b70a2be437a718dec4bb61df70aa76647 Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 14 Oct 2022 12:55:23 +0200 Subject: [PATCH 19/29] delete old table and recreate it on rollback --- ..._09_130303_create_webauthn_credentials.php | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/database/migrations/2022_07_09_130303_create_webauthn_credentials.php b/database/migrations/2022_07_09_130303_create_webauthn_credentials.php index 8bcf6d885b6..92fbe428731 100644 --- a/database/migrations/2022_07_09_130303_create_webauthn_credentials.php +++ b/database/migrations/2022_07_09_130303_create_webauthn_credentials.php @@ -30,6 +30,9 @@ public function up(): void public function down(): void { Schema::dropIfExists('webauthn_credentials'); + Schema::create('web_authn_credentials', function (Blueprint $table): void { + static::oldTable($table); + }); } /** @@ -75,4 +78,34 @@ protected static function defaultBlueprint(Blueprint $table): void $table->dateTime('created_at')->nullable(false); $table->dateTime('updated_at')->nullable(false); } + + /** + * Generate the default blueprint for the WebAuthn credentials table. + * + * @param \Illuminate\Database\Schema\Blueprint $table + * + * @return void + */ + protected static function oldTable(Blueprint $table): void + { + $table->string('id', 255); + $table->dateTime('created_at', 6)->nullable(false); + $table->dateTime('updated_at', 6)->nullable(false); + $table->dateTime('disabled_at', 6)->nullable(true); + $table->unsignedInteger('user_id')->nullable(false); + $table->string('name')->nullable(); + $table->string('type', 16); + $table->json('transports'); + $table->json('attestation_type'); + $table->json('trust_path'); + $table->uuid('aaguid'); + $table->binary('public_key'); + $table->unsignedInteger('counter')->default(0); + $table->uuid('user_handle')->nullable(); + // Indices + $table->primary(['id', 'user_id']); + $table->foreign('user_id') + ->references('id')->on('users') + ->cascadeOnDelete(); + } } \ No newline at end of file From 4398b52e84344b22d3f219cf207602aa530a318c Mon Sep 17 00:00:00 2001 From: Matthias Nagel Date: Thu, 20 Oct 2022 12:41:56 +0200 Subject: [PATCH 20/29] Synced frontend --- public/Lychee-front | 2 +- public/dist/main.js | 18 +++++++++--------- public/dist/view.js | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/public/Lychee-front b/public/Lychee-front index 50efe769e9d..5492dc5f225 160000 --- a/public/Lychee-front +++ b/public/Lychee-front @@ -1 +1 @@ -Subproject commit 50efe769e9d53b9a617d79232512cb667adbe892 +Subproject commit 5492dc5f225473df3e446d36e7021e1011b5f84a diff --git a/public/dist/main.js b/public/dist/main.js index 11e7754073a..3766e65dedb 100644 --- a/public/dist/main.js +++ b/public/dist/main.js @@ -1013,7 +1013,7 @@ var _templateObject = _taggedTemplateLiteral(["$", ""], ["$", ""]), _templateObject21 = _taggedTemplateLiteral(["
", "
"], ["
", "
"]), _templateObject22 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t

\n\t\t\tSave\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t

\n\t\t\tSave\n\t\t\tDelete\n\t\t
\n\t\t"]), - _templateObject23 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"]), + _templateObject23 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"]), _templateObject24 = _taggedTemplateLiteral(["\n\t\t\t ", "\n\t\t\t \"thumbnail\"\n\t\t\t
$", "
\n\t\t\t "], ["\n\t\t\t ", "\n\t\t\t \"thumbnail\"\n\t\t\t
$", "
\n\t\t\t "]), _templateObject25 = _taggedTemplateLiteral(["$", "", ""], ["$", "", ""]), _templateObject26 = _taggedTemplateLiteral(["\n\t\t", "\n\t\t×\n\t\t", ""], ["\n\t\t", "\n\t\t×\n\t\t", ""]), @@ -11280,10 +11280,10 @@ u2f.login = function () { return; } - new Larapass({ + new WebAuthn({ login: "/api/WebAuthn::login", - loginOptions: "/api/WebAuthn::login/gen" - }).login({ + loginOptions: "/api/WebAuthn::login/options" + }, {}, false).login({ user_id: 0 // for now it is only available to Admin user via a secret key shortcut. }).then(function () { loadingBar.show("success", lychee.locale["U2F_AUTHENTIFICATION_SUCCESS"]); @@ -11301,12 +11301,12 @@ u2f.register = function () { return; } - var larapass = new Larapass({ + var webauthn = new WebAuthn({ register: "/api/WebAuthn::register", - registerOptions: "/api/WebAuthn::register/gen" - }); - if (Larapass.supportsWebAuthn()) { - larapass.register().then(function () { + registerOptions: "/api/WebAuthn::register/options" + }, {}, false); + if (WebAuthn.supportsWebAuthn()) { + webauthn.register().then(function () { loadingBar.show("success", lychee.locale["U2F_REGISTRATION_SUCCESS"]); u2f.list(); // reload credential list }).catch(function () { diff --git a/public/dist/view.js b/public/dist/view.js index 22c635862ec..285a6457eee 100644 --- a/public/dist/view.js +++ b/public/dist/view.js @@ -34,7 +34,7 @@ var _templateObject = _taggedTemplateLiteral(["$", ""], ["$", ""]), _templateObject21 = _taggedTemplateLiteral(["
", "
"], ["
", "
"]), _templateObject22 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t

\n\t\t\tSave\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t

\n\t\t\tSave\n\t\t\tDelete\n\t\t
\n\t\t"]), - _templateObject23 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"]), + _templateObject23 = _taggedTemplateLiteral(["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"], ["
\n\t\t\t

\n\t\t\t\n\t\t\t", "\n\t\t\t\n\t\t\t

\n\t\t\tDelete\n\t\t
\n\t\t"]), _templateObject24 = _taggedTemplateLiteral(["$", "", ""], ["$", "", ""]), _templateObject25 = _taggedTemplateLiteral(["\n\t\t\t\t \n\t\t\t\t \n\t\t\t\t "], ["\n\t\t\t\t \n\t\t\t\t
\n\t\t\t\t "]), _templateObject26 = _taggedTemplateLiteral([", "], [", "]), From 4b1ff0be6a835e98c9f532d00fcf75bc55ff2efb Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 20 Oct 2022 13:01:31 +0200 Subject: [PATCH 21/29] fix User/Notify --- app/Actions/User/Notify.php | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/app/Actions/User/Notify.php b/app/Actions/User/Notify.php index 781af6aedf2..8f085c429ff 100644 --- a/app/Actions/User/Notify.php +++ b/app/Actions/User/Notify.php @@ -2,31 +2,47 @@ namespace App\Actions\User; +use App\Exceptions\ConfigurationKeyMissingException; +use App\Exceptions\Internal\QueryBuilderException; use App\Models\Configs; use App\Models\Photo; use App\Models\User; use App\Notifications\PhotoAdded; +use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Database\MultipleRecordsFoundException; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Notification; class Notify { + /** + * Notify users that a new photo has been uploaded. + * + * @param Photo $photo + * + * @return void + * + * @throws ConfigurationKeyMissingException + * @throws QueryBuilderException + * @throws ModelNotFoundException + * @throws MultipleRecordsFoundException + */ public function do(Photo $photo): void { if (!Configs::getValueAsBool('new_photos_notification')) { return; } + /** @var Collection Users to be informed */ + $users = new Collection(); + // The admin is always informed - $users = new Collection([User::query()->find(0)]); + $users->add(User::where('id', '=', 0)->sole()); + $album = $photo->album; if ($album !== null) { - // phpstan throws this error - // Parameter #1 ...$values of method Illuminate\Support\Collection::push() expects Illuminate\Database\Eloquent\Model|null, Illuminate\Database\Eloquent\Collection given. - // However the signature is push(... $values) which also consider collection/array... - // @phpstan-ignore-next-line - $users->push($album->shared_with); + $users = $users->concat($album->shared_with); $users->push($album->owner); } From 30ecdef753c7135dc6d34b141e672ef563eaba5e Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 20 Oct 2022 13:01:56 +0200 Subject: [PATCH 22/29] fix FlySystemFile WRTC --- app/Image/FlysystemFile.php | 2 +- app/Image/StreamStatFilter.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/Image/FlysystemFile.php b/app/Image/FlysystemFile.php index e62a7107822..39638c1c3be 100644 --- a/app/Image/FlysystemFile.php +++ b/app/Image/FlysystemFile.php @@ -62,7 +62,7 @@ public function write($stream, bool $collectStatistics = false): ?StreamStat $streamStat = $collectStatistics ? static::appendStatFilter($stream) : null; if (!$this->disk->writeStream($this->relativePath, $stream)) { - throw new FlySystemLycheeException('Filesystem::put failed'); + throw new FlySystemLycheeException('Filesystem::writeStream failed'); } return $streamStat; diff --git a/app/Image/StreamStatFilter.php b/app/Image/StreamStatFilter.php index 213b288a887..af6d5a02687 100644 --- a/app/Image/StreamStatFilter.php +++ b/app/Image/StreamStatFilter.php @@ -26,7 +26,6 @@ public function filter($in, $out, &$consumed, bool $closing): int { while ($bucket = stream_bucket_make_writeable($in)) { $consumed += $bucket->datalen; - if ($this->params instanceof StreamStat) { $this->params->bytes += $bucket->datalen; \hash_update($this->hashContext, $bucket->data); From 4d673c2eb6106d20d5f222b3178fdad2ceed3e61 Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 20 Oct 2022 13:02:04 +0200 Subject: [PATCH 23/29] composer update --- composer.lock | 201 +++++++++++++++++--------------------------------- 1 file changed, 68 insertions(+), 133 deletions(-) diff --git a/composer.lock b/composer.lock index dffa33e8e57..bfdcc9d1212 100644 --- a/composer.lock +++ b/composer.lock @@ -624,23 +624,23 @@ }, { "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", @@ -695,7 +695,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": [ { @@ -711,7 +711,7 @@ "type": "tidelift" } ], - "time": "2022-09-07T09:01:28+00:00" + "time": "2022-10-20T09:10:12+00:00" }, { "name": "doctrine/lexer", @@ -1721,16 +1721,16 @@ }, { "name": "laravel/framework", - "version": "v9.35.1", + "version": "v9.36.3", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "79aed20f54b6ab75f926bf7d0dd7a5043ceb774a" + "reference": "80ba0561b3682b96743e1c152fde0698bbdb2412" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/79aed20f54b6ab75f926bf7d0dd7a5043ceb774a", - "reference": "79aed20f54b6ab75f926bf7d0dd7a5043ceb774a", + "url": "https://api.github.com/repos/laravel/framework/zipball/80ba0561b3682b96743e1c152fde0698bbdb2412", + "reference": "80ba0561b3682b96743e1c152fde0698bbdb2412", "shasum": "" }, "require": { @@ -1819,7 +1819,7 @@ "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.8", + "orchestra/testbench-core": "^7.11", "pda/pheanstalk": "^4.0", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^9.5.8", @@ -1903,7 +1903,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-10-11T17:30:47+00:00" + "time": "2022-10-19T13:23:53+00:00" }, { "name": "laravel/serializable-closure", @@ -2155,16 +2155,16 @@ }, { "name": "league/flysystem", - "version": "3.6.0", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "8eded334b9894dc90ebdcb7be81e3a1c9413f709" + "reference": "60f3760352fe08e918bc3b1acae4e91af092ebe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8eded334b9894dc90ebdcb7be81e3a1c9413f709", - "reference": "8eded334b9894dc90ebdcb7be81e3a1c9413f709", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/60f3760352fe08e918bc3b1acae4e91af092ebe1", + "reference": "60f3760352fe08e918bc3b1acae4e91af092ebe1", "shasum": "" }, "require": { @@ -2226,7 +2226,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.6.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.9.0" }, "funding": [ { @@ -2242,7 +2242,7 @@ "type": "tidelift" } ], - "time": "2022-10-13T20:05:14+00:00" + "time": "2022-10-18T21:02:43+00:00" }, { "name": "league/mime-type-detection", @@ -3053,16 +3053,16 @@ }, { "name": "nunomaduro/termwind", - "version": "v1.14.0", + "version": "v1.14.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "10065367baccf13b6e30f5e9246fa4f63a79eb1d" + "reference": "86fc30eace93b9b6d4c844ba6de76db84184e01b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/10065367baccf13b6e30f5e9246fa4f63a79eb1d", - "reference": "10065367baccf13b6e30f5e9246fa4f63a79eb1d", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/86fc30eace93b9b6d4c844ba6de76db84184e01b", + "reference": "86fc30eace93b9b6d4c844ba6de76db84184e01b", "shasum": "" }, "require": { @@ -3119,7 +3119,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.14.0" + "source": "https://github.com/nunomaduro/termwind/tree/v1.14.1" }, "funding": [ { @@ -3135,7 +3135,7 @@ "type": "github" } ], - "time": "2022-08-01T11:03:24+00:00" + "time": "2022-10-17T15:20:29+00:00" }, { "name": "php-ffmpeg/php-ffmpeg", @@ -7381,16 +7381,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": { @@ -7405,15 +7405,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": { @@ -7445,7 +7449,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": [ { @@ -7457,7 +7461,7 @@ "type": "tidelift" } ], - "time": "2021-12-12T23:22:04+00:00" + "time": "2022-10-16T01:01:54+00:00" }, { "name": "voku/portable-ascii", @@ -7949,79 +7953,6 @@ }, "time": "2018-12-13T10:34:14+00:00" }, - { - "name": "composer/class-map-generator", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", - "shasum": "" - }, - "require": { - "composer/pcre": "^2 || ^3", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6" - }, - "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\ClassMapGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Utilities to scan PHP code and generate class maps.", - "keywords": [ - "classmap" - ], - "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.0.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-06-19T11:31:27+00:00" - }, { "name": "composer/pcre", "version": "3.0.0", @@ -8674,16 +8605,16 @@ }, { "name": "itsgoingd/clockwork", - "version": "v5.1.8", + "version": "v5.1.10", "source": { "type": "git", "url": "https://github.com/itsgoingd/clockwork.git", - "reference": "74ee05a61296aa7298164ef5346f0a568aa6106e" + "reference": "8ceb38246028483750573c05dc4f9c17ddb65b7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/74ee05a61296aa7298164ef5346f0a568aa6106e", - "reference": "74ee05a61296aa7298164ef5346f0a568aa6106e", + "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/8ceb38246028483750573c05dc4f9c17ddb65b7b", + "reference": "8ceb38246028483750573c05dc4f9c17ddb65b7b", "shasum": "" }, "require": { @@ -8730,7 +8661,7 @@ ], "support": { "issues": "https://github.com/itsgoingd/clockwork/issues", - "source": "https://github.com/itsgoingd/clockwork/tree/v5.1.8" + "source": "https://github.com/itsgoingd/clockwork/tree/v5.1.10" }, "funding": [ { @@ -8738,7 +8669,7 @@ "type": "github" } ], - "time": "2022-09-25T20:21:14+00:00" + "time": "2022-10-19T21:46:50+00:00" }, { "name": "laravel/homestead", @@ -9099,20 +9030,19 @@ }, { "name": "nunomaduro/larastan", - "version": "2.2.1", + "version": "2.2.5", "source": { "type": "git", "url": "https://github.com/nunomaduro/larastan.git", - "reference": "a2567963b61ee35dedf87aac95136ac4944e86fa" + "reference": "42ee94bc30f3501a1d01a47222b49c1fbb54a316" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/a2567963b61ee35dedf87aac95136ac4944e86fa", - "reference": "a2567963b61ee35dedf87aac95136ac4944e86fa", + "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/42ee94bc30f3501a1d01a47222b49c1fbb54a316", + "reference": "42ee94bc30f3501a1d01a47222b49c1fbb54a316", "shasum": "" }, "require": { - "composer/class-map-generator": "^1.0", "composer/pcre": "^3.0", "ext-json": "*", "illuminate/console": "^9", @@ -9174,7 +9104,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/larastan/issues", - "source": "https://github.com/nunomaduro/larastan/tree/2.2.1" + "source": "https://github.com/nunomaduro/larastan/tree/2.2.5" }, "funding": [ { @@ -9194,7 +9124,7 @@ "type": "patreon" } ], - "time": "2022-10-04T16:15:14+00:00" + "time": "2022-10-18T10:13:18+00:00" }, { "name": "phar-io/manifest", @@ -9419,25 +9349,30 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -9463,9 +9398,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2022-10-14T12:47:21+00:00" }, { "name": "phpmyadmin/sql-parser", @@ -9542,16 +9477,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.8.9", + "version": "1.8.10", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "3a72d9d9f2528fbd50c2d8fcf155fd9f74ade3f2" + "reference": "0c4459dc42c568b818b3f25186589f3acddc1823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/3a72d9d9f2528fbd50c2d8fcf155fd9f74ade3f2", - "reference": "3a72d9d9f2528fbd50c2d8fcf155fd9f74ade3f2", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0c4459dc42c568b818b3f25186589f3acddc1823", + "reference": "0c4459dc42c568b818b3f25186589f3acddc1823", "shasum": "" }, "require": { @@ -9581,7 +9516,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.8.9" + "source": "https://github.com/phpstan/phpstan/tree/1.8.10" }, "funding": [ { @@ -9597,7 +9532,7 @@ "type": "tidelift" } ], - "time": "2022-10-13T13:40:18+00:00" + "time": "2022-10-17T14:23:35+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", From 33bc8649ce7ab16428113bf4ecfe3b1cf7227bdc Mon Sep 17 00:00:00 2001 From: ildyria Date: Thu, 20 Oct 2022 13:07:46 +0200 Subject: [PATCH 24/29] simplify --- app/Actions/User/Notify.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/Actions/User/Notify.php b/app/Actions/User/Notify.php index 8f085c429ff..e1eee62c58d 100644 --- a/app/Actions/User/Notify.php +++ b/app/Actions/User/Notify.php @@ -34,11 +34,8 @@ public function do(Photo $photo): void return; } - /** @var Collection Users to be informed */ - $users = new Collection(); - - // The admin is always informed - $users->add(User::where('id', '=', 0)->sole()); + // Admin user is always notified + $users = new Collection([User::find(0)]); $album = $photo->album; if ($album !== null) { From b7208085da85828e2d5b0c6090d05f3454cff396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Viguier?= Date: Thu, 20 Oct 2022 20:24:08 +0200 Subject: [PATCH 25/29] Update app/Actions/Import/FromUrl.php Co-authored-by: qwerty287 <80460567+qwerty287@users.noreply.github.com> --- app/Actions/Import/FromUrl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Actions/Import/FromUrl.php b/app/Actions/Import/FromUrl.php index 57eb42f1321..a83a7407754 100644 --- a/app/Actions/Import/FromUrl.php +++ b/app/Actions/Import/FromUrl.php @@ -49,7 +49,7 @@ public function do(array $urls, ?Album $album): Collection // Silently do nothing, if `set_time_limit` is denied. } - // If the component parameter is specified, this function returns a string (or int in case of PHP_URL_PORT ) + // If the component parameter is specified, this function returns a string (or int in case of PHP_URL_PORT) /** @var string $path */ $path = parse_url($url, PHP_URL_PATH); $extension = '.' . pathinfo($path, PATHINFO_EXTENSION); From 3d1ad0cdbb8bdbc9de354e26ca22e5b211056a8a Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 21 Oct 2022 14:00:14 +0200 Subject: [PATCH 26/29] Fix comments --- app/Casts/MustNotSetCast.php | 2 +- app/Exceptions/SessionExpiredException.php | 2 +- app/Image/DownloadedFile.php | 2 +- app/Image/FlysystemFile.php | 7 ------- app/Image/SizeVariantDefaultFactory.php | 2 +- app/Image/StreamStatFilter.php | 4 ++-- app/Models/Extensions/SizeVariants.php | 2 +- tests/Feature/Base/SharingTestBase.php | 14 +++++++------- tests/Feature/SharingTestScenariosAbstract.php | 16 ++++++++-------- 9 files changed, 22 insertions(+), 29 deletions(-) diff --git a/app/Casts/MustNotSetCast.php b/app/Casts/MustNotSetCast.php index bf75f8e2c98..b55ec14760c 100644 --- a/app/Casts/MustNotSetCast.php +++ b/app/Casts/MustNotSetCast.php @@ -16,7 +16,7 @@ */ class MustNotSetCast implements CastsInboundAttributes { - /** @var string|null the name of an alternative attribute */ + /** @var string|null -- the name of an alternative attribute */ private ?string $alternative; /** diff --git a/app/Exceptions/SessionExpiredException.php b/app/Exceptions/SessionExpiredException.php index 7217c5c977f..a8ee9fa281c 100644 --- a/app/Exceptions/SessionExpiredException.php +++ b/app/Exceptions/SessionExpiredException.php @@ -4,7 +4,7 @@ class SessionExpiredException extends LycheeBaseException { - /** @var int proprietary Laravel HTTP status code to indicate session expiration */ + /** @var int -- proprietary Laravel HTTP status code to indicate session expiration */ public const HTTP_PAGE_EXPIRED = 419; public const DEFAULT_MESSAGE = 'Session expired'; diff --git a/app/Image/DownloadedFile.php b/app/Image/DownloadedFile.php index 2a605d7f43c..527eb5153a0 100644 --- a/app/Image/DownloadedFile.php +++ b/app/Image/DownloadedFile.php @@ -27,7 +27,7 @@ class DownloadedFile extends TemporaryLocalFile public function __construct(string $url) { try { - /** @var string $path : because we provide directly PHP_URL_PATH */ + /** @var string $path -- because we provide directly PHP_URL_PATH */ $path = parse_url($url, PHP_URL_PATH); $basename = pathinfo($path, PATHINFO_FILENAME); $extension = '.' . pathinfo($path, PATHINFO_EXTENSION); diff --git a/app/Image/FlysystemFile.php b/app/Image/FlysystemFile.php index 39638c1c3be..1878bd1a076 100644 --- a/app/Image/FlysystemFile.php +++ b/app/Image/FlysystemFile.php @@ -12,13 +12,6 @@ /** * Class FlysystemFile. - * - * This class is based on legacy Flysystem v1 which ships with Laravel 8. - * Laravel 9 will migrate to Flysystem v3 which provides a different and - * more consistent API. - * - * For v1, this documentation is relevant: - * https://flysystem.thephpleague.com/v1/docs/usage/filesystem-api/ */ class FlysystemFile extends MediaFile { diff --git a/app/Image/SizeVariantDefaultFactory.php b/app/Image/SizeVariantDefaultFactory.php index 9109cbc60f9..b3c4bc4dc48 100644 --- a/app/Image/SizeVariantDefaultFactory.php +++ b/app/Image/SizeVariantDefaultFactory.php @@ -25,7 +25,7 @@ class SizeVariantDefaultFactory extends SizeVariantFactory public const THUMBNAIL_DIM = 200; public const THUMBNAIL2X_DIM = 400; - /** @var ImageHandlerInterface the image handler (gd, imagick, ...) which is used to generate image files */ + /** @var ImageHandlerInterface -- the image handler (gd, imagick, ...) which is used to generate image files */ protected ImageHandlerInterface $referenceImage; protected ?Photo $photo = null; protected ?SizeVariantNamingStrategy $namingStrategy = null; diff --git a/app/Image/StreamStatFilter.php b/app/Image/StreamStatFilter.php index af6d5a02687..59783cce7bc 100644 --- a/app/Image/StreamStatFilter.php +++ b/app/Image/StreamStatFilter.php @@ -9,10 +9,10 @@ class StreamStatFilter extends \php_user_filter { public const REGISTERED_NAME = 'stream-stat-filter'; - /** @var string the used hashing algorithm; value must be supported by PHP, see {@link hash_algos()} */ + /** @var string -- the used hashing algorithm; value must be supported by PHP, see {@link hash_algos()} */ public const HASH_ALGO_NAME = 'sha1'; - /** @var \HashContext|null the hash context for progressive hashing */ + /** @var \HashContext|null -- the hash context for progressive hashing */ protected ?\HashContext $hashContext = null; /** diff --git a/app/Models/Extensions/SizeVariants.php b/app/Models/Extensions/SizeVariants.php index 0bc25a4c4b0..7e3cab9655b 100644 --- a/app/Models/Extensions/SizeVariants.php +++ b/app/Models/Extensions/SizeVariants.php @@ -20,7 +20,7 @@ */ class SizeVariants extends DTO { - /** @var Photo the parent object this object is tied to */ + /** @var Photo -- the parent object this object is tied to */ private Photo $photo; private ?SizeVariant $original = null; diff --git a/tests/Feature/Base/SharingTestBase.php b/tests/Feature/Base/SharingTestBase.php index 8f2b28eca4d..bb5bf058fe4 100644 --- a/tests/Feature/Base/SharingTestBase.php +++ b/tests/Feature/Base/SharingTestBase.php @@ -48,7 +48,7 @@ class SharingTestBase extends PhotoTestBase public const USER_PWD_2 = 'User Password 2'; public const USER_PWD_3 = 'User Password 3'; - /** @var array[] defines the expected JSON result for each sample image such that we can avoid repeating this again and again during the tests */ + /** @var array[] -- defines the expected JSON result for each sample image such that we can avoid repeating this again and again during the tests */ public const EXPECTED_PHOTO_JSON = [ TestCase::SAMPLE_FILE_NIGHT_IMAGE => [ 'id' => null, @@ -120,22 +120,22 @@ class SharingTestBase extends PhotoTestBase protected UsersUnitTest $users_tests; protected RootAlbumUnitTest $root_album_tests; - /** @var string the previously configured column for album sorting */ + /** @var string -- the previously configured column for album sorting */ private string $albumsSortingCol; - /** @var string the previously configured order for album sorting */ + /** @var string -- the previously configured order for album sorting */ private string $albumsSortingOrder; - /** @var string the previously configured column for photo sorting */ + /** @var string -- the previously configured column for photo sorting */ private string $photosSortingCol; - /** @var string the previously configured order for photo sorting */ + /** @var string -- the previously configured order for photo sorting */ private string $photosSortingOrder; - /** @var bool the previously configured public visibility for "Recent" */ + /** @var bool -- the previously configured public visibility for "Recent" */ private bool $isRecentAlbumPublic; - /** @var bool the previously configured public visibility for "Starred" */ + /** @var bool -- the previously configured public visibility for "Starred" */ private bool $isStarredAlbumPublic; public function setUp(): void diff --git a/tests/Feature/SharingTestScenariosAbstract.php b/tests/Feature/SharingTestScenariosAbstract.php index 8d44471e266..62a5f4d38e9 100644 --- a/tests/Feature/SharingTestScenariosAbstract.php +++ b/tests/Feature/SharingTestScenariosAbstract.php @@ -57,28 +57,28 @@ */ abstract class SharingTestScenariosAbstract extends SharingTestBase { - /** @var bool the previously configured visibility for public photos */ + /** @var bool -- the previously configured visibility for public photos */ protected bool $arePublicPhotosHidden; - /** @var string|null the ID of the current album 1 (if applicable by the test) */ + /** @var string|null -- the ID of the current album 1 (if applicable by the test) */ protected ?string $albumID1; - /** @var string|null the ID of the current album 2 (if applicable by the test) */ + /** @var string|null -- the ID of the current album 2 (if applicable by the test) */ protected ?string $albumID2; - /** @var string|null the ID of the current album 3 (if applicable by the test) */ + /** @var string|null -- the ID of the current album 3 (if applicable by the test) */ protected ?string $albumID3; - /** @var string|null the ID of the current photo 1 (if applicable by the test) */ + /** @var string|null -- the ID of the current photo 1 (if applicable by the test) */ protected ?string $photoID1; - /** @var string|null the ID of the current photo 2 (if applicable by the test) */ + /** @var string|null -- the ID of the current photo 2 (if applicable by the test) */ protected ?string $photoID2; - /** @var string|null the ID of the current photo 3 (if applicable by the test) */ + /** @var string|null -- the ID of the current photo 3 (if applicable by the test) */ protected ?string $photoID3; - /** @var int|null the ID of the current user (if applicable by the test) */ + /** @var int|null -- the ID of the current user (if applicable by the test) */ protected ?int $userID; public function setUp(): void From 765957d951b036678753a021369c8b40bbe65673 Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 21 Oct 2022 14:23:38 +0200 Subject: [PATCH 27/29] Fix comments --- app/Assets/Helpers.php | 2 +- app/Casts/MustNotSetCast.php | 2 +- app/Exceptions/SessionExpiredException.php | 2 +- app/Image/DownloadedFile.php | 2 +- app/Image/SizeVariantDefaultFactory.php | 2 +- app/Image/StreamStatFilter.php | 4 ++-- app/Models/Extensions/SizeVariants.php | 2 +- tests/Feature/Base/SharingTestBase.php | 14 +++++++------- tests/Feature/SharingTestScenariosAbstract.php | 16 ++++++++-------- 9 files changed, 23 insertions(+), 23 deletions(-) diff --git a/app/Assets/Helpers.php b/app/Assets/Helpers.php index 92a4569df5d..57bb416eedc 100644 --- a/app/Assets/Helpers.php +++ b/app/Assets/Helpers.php @@ -103,7 +103,7 @@ public function getExtension(string $filename, bool $isURI = false): string { // If $filename is an URI, get only the path component if ($isURI === true) { - /** @var string $filename -- this is true because PHP_URL_PATH is specified */ + /** @var string $filename this is true because PHP_URL_PATH is specified */ $filename = parse_url($filename, PHP_URL_PATH); } diff --git a/app/Casts/MustNotSetCast.php b/app/Casts/MustNotSetCast.php index b55ec14760c..bf75f8e2c98 100644 --- a/app/Casts/MustNotSetCast.php +++ b/app/Casts/MustNotSetCast.php @@ -16,7 +16,7 @@ */ class MustNotSetCast implements CastsInboundAttributes { - /** @var string|null -- the name of an alternative attribute */ + /** @var string|null the name of an alternative attribute */ private ?string $alternative; /** diff --git a/app/Exceptions/SessionExpiredException.php b/app/Exceptions/SessionExpiredException.php index a8ee9fa281c..4c1485e8e1a 100644 --- a/app/Exceptions/SessionExpiredException.php +++ b/app/Exceptions/SessionExpiredException.php @@ -4,7 +4,7 @@ class SessionExpiredException extends LycheeBaseException { - /** @var int -- proprietary Laravel HTTP status code to indicate session expiration */ + /** @var int HTTP_PAGE_EXPIRED proprietary Laravel HTTP status code to indicate session expiration */ public const HTTP_PAGE_EXPIRED = 419; public const DEFAULT_MESSAGE = 'Session expired'; diff --git a/app/Image/DownloadedFile.php b/app/Image/DownloadedFile.php index 527eb5153a0..9b57fc0b354 100644 --- a/app/Image/DownloadedFile.php +++ b/app/Image/DownloadedFile.php @@ -27,7 +27,7 @@ class DownloadedFile extends TemporaryLocalFile public function __construct(string $url) { try { - /** @var string $path -- because we provide directly PHP_URL_PATH */ + /** @var string $path because we provide directly PHP_URL_PATH */ $path = parse_url($url, PHP_URL_PATH); $basename = pathinfo($path, PATHINFO_FILENAME); $extension = '.' . pathinfo($path, PATHINFO_EXTENSION); diff --git a/app/Image/SizeVariantDefaultFactory.php b/app/Image/SizeVariantDefaultFactory.php index b3c4bc4dc48..9109cbc60f9 100644 --- a/app/Image/SizeVariantDefaultFactory.php +++ b/app/Image/SizeVariantDefaultFactory.php @@ -25,7 +25,7 @@ class SizeVariantDefaultFactory extends SizeVariantFactory public const THUMBNAIL_DIM = 200; public const THUMBNAIL2X_DIM = 400; - /** @var ImageHandlerInterface -- the image handler (gd, imagick, ...) which is used to generate image files */ + /** @var ImageHandlerInterface the image handler (gd, imagick, ...) which is used to generate image files */ protected ImageHandlerInterface $referenceImage; protected ?Photo $photo = null; protected ?SizeVariantNamingStrategy $namingStrategy = null; diff --git a/app/Image/StreamStatFilter.php b/app/Image/StreamStatFilter.php index 59783cce7bc..d1fb8bf309b 100644 --- a/app/Image/StreamStatFilter.php +++ b/app/Image/StreamStatFilter.php @@ -9,10 +9,10 @@ class StreamStatFilter extends \php_user_filter { public const REGISTERED_NAME = 'stream-stat-filter'; - /** @var string -- the used hashing algorithm; value must be supported by PHP, see {@link hash_algos()} */ + /** @var string HASH_ALGO_NAME the used hashing algorithm; value must be supported by PHP, see {@link hash_algos()} */ public const HASH_ALGO_NAME = 'sha1'; - /** @var \HashContext|null -- the hash context for progressive hashing */ + /** @var \HashContext|null the hash context for progressive hashing */ protected ?\HashContext $hashContext = null; /** diff --git a/app/Models/Extensions/SizeVariants.php b/app/Models/Extensions/SizeVariants.php index 7e3cab9655b..0bc25a4c4b0 100644 --- a/app/Models/Extensions/SizeVariants.php +++ b/app/Models/Extensions/SizeVariants.php @@ -20,7 +20,7 @@ */ class SizeVariants extends DTO { - /** @var Photo -- the parent object this object is tied to */ + /** @var Photo the parent object this object is tied to */ private Photo $photo; private ?SizeVariant $original = null; diff --git a/tests/Feature/Base/SharingTestBase.php b/tests/Feature/Base/SharingTestBase.php index bb5bf058fe4..f5951f05f77 100644 --- a/tests/Feature/Base/SharingTestBase.php +++ b/tests/Feature/Base/SharingTestBase.php @@ -48,7 +48,7 @@ class SharingTestBase extends PhotoTestBase public const USER_PWD_2 = 'User Password 2'; public const USER_PWD_3 = 'User Password 3'; - /** @var array[] -- defines the expected JSON result for each sample image such that we can avoid repeating this again and again during the tests */ + /** @var array[] EXPECTED_PHOTO_JSON defines the expected JSON result for each sample image such that we can avoid repeating this again and again during the tests */ public const EXPECTED_PHOTO_JSON = [ TestCase::SAMPLE_FILE_NIGHT_IMAGE => [ 'id' => null, @@ -120,22 +120,22 @@ class SharingTestBase extends PhotoTestBase protected UsersUnitTest $users_tests; protected RootAlbumUnitTest $root_album_tests; - /** @var string -- the previously configured column for album sorting */ + /** @var string the previously configured column for album sorting */ private string $albumsSortingCol; - /** @var string -- the previously configured order for album sorting */ + /** @var string the previously configured order for album sorting */ private string $albumsSortingOrder; - /** @var string -- the previously configured column for photo sorting */ + /** @var string the previously configured column for photo sorting */ private string $photosSortingCol; - /** @var string -- the previously configured order for photo sorting */ + /** @var string the previously configured order for photo sorting */ private string $photosSortingOrder; - /** @var bool -- the previously configured public visibility for "Recent" */ + /** @var bool the previously configured public visibility for "Recent" */ private bool $isRecentAlbumPublic; - /** @var bool -- the previously configured public visibility for "Starred" */ + /** @var bool the previously configured public visibility for "Starred" */ private bool $isStarredAlbumPublic; public function setUp(): void diff --git a/tests/Feature/SharingTestScenariosAbstract.php b/tests/Feature/SharingTestScenariosAbstract.php index 62a5f4d38e9..8d44471e266 100644 --- a/tests/Feature/SharingTestScenariosAbstract.php +++ b/tests/Feature/SharingTestScenariosAbstract.php @@ -57,28 +57,28 @@ */ abstract class SharingTestScenariosAbstract extends SharingTestBase { - /** @var bool -- the previously configured visibility for public photos */ + /** @var bool the previously configured visibility for public photos */ protected bool $arePublicPhotosHidden; - /** @var string|null -- the ID of the current album 1 (if applicable by the test) */ + /** @var string|null the ID of the current album 1 (if applicable by the test) */ protected ?string $albumID1; - /** @var string|null -- the ID of the current album 2 (if applicable by the test) */ + /** @var string|null the ID of the current album 2 (if applicable by the test) */ protected ?string $albumID2; - /** @var string|null -- the ID of the current album 3 (if applicable by the test) */ + /** @var string|null the ID of the current album 3 (if applicable by the test) */ protected ?string $albumID3; - /** @var string|null -- the ID of the current photo 1 (if applicable by the test) */ + /** @var string|null the ID of the current photo 1 (if applicable by the test) */ protected ?string $photoID1; - /** @var string|null -- the ID of the current photo 2 (if applicable by the test) */ + /** @var string|null the ID of the current photo 2 (if applicable by the test) */ protected ?string $photoID2; - /** @var string|null -- the ID of the current photo 3 (if applicable by the test) */ + /** @var string|null the ID of the current photo 3 (if applicable by the test) */ protected ?string $photoID3; - /** @var int|null -- the ID of the current user (if applicable by the test) */ + /** @var int|null the ID of the current user (if applicable by the test) */ protected ?int $userID; public function setUp(): void From 704886577f2b07b246c2ce441562988b897e770e Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 21 Oct 2022 14:41:59 +0200 Subject: [PATCH 28/29] and that one --- scripts/gen_release.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/gen_release.php b/scripts/gen_release.php index 327230bf8f7..77705eba714 100755 --- a/scripts/gen_release.php +++ b/scripts/gen_release.php @@ -64,8 +64,8 @@ function get_version(): array /** * Given the current version and the update array return the new version number. * - * @param array $curr_version : current version number - * @param string $kind : 'minor' or 'major' + * @param array $curr_version current version number + * @param string $kind 'minor' or 'major' * * @return array */ From 096500d7db75333d79ea86ba14f92f2c8d9373da Mon Sep 17 00:00:00 2001 From: ildyria Date: Fri, 21 Oct 2022 14:57:18 +0200 Subject: [PATCH 29/29] sync front --- composer.json | 2 +- composer.lock | 27 +- public/Lychee-front | 2 +- public/dist/frame.js | 883 +------------------------------------------ public/dist/main.js | 6 +- 5 files changed, 19 insertions(+), 901 deletions(-) diff --git a/composer.json b/composer.json index f839178c6e8..3f49ed5cc92 100644 --- a/composer.json +++ b/composer.json @@ -53,7 +53,7 @@ "laravel/framework": "^9.2", "livewire/livewire": "^2.7", "lychee-org/nestedset": "^6", - "lychee-org/php-exif": "code-safe-2.2-dev", + "lychee-org/php-exif": "^0.7.13", "maennchen/zipstream-php": "^2.1", "php-ffmpeg/php-ffmpeg": "^1.0", "php-http/guzzle7-adapter": "^1.0", diff --git a/composer.lock b/composer.lock index 58ecf4f3c4f..c470b76a8ab 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c63f50a9c7b75f80e4aa24b41d07b8a9", + "content-hash": "1061802c57a1df0955dfc63f1c9156c9", "packages": [ { "name": "bepsvpt/secure-headers", @@ -1721,16 +1721,16 @@ }, { "name": "laravel/framework", - "version": "v9.36.3", + "version": "v9.36.4", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "80ba0561b3682b96743e1c152fde0698bbdb2412" + "reference": "15ce569fd93124e8e2257c24e3ed85b9ef9951d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/80ba0561b3682b96743e1c152fde0698bbdb2412", - "reference": "80ba0561b3682b96743e1c152fde0698bbdb2412", + "url": "https://api.github.com/repos/laravel/framework/zipball/15ce569fd93124e8e2257c24e3ed85b9ef9951d6", + "reference": "15ce569fd93124e8e2257c24e3ed85b9ef9951d6", "shasum": "" }, "require": { @@ -1742,7 +1742,7 @@ "fruitcake/php-cors": "^1.2", "laravel/serializable-closure": "^1.2.2", "league/commonmark": "^2.2", - "league/flysystem": "^3.0.16", + "league/flysystem": "^3.8.0", "monolog/monolog": "^2.0", "nesbot/carbon": "^2.62.1", "nunomaduro/termwind": "^1.13", @@ -1903,7 +1903,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-10-19T13:23:53+00:00" + "time": "2022-10-20T16:11:03+00:00" }, { "name": "laravel/serializable-closure", @@ -2438,16 +2438,16 @@ }, { "name": "lychee-org/php-exif", - "version": "dev-code-safe-2.2", + "version": "v0.7.13", "source": { "type": "git", "url": "https://github.com/LycheeOrg/php-exif.git", - "reference": "f2c5cb5661a4c804550331e2e63a9794189f17fd" + "reference": "ada5def97d3845e646f6975b3ea2b9e0fcb0e87d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LycheeOrg/php-exif/zipball/f2c5cb5661a4c804550331e2e63a9794189f17fd", - "reference": "f2c5cb5661a4c804550331e2e63a9794189f17fd", + "url": "https://api.github.com/repos/LycheeOrg/php-exif/zipball/ada5def97d3845e646f6975b3ea2b9e0fcb0e87d", + "reference": "ada5def97d3845e646f6975b3ea2b9e0fcb0e87d", "shasum": "" }, "require": { @@ -2518,10 +2518,10 @@ "tiff" ], "support": { - "source": "https://github.com/LycheeOrg/php-exif/tree/code-safe-2.2", + "source": "https://github.com/LycheeOrg/php-exif/tree/v0.7.13", "issues": "https://github.com/LycheeOrg/php-exif/issues" }, - "time": "2022-09-29T16:10:11+00:00" + "time": "2022-10-21T12:50:48+00:00" }, { "name": "maennchen/zipstream-php", @@ -11392,7 +11392,6 @@ "minimum-stability": "dev", "stability-flags": { "laragear/webauthn": 20, - "lychee-org/php-exif": 20, "lychee-org/phpstan-lychee": 20 }, "prefer-stable": true, diff --git a/public/Lychee-front b/public/Lychee-front index 5492dc5f225..5cadab5233a 160000 --- a/public/Lychee-front +++ b/public/Lychee-front @@ -1 +1 @@ -Subproject commit 5492dc5f225473df3e446d36e7021e1011b5f84a +Subproject commit 5cadab5233a78b9bf408e1468a7e890ccdb7041b diff --git a/public/dist/frame.js b/public/dist/frame.js index eae546b423f..b773879f7be 100644 --- a/public/dist/frame.js +++ b/public/dist/frame.js @@ -4,888 +4,7 @@ /*! lazysizes - v5.3.2 */ !function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,i=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,o=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],a={},G=Array.prototype.forEach,J=function(e,t){if(!a[t]){a[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return a[t].test(e[$]("class")||"")&&a[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var a;if(a=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(a," "))}},V=function(t,a,e){var i=e?P:"removeEventListener";if(e){V(t,a)}r.forEach(function(e){t[i](e,a)})},X=function(e,t,a,i,r){var n=D.createEvent("Event");if(!a){a={}}a.instance=k;n.initEvent(t,!i,!r);n.detail=a;e.dispatchEvent(n);return n},Y=function(e,t){var a;if(!i&&(a=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}a({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,a){a=a||e.offsetWidth;while(a49?function(){o(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(a){return}a=true;t=r-(f.now()-i);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ie=function(e){var t,a;var i=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-a;if(e0;if(r&&Z(i,"overflow")!="visible"){a=i.getBoundingClientRect();r=C>a.left&&pa.top-1&&g500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w2&&h>2&&!D.hidden){w=f;N=0}else if(h>1&&N>1&&M<6){w=u}else{w=_}}if(l!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;l=n}a=d[t].getBoundingClientRect();if((b=a.bottom)>=s&&(g=a.top)<=z&&(C=a.right)>=s*c&&(p=a.left)<=y&&(b||C||p||g)&&(H.loadHidden||x(d[t]))&&(m&&M<3&&!o&&(h<3||N<4)||W(d[t],n))){R(d[t]);r=true;if(M>9){break}}else if(!r&&m&&!i&&M<4&&N<4&&h>2&&(v[0]||H.preloadAfterLoad)&&(v[0]||!o&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){i=v[0]||d[t]}}if(i&&!r){R(i)}}};var a=ae(t);var S=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}L(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,B);X(t,"lazyloaded")};var i=te(S);var B=function(e){i({target:e.target})};var T=function(e,t){var a=e.getAttribute("data-load-mode")||H.iframeLoadMode;if(a==0){e.contentWindow.location.replace(t)}else if(a==1){e.src=t}};var F=function(e){var t;var a=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(a){e.setAttribute("srcset",a)}};var s=te(function(t,e,a,i,r){var n,s,o,l,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(i){if(a){K(t,H.autosizesClass)}else{t.setAttribute("sizes",i)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){o=t.parentNode;l=o&&j.test(o.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||l);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(L,2500);V(t,B,true)}if(l){G.call(o.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!l){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||l)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,H.fastLoadedClass)}S(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){M--}},true)});var R=function(e){if(e._lazyRace){return}var t;var a=n.test(e.nodeName);var i=a&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=i=="auto";if((r||!m)&&a&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;M++;s(e,t,r,i,a)};var r=ie(function(){H.loadMode=3;a()});var o=function(){if(H.loadMode==3){H.loadMode=2}r()};var l=function(){if(m){return}if(f.now()-e<999){I(l,999);return}m=true;H.loadMode=3;a();q("scroll",o,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",a,true);q("resize",a,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(a).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",a,true);O[P]("DOMAttrModified",a,true);setInterval(a,999)}q("hashchange",a,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,a,true)});if(/d$|^c/.test(D.readyState)){l()}else{q("load",l);D[P]("DOMContentLoaded",a);I(l,2e4)}if(k.elements.length){t();ee._lsFlush()}else{a()}},checkElems:a,unveil:R,_aLSL:o}}(),re=function(){var a;var n=te(function(e,t,a,i){var r,n,s;e._lazysizesWidth=i;i+="px";e.setAttribute("sizes",i);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n> K), - 0 !== j - ? ((j = 255 / j), (T[b] = ((y * J) >> K) * j), (T[b + 1] = ((p * J) >> K) * j), (T[b + 2] = ((m * J) >> K) * j)) - : (T[b] = T[b + 1] = T[b + 2] = 0), - (y -= v), - (p -= w), - (m -= B), - (h -= C), - (v -= z.r), - (w -= z.g), - (B -= z.b), - (C -= z.a), - (s = (d + ((s = g + f + 1) < _ ? s : _)) << 2), - (y += E += z.r = T[s]), - (p += I += z.g = T[s + 1]), - (m += S += z.b = T[s + 2]), - (h += N += z.a = T[s + 3]), - (z = z.next), - (v += R = F.r), - (w += D = F.g), - (B += G = F.b), - (C += j = F.a), - (E -= R), - (I -= D), - (S -= G), - (N -= j), - (F = F.next), - (b += 4); - d += a; - } - for (g = 0; g < a; g++) { - for ( - I = S = N = E = p = m = h = y = 0, - v = M * (R = T[(b = g << 2)]), - w = M * (D = T[b + 1]), - B = M * (G = T[b + 2]), - C = M * (j = T[b + 3]), - y += O * R, - p += O * D, - m += O * G, - h += O * j, - q = P, - l = 0; - l < M; - l++ - ) - (q.r = R), (q.g = D), (q.b = G), (q.a = j), (q = q.next); - for (x = a, l = 1; l <= f; l++) - (b = (x + g) << 2), - (y += (q.r = R = T[b]) * (A = M - l)), - (p += (q.g = D = T[b + 1]) * A), - (m += (q.b = G = T[b + 2]) * A), - (h += (q.a = j = T[b + 3]) * A), - (E += R), - (I += D), - (S += G), - (N += j), - (q = q.next), - l < H && (x += a); - for (b = g, z = P, F = k, c = 0; c < i; c++) - (T[(s = b << 2) + 3] = j = (h * J) >> K), - j > 0 - ? ((j = 255 / j), (T[s] = ((y * J) >> K) * j), (T[s + 1] = ((p * J) >> K) * j), (T[s + 2] = ((m * J) >> K) * j)) - : (T[s] = T[s + 1] = T[s + 2] = 0), - (y -= v), - (p -= w), - (m -= B), - (h -= C), - (v -= z.r), - (w -= z.g), - (B -= z.b), - (C -= z.a), - (s = (g + ((s = c + M) < H ? s : H) * a) << 2), - (y += E += z.r = T[s]), - (p += I += z.g = T[s + 1]), - (m += S += z.b = T[s + 2]), - (h += N += z.a = T[s + 3]), - (z = z.next), - (v += R = F.r), - (w += D = F.g), - (B += G = F.b), - (C += j = F.a), - (E -= R), - (I -= D), - (S -= G), - (N -= j), - (F = F.next), - (b += a); - } - return t; - } - function f(t, e, n, r, a, i) { - if (!(isNaN(i) || i < 1)) { - i |= 0; - var f = o(t, e, n, r, a); - (f = g(f, e, n, r, a, i)), t.getContext("2d").putImageData(f, e, n); - } - } - function g(t, e, o, a, i, f) { - var g, - c, - l, - s, - x, - b, - d, - y, - p, - m, - h, - v, - w, - B, - C, - E, - I, - S, - N, - R, - D, - G = t.data, - j = 2 * f + 1, - A = a - 1, - k = i - 1, - T = f + 1, - W = (T * (T + 1)) / 2, - _ = new u(), - H = _; - for (l = 1; l < j; l++) (H = H.next = new u()), l === T && (D = H); - H.next = _; - var M = null, - O = null; - d = b = 0; - var P = n[f], - q = r[f]; - for (c = 0; c < i; c++) { - for ( - B = C = E = y = p = m = 0, - h = T * (I = G[b]), - v = T * (S = G[b + 1]), - w = T * (N = G[b + 2]), - y += W * I, - p += W * S, - m += W * N, - H = _, - l = 0; - l < T; - l++ - ) - (H.r = I), (H.g = S), (H.b = N), (H = H.next); - for (l = 1; l < T; l++) - (s = b + ((A < l ? A : l) << 2)), - (y += (H.r = I = G[s]) * (R = T - l)), - (p += (H.g = S = G[s + 1]) * R), - (m += (H.b = N = G[s + 2]) * R), - (B += I), - (C += S), - (E += N), - (H = H.next); - for (M = _, O = D, g = 0; g < a; g++) - (G[b] = (y * P) >> q), - (G[b + 1] = (p * P) >> q), - (G[b + 2] = (m * P) >> q), - (y -= h), - (p -= v), - (m -= w), - (h -= M.r), - (v -= M.g), - (w -= M.b), - (s = (d + ((s = g + f + 1) < A ? s : A)) << 2), - (y += B += M.r = G[s]), - (p += C += M.g = G[s + 1]), - (m += E += M.b = G[s + 2]), - (M = M.next), - (h += I = O.r), - (v += S = O.g), - (w += N = O.b), - (B -= I), - (C -= S), - (E -= N), - (O = O.next), - (b += 4); - d += a; - } - for (g = 0; g < a; g++) { - for ( - C = E = B = p = m = y = 0, - h = T * (I = G[(b = g << 2)]), - v = T * (S = G[b + 1]), - w = T * (N = G[b + 2]), - y += W * I, - p += W * S, - m += W * N, - H = _, - l = 0; - l < T; - l++ - ) - (H.r = I), (H.g = S), (H.b = N), (H = H.next); - for (x = a, l = 1; l <= f; l++) - (b = (x + g) << 2), - (y += (H.r = I = G[b]) * (R = T - l)), - (p += (H.g = S = G[b + 1]) * R), - (m += (H.b = N = G[b + 2]) * R), - (B += I), - (C += S), - (E += N), - (H = H.next), - l < k && (x += a); - for (b = g, M = _, O = D, c = 0; c < i; c++) - (G[(s = b << 2)] = (y * P) >> q), - (G[s + 1] = (p * P) >> q), - (G[s + 2] = (m * P) >> q), - (y -= h), - (p -= v), - (m -= w), - (h -= M.r), - (v -= M.g), - (w -= M.b), - (s = (g + ((s = c + T) < k ? s : k) * a) << 2), - (y += B += M.r = G[s]), - (p += C += M.g = G[s + 1]), - (m += E += M.b = G[s + 2]), - (M = M.next), - (h += I = O.r), - (v += S = O.g), - (w += N = O.b), - (B -= I), - (C -= S), - (E -= N), - (O = O.next), - (b += a); - } - return t; - } - var u = function t() { - !(function (t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function"); - })(this, t), - (this.r = 0), - (this.g = 0), - (this.b = 0), - (this.a = 0), - (this.next = null); - }; - (t.BlurStack = u), - (t.image = function (t, e, n, r) { - if (("string" == typeof t && (t = document.getElementById(t)), t && "naturalWidth" in t)) { - var o = t.naturalWidth, - i = t.naturalHeight; - if (("string" == typeof e && (e = document.getElementById(e)), e && "getContext" in e)) { - (e.style.width = o + "px"), (e.style.height = i + "px"), (e.width = o), (e.height = i); - var g = e.getContext("2d"); - g.clearRect(0, 0, o, i), g.drawImage(t, 0, 0), isNaN(n) || n < 1 || (r ? a(e, 0, 0, o, i, n) : f(e, 0, 0, o, i, n)); - } - } - }), - (t.canvasRGBA = a), - (t.canvasRGB = f), - (t.imageDataRGBA = i), - (t.imageDataRGB = g), - Object.defineProperty(t, "__esModule", { value: !0 }); -}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).StackBlur={})}(this,(function(t){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],n=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function a(t,r,n,a,o){if("string"==typeof t&&(t=document.getElementById(t)),!t||"object"!==e(t)||!("getContext"in t))throw new TypeError("Expecting canvas with `getContext` method in processCanvasRGB(A) calls!");var i=t.getContext("2d");try{return i.getImageData(r,n,a,o)}catch(t){throw new Error("unable to access image data: "+t)}}function o(t,e,r,n,o,f){if(!(isNaN(f)||f<1)){f|=0;var g=a(t,e,r,n,o);g=i(g,e,r,n,o,f),t.getContext("2d").putImageData(g,e,r)}}function i(t,e,a,o,i,f){for(var g,l=t.data,c=2*f+1,s=o-1,v=i-1,b=f+1,x=b*(b+1)/2,d=new u,y=d,h=1;h>E;if(l[B+3]=Y,0!==Y){var Z=255/Y;l[B]=(O*C>>E)*Z,l[B+1]=(P*C>>E)*Z,l[B+2]=(q*C>>E)*Z}else l[B]=l[B+1]=l[B+2]=0;O-=k,P-=H,q-=_,z-=M,k-=p.r,H-=p.g,_-=p.b,M-=p.a;var $=X+f+1;$=w+($>E,ut>0?(ut=255/ut,l[Nt]=(bt*C>>E)*ut,l[Nt+1]=(xt*C>>E)*ut,l[Nt+2]=(dt*C>>E)*ut):l[Nt]=l[Nt+1]=l[Nt+2]=0,bt-=lt,xt-=ct,dt-=st,yt-=vt,lt-=p.r,ct-=p.g,st-=p.b,vt-=p.a,Nt=ot+((Nt=St+b)>E,l[S+1]=k*C>>E,l[S+2]=H*C>>E,W-=T,k-=j,H-=A,T-=w.r,j-=w.g,A-=w.b,p=I+((p=z+f+1)>E,l[p+1]=Y*C>>E,l[p+2]=Z*C>>E,X-=Q,Y-=U,Z-=V,Q-=w.r,U-=w.g,V-=w.b,p=F+((p=ot+b)