Add Heroku support (#12)

This commit is contained in:
Christopher Charbonneau Wells 2021-04-06 10:05:10 -07:00 committed by GitHub
parent e1e3a3620a
commit 350a08a14d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
43 changed files with 903 additions and 676 deletions

View File

@ -17,17 +17,22 @@ DB_DATABASE=kcal
DB_USERNAME=kcal
DB_PASSWORD=kcal
#REDIS_URL=
REDIS_HOST=redis
#REDIS_PASSWORD=
REDIS_PORT=6379
#REDIS_DB=
#SCOUT_DRIVER=null
#SCOUT_DRIVER=algolia
#ALGOLIA_APP_ID=
#ALGOLIA_SECRET=
SCOUT_DRIVER=elastic
ELASTIC_HOST=elasticsearch:9200
ELASTIC_PORT=9200
MAIL_HOST=mailhog
MAIL_PORT=1025
MAILHOG_ADMIN_PORT=8025
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync

View File

@ -15,14 +15,20 @@ DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
REDIS_HOST=
REDIS_PORT=6379
#REDIS_URL=
#REDIS_HOST=
#REDIS_PASSWORD=
#REDIS_PORT=6379
#REDIS_DB=
SCOUT_DRIVER=elastic
ELASTIC_HOST=
SCOUT_DRIVER=null
MAIL_HOST=
MAIL_PORT=
#SCOUT_DRIVER=algolia
#ALGOLIA_APP_ID=
#ALGOLIA_SECRET=
#SCOUT_DRIVER=elastic
#ELASTIC_HOST=
BROADCAST_DRIVER=log
CACHE_DRIVER=file

1
.gitignore vendored
View File

@ -15,3 +15,4 @@ Homestead.yaml
docker-compose.override.yml
npm-debug.log
yarn-error.log
phpunit.xml

View File

@ -11,6 +11,14 @@ namespace PHPSTORM_META {
*/
override(new \Illuminate\Contracts\Container\Container, map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -37,6 +45,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -61,7 +71,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -75,6 +85,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -167,6 +178,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -207,6 +219,14 @@ namespace PHPSTORM_META {
]));
override(\Illuminate\Container\Container::makeWith(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -233,6 +253,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -257,7 +279,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -271,6 +293,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -363,6 +386,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -403,6 +427,14 @@ namespace PHPSTORM_META {
]));
override(\Illuminate\Contracts\Container\Container::get(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -429,6 +461,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -453,7 +487,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -467,6 +501,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -559,6 +594,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -599,6 +635,14 @@ namespace PHPSTORM_META {
]));
override(\Illuminate\Contracts\Container\Container::make(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -625,6 +669,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -649,7 +695,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -663,6 +709,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -755,6 +802,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -795,6 +843,14 @@ namespace PHPSTORM_META {
]));
override(\Illuminate\Contracts\Container\Container::makeWith(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -821,6 +877,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -845,7 +903,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -859,6 +917,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -951,6 +1010,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -991,6 +1051,14 @@ namespace PHPSTORM_META {
]));
override(\App::get(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -1017,6 +1085,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -1041,7 +1111,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -1055,6 +1125,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -1147,6 +1218,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -1187,6 +1259,14 @@ namespace PHPSTORM_META {
]));
override(\App::make(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -1213,6 +1293,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -1237,7 +1319,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -1251,6 +1333,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -1343,6 +1426,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -1383,6 +1467,14 @@ namespace PHPSTORM_META {
]));
override(\App::makeWith(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -1409,6 +1501,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -1433,7 +1527,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -1447,6 +1541,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -1539,6 +1634,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -1579,6 +1675,14 @@ namespace PHPSTORM_META {
]));
override(\app(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -1605,6 +1709,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -1629,7 +1735,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -1643,6 +1749,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -1735,6 +1842,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -1775,6 +1883,14 @@ namespace PHPSTORM_META {
]));
override(\resolve(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -1801,6 +1917,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -1825,7 +1943,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -1839,6 +1957,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -1931,6 +2050,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,
@ -1971,6 +2091,14 @@ namespace PHPSTORM_META {
]));
override(\Psr\Container\ContainerInterface::get(0), map([
'' => '@',
'Algolia\AlgoliaSearch\AnalyticsClient' => \Algolia\AlgoliaSearch\AnalyticsClient::class,
'Algolia\AlgoliaSearch\SearchClient' => \Algolia\AlgoliaSearch\SearchClient::class,
'Algolia\ScoutExtended\Algolia' => \Algolia\ScoutExtended\Algolia::class,
'Algolia\ScoutExtended\Contracts\LocalSettingsRepositoryContract' => \Algolia\ScoutExtended\Repositories\LocalSettingsRepository::class,
'Algolia\ScoutExtended\Engines\AlgoliaEngine' => \Algolia\ScoutExtended\Engines\AlgoliaEngine::class,
'Algolia\ScoutExtended\Helpers\SearchableFinder' => \Algolia\ScoutExtended\Helpers\SearchableFinder::class,
'Algolia\ScoutExtended\Managers\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Algolia\ScoutExtended\Searchable\AggregatorObserver' => \Algolia\ScoutExtended\Searchable\AggregatorObserver::class,
'Asm89\Stack\CorsService' => \Asm89\Stack\CorsService::class,
'CloudCreativity\LaravelJsonApi\Api\Repository' => \CloudCreativity\LaravelJsonApi\Api\Repository::class,
'CloudCreativity\LaravelJsonApi\Contracts\ContainerInterface' => \CloudCreativity\LaravelJsonApi\Container::class,
@ -1997,6 +2125,8 @@ namespace PHPSTORM_META {
'Facade\Ignition\QueryRecorder\QueryRecorder' => \Facade\Ignition\QueryRecorder\QueryRecorder::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\RateLimiter' => \Illuminate\Cache\RateLimiter::class,
'Illuminate\Console\Scheduling\Schedule' => \Illuminate\Console\Scheduling\Schedule::class,
@ -2021,7 +2151,7 @@ namespace PHPSTORM_META {
'Illuminate\Routing\Contracts\ControllerDispatcher' => \Illuminate\Routing\ControllerDispatcher::class,
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Scout\EngineManager' => \Laravel\Scout\EngineManager::class,
'Laravel\Scout\EngineManager' => \Algolia\ScoutExtended\Managers\EngineManager::class,
'Neomerx\JsonApi\Contracts\Encoder\Parameters\EncodingParametersInterface' => \CloudCreativity\LaravelJsonApi\Encoder\Parameters\EncodingParameters::class,
'Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersInterface' => \Neomerx\JsonApi\Http\Headers\HeaderParameters::class,
'NunoMaduro\Collision\Contracts\Provider' => \NunoMaduro\Collision\Provider::class,
@ -2035,6 +2165,7 @@ namespace PHPSTORM_META {
'auth' => \Illuminate\Auth\AuthManager::class,
'auth.driver' => \Illuminate\Auth\SessionGuard::class,
'auth.password' => \Illuminate\Auth\Passwords\PasswordBrokerManager::class,
'auth.password.broker' => \Illuminate\Auth\Passwords\PasswordBroker::class,
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
@ -2127,6 +2258,7 @@ namespace PHPSTORM_META {
'composer' => \Illuminate\Support\Composer::class,
'cookie' => \Illuminate\Cookie\CookieJar::class,
'db' => \Illuminate\Database\DatabaseManager::class,
'db.connection' => \Illuminate\Database\MySqlConnection::class,
'db.factory' => \Illuminate\Database\Connectors\ConnectionFactory::class,
'db.transactions' => \Illuminate\Database\DatabaseTransactionsManager::class,
'encrypter' => \Illuminate\Encryption\Encrypter::class,

1
Procfile Normal file
View File

@ -0,0 +1 @@
web: vendor/bin/heroku-php-apache2 public/

View File

@ -1,6 +1,84 @@
# kcal the personal food nutrition journal
[![CI Status](https://github.com/kcal-app/kcal/actions/workflows/ci.yml/badge.svg)](https://github.com/kcal-app/kcal/actions/workflows/ci.yml)
[![Coverage \status](https://coveralls.io/repos/github/kcal-app/kcal/badge.svg)](https://coveralls.io/github/kcal-app/kcal?branch=tests)
[![Coverage Status](https://coveralls.io/repos/github/kcal-app/kcal/badge.svg)](https://coveralls.io/github/kcal-app/kcal)
## Deployment
### Heroku
[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)
The default username and password for a Heroku deployment is `kcal`/`kcal`.
#### Using Heroku CLI
For a manual deploy using Heroku CLI, execute the following after initial deployment:
heroku run php artisan migrate
heroku run php artisan user:add
heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)
#### Search drivers
See the [Search](#search-mag) section for information about supported drivers. Additional
environment variable configuration is necessary when using any search driver other
than the default ("null").
#### Redis Add-on
The [Heroku Redis](https://elements.heroku.com/addons/heroku-redis) add-on can be
added to the app and will work without any configuration changes. It is left out
of the default build only because it takes a very long time to provision.
## Search :mag:
The "ingredient" (food or recipe) search for journal entries and recipe ingredients
supports three different backends using the `SCOUT_DRIVER` environment variable.
In all cases, always ensure that the `SCOUT_DRIVER` environment variable is only
set once in kcal's `.env` file.
Currently, the food and recipe *list* searches do not take advantage of these
search drivers. Support for those searches will be added if the Laravel JSON:API
adds support for Scout (see: laravel-json-api/laravel#32).
### Algolia (`algolia`)
1. [Create and/or log in](https://www.algolia.com/users/sign_in) to an Algolia account.
1. Create an application for kcal.
1. Navigate to the application's "API Keys" section.
1. Using the **Application ID** and **Admin API Key** values, update kcal's `.env` file:
SCOUT_DRIVER=algolia
ALGOLIA_APP_ID=<APPLICATION_ID>
ALGOLIA_SECRET=<ADMIN_API_KEY>
### ElasticSearch (`elastic`)
1. Determine the host and port for your ElasticSearch service.
1. Update kcal's `.env` file.
SCOUT_DRIVER=elastic
ELASTIC_HOST=<HOST:PORT>
ELASTIC_PORT=<PORT>
Note: The `ELASTIC_PORT` variable is a convenience option specifically for
Docker Compose configurations and is not strictly required.
1. Run Elastic's migrations.
php artisan elastic:migrate
### Fallback (`null`)
The fallback driver is a simple `WHERE ... LIKE` clause search on a couple of key
fields. Results will not be ordered by relevance, and some fields will not be
searched (e.g. the tags fields). Using one of the other options is highly recommended.
Set `SCOUT_DRIVER=null` in kcal's `.env` file to use the fallback driver.
## Development
@ -52,5 +130,5 @@
The default username and password is `admin@kcal.test`.
Once the application finishing starting, navigate to [http://127.0.0.1:8080](http://127.0.0.1:8080)
Once the application finishes starting, navigate to [http://127.0.0.1:8080](http://127.0.0.1:8080)
(or [http://kcal.test:8080](http://kcal.test:8080) if configured).

View File

@ -4327,16 +4327,27 @@
{
/** @var \Illuminate\Database\DatabaseManager $instance */
$instance->setReconnector($reconnector);
}
/**
* Determine if the connected database is a MariaDB database.
*
* @return bool
* @static
*/
public static function isMaria()
{
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->isMaria();
}
/**
* Get a schema builder instance for the connection.
*
* @return \Illuminate\Database\Schema\SQLiteBuilder
* @return \Illuminate\Database\Schema\MySqlBuilder
* @static
*/
public static function getSchemaBuilder()
{
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getSchemaBuilder();
}
/**
@ -4344,12 +4355,12 @@
*
* @param \Illuminate\Filesystem\Filesystem|null $files
* @param callable|null $processFactory
* @throws \RuntimeException
* @return \Illuminate\Database\Schema\MySqlSchemaState
* @static
*/
public static function getSchemaState($files = null, $processFactory = null)
{
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getSchemaState($files, $processFactory);
}
/**
@ -4360,7 +4371,7 @@
*/
public static function useDefaultQueryGrammar()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->useDefaultQueryGrammar();
}
/**
@ -4371,7 +4382,7 @@
*/
public static function useDefaultSchemaGrammar()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->useDefaultSchemaGrammar();
}
/**
@ -4382,7 +4393,7 @@
*/
public static function useDefaultPostProcessor()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->useDefaultPostProcessor();
}
/**
@ -4395,7 +4406,7 @@
*/
public static function table($table, $as = null)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->table($table, $as);
}
/**
@ -4406,7 +4417,7 @@
*/
public static function query()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->query();
}
/**
@ -4420,7 +4431,7 @@
*/
public static function selectOne($query, $bindings = [], $useReadPdo = true)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->selectOne($query, $bindings, $useReadPdo);
}
/**
@ -4433,7 +4444,7 @@
*/
public static function selectFromWriteConnection($query, $bindings = [])
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->selectFromWriteConnection($query, $bindings);
}
/**
@ -4447,7 +4458,7 @@
*/
public static function select($query, $bindings = [], $useReadPdo = true)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->select($query, $bindings, $useReadPdo);
}
/**
@ -4461,7 +4472,7 @@
*/
public static function cursor($query, $bindings = [], $useReadPdo = true)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->cursor($query, $bindings, $useReadPdo);
}
/**
@ -4474,7 +4485,7 @@
*/
public static function insert($query, $bindings = [])
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->insert($query, $bindings);
}
/**
@ -4487,7 +4498,7 @@
*/
public static function update($query, $bindings = [])
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->update($query, $bindings);
}
/**
@ -4500,7 +4511,7 @@
*/
public static function delete($query, $bindings = [])
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->delete($query, $bindings);
}
/**
@ -4513,7 +4524,7 @@
*/
public static function statement($query, $bindings = [])
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->statement($query, $bindings);
}
/**
@ -4526,7 +4537,7 @@
*/
public static function affectingStatement($query, $bindings = [])
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->affectingStatement($query, $bindings);
}
/**
@ -4538,7 +4549,7 @@
*/
public static function unprepared($query)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->unprepared($query);
}
/**
@ -4550,7 +4561,7 @@
*/
public static function pretend($callback)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->pretend($callback);
}
/**
@ -4563,7 +4574,7 @@
*/
public static function bindValues($statement, $bindings)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->bindValues($statement, $bindings);
}
/**
@ -4575,7 +4586,7 @@
*/
public static function prepareBindings($bindings)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->prepareBindings($bindings);
}
/**
@ -4589,7 +4600,7 @@
*/
public static function logQuery($query, $bindings, $time = null)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->logQuery($query, $bindings, $time);
}
/**
@ -4601,7 +4612,7 @@
*/
public static function listen($callback)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->listen($callback);
}
/**
@ -4613,7 +4624,7 @@
*/
public static function raw($value)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->raw($value);
}
/**
@ -4625,7 +4636,7 @@
*/
public static function recordsHaveBeenModified($value = true)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->recordsHaveBeenModified($value);
}
/**
@ -4636,7 +4647,7 @@
*/
public static function forgetRecordModificationState()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->forgetRecordModificationState();
}
/**
@ -4647,7 +4658,7 @@
*/
public static function isDoctrineAvailable()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->isDoctrineAvailable();
}
/**
@ -4660,7 +4671,7 @@
*/
public static function getDoctrineColumn($table, $column)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getDoctrineColumn($table, $column);
}
/**
@ -4671,7 +4682,7 @@
*/
public static function getDoctrineSchemaManager()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getDoctrineSchemaManager();
}
/**
@ -4682,7 +4693,7 @@
*/
public static function getDoctrineConnection()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getDoctrineConnection();
}
/**
@ -4693,7 +4704,7 @@
*/
public static function getPdo()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getPdo();
}
/**
@ -4704,7 +4715,7 @@
*/
public static function getRawPdo()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getRawPdo();
}
/**
@ -4715,7 +4726,7 @@
*/
public static function getReadPdo()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getReadPdo();
}
/**
@ -4726,31 +4737,31 @@
*/
public static function getRawReadPdo()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getRawReadPdo();
}
/**
* Set the PDO connection.
*
* @param \PDO|\Closure|null $pdo
* @return \Illuminate\Database\SQLiteConnection
* @return \Illuminate\Database\MySqlConnection
* @static
*/
public static function setPdo($pdo)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->setPdo($pdo);
}
/**
* Set the PDO connection used for reading.
*
* @param \PDO|\Closure|null $pdo
* @return \Illuminate\Database\SQLiteConnection
* @return \Illuminate\Database\MySqlConnection
* @static
*/
public static function setReadPdo($pdo)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->setReadPdo($pdo);
}
/**
@ -4761,7 +4772,7 @@
*/
public static function getName()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getName();
}
/**
@ -4773,7 +4784,7 @@
*/
public static function getConfig($option = null)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getConfig($option);
}
/**
@ -4784,7 +4795,7 @@
*/
public static function getDriverName()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getDriverName();
}
/**
@ -4795,19 +4806,19 @@
*/
public static function getQueryGrammar()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getQueryGrammar();
}
/**
* Set the query grammar used by the connection.
*
* @param \Illuminate\Database\Query\Grammars\Grammar $grammar
* @return \Illuminate\Database\SQLiteConnection
* @return \Illuminate\Database\MySqlConnection
* @static
*/
public static function setQueryGrammar($grammar)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->setQueryGrammar($grammar);
}
/**
@ -4818,19 +4829,19 @@
*/
public static function getSchemaGrammar()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getSchemaGrammar();
}
/**
* Set the schema grammar used by the connection.
*
* @param \Illuminate\Database\Schema\Grammars\Grammar $grammar
* @return \Illuminate\Database\SQLiteConnection
* @return \Illuminate\Database\MySqlConnection
* @static
*/
public static function setSchemaGrammar($grammar)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->setSchemaGrammar($grammar);
}
/**
@ -4841,19 +4852,19 @@
*/
public static function getPostProcessor()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getPostProcessor();
}
/**
* Set the query post processor used by the connection.
*
* @param \Illuminate\Database\Query\Processors\Processor $processor
* @return \Illuminate\Database\SQLiteConnection
* @return \Illuminate\Database\MySqlConnection
* @static
*/
public static function setPostProcessor($processor)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->setPostProcessor($processor);
}
/**
@ -4864,19 +4875,19 @@
*/
public static function getEventDispatcher()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getEventDispatcher();
}
/**
* Set the event dispatcher instance on the connection.
*
* @param \Illuminate\Contracts\Events\Dispatcher $events
* @return \Illuminate\Database\SQLiteConnection
* @return \Illuminate\Database\MySqlConnection
* @static
*/
public static function setEventDispatcher($events)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->setEventDispatcher($events);
}
/**
@ -4887,19 +4898,19 @@
*/
public static function unsetEventDispatcher()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->unsetEventDispatcher();
}
/**
* Set the transaction manager instance on the connection.
*
* @param \Illuminate\Database\DatabaseTransactionsManager $manager
* @return \Illuminate\Database\SQLiteConnection
* @return \Illuminate\Database\MySqlConnection
* @static
*/
public static function setTransactionManager($manager)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->setTransactionManager($manager);
}
/**
@ -4910,7 +4921,7 @@
*/
public static function unsetTransactionManager()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->unsetTransactionManager();
}
/**
@ -4921,7 +4932,7 @@
*/
public static function pretending()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->pretending();
}
/**
@ -4932,7 +4943,7 @@
*/
public static function getQueryLog()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getQueryLog();
}
/**
@ -4943,7 +4954,7 @@
*/
public static function flushQueryLog()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->flushQueryLog();
}
/**
@ -4954,7 +4965,7 @@
*/
public static function enableQueryLog()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->enableQueryLog();
}
/**
@ -4965,7 +4976,7 @@
*/
public static function disableQueryLog()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->disableQueryLog();
}
/**
@ -4976,7 +4987,7 @@
*/
public static function logging()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->logging();
}
/**
@ -4987,19 +4998,19 @@
*/
public static function getDatabaseName()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getDatabaseName();
}
/**
* Set the name of the connected database.
*
* @param string $database
* @return \Illuminate\Database\SQLiteConnection
* @return \Illuminate\Database\MySqlConnection
* @static
*/
public static function setDatabaseName($database)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->setDatabaseName($database);
}
/**
@ -5010,19 +5021,19 @@
*/
public static function getTablePrefix()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->getTablePrefix();
}
/**
* Set the table prefix in use by the connection.
*
* @param string $prefix
* @return \Illuminate\Database\SQLiteConnection
* @return \Illuminate\Database\MySqlConnection
* @static
*/
public static function setTablePrefix($prefix)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->setTablePrefix($prefix);
}
/**
@ -5034,7 +5045,7 @@
*/
public static function withTablePrefix($grammar)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->withTablePrefix($grammar);
}
/**
@ -5047,7 +5058,7 @@
*/
public static function resolverFor($driver, $callback)
{ //Method inherited from \Illuminate\Database\Connection
\Illuminate\Database\SQLiteConnection::resolverFor($driver, $callback);
\Illuminate\Database\MySqlConnection::resolverFor($driver, $callback);
}
/**
* Get the connection resolver for the given driver.
@ -5058,7 +5069,7 @@
*/
public static function getResolver($driver)
{ //Method inherited from \Illuminate\Database\Connection
return \Illuminate\Database\SQLiteConnection::getResolver($driver);
return \Illuminate\Database\MySqlConnection::getResolver($driver);
}
/**
* Execute a Closure within a transaction.
@ -5071,7 +5082,7 @@
*/
public static function transaction($callback, $attempts = 1)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->transaction($callback, $attempts);
}
/**
@ -5083,7 +5094,7 @@
*/
public static function beginTransaction()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->beginTransaction();
}
/**
@ -5095,7 +5106,7 @@
*/
public static function commit()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->commit();
}
/**
@ -5108,7 +5119,7 @@
*/
public static function rollBack($toLevel = null)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->rollBack($toLevel);
}
/**
@ -5119,7 +5130,7 @@
*/
public static function transactionLevel()
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
return $instance->transactionLevel();
}
/**
@ -5131,7 +5142,7 @@
*/
public static function afterCommit($callback)
{ //Method inherited from \Illuminate\Database\Connection
/** @var \Illuminate\Database\SQLiteConnection $instance */
/** @var \Illuminate\Database\MySqlConnection $instance */
$instance->afterCommit($callback);
}
@ -11839,7 +11850,7 @@
*/
public static function createDatabase($name)
{
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->createDatabase($name);
}
/**
@ -11851,8 +11862,32 @@
*/
public static function dropDatabaseIfExists($name)
{
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->dropDatabaseIfExists($name);
}
/**
* Determine if the given table exists.
*
* @param string $table
* @return bool
* @static
*/
public static function hasTable($table)
{
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->hasTable($table);
}
/**
* Get the column listing for a given table.
*
* @param string $table
* @return array
* @static
*/
public static function getColumnListing($table)
{
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->getColumnListing($table);
}
/**
* Drop all tables from the database.
@ -11862,7 +11897,7 @@
*/
public static function dropAllTables()
{
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->dropAllTables();
}
/**
@ -11873,19 +11908,30 @@
*/
public static function dropAllViews()
{
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->dropAllViews();
}
/**
* Empty the database file.
* Get all of the table names for the database.
*
* @return void
* @return array
* @static
*/
public static function refreshDatabaseFile()
public static function getAllTables()
{
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
$instance->refreshDatabaseFile();
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->getAllTables();
}
/**
* Get all of the view names for the database.
*
* @return array
* @static
*/
public static function getAllViews()
{
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->getAllViews();
}
/**
* Set the default string length for migrations.
@ -11896,7 +11942,7 @@
*/
public static function defaultStringLength($length)
{ //Method inherited from \Illuminate\Database\Schema\Builder
\Illuminate\Database\Schema\SQLiteBuilder::defaultStringLength($length);
\Illuminate\Database\Schema\MySqlBuilder::defaultStringLength($length);
}
/**
* Set the default morph key type for migrations.
@ -11907,7 +11953,7 @@
*/
public static function defaultMorphKeyType($type)
{ //Method inherited from \Illuminate\Database\Schema\Builder
\Illuminate\Database\Schema\SQLiteBuilder::defaultMorphKeyType($type);
\Illuminate\Database\Schema\MySqlBuilder::defaultMorphKeyType($type);
}
/**
* Set the default morph key type for migrations to UUIDs.
@ -11917,19 +11963,7 @@
*/
public static function morphUsingUuids()
{ //Method inherited from \Illuminate\Database\Schema\Builder
\Illuminate\Database\Schema\SQLiteBuilder::morphUsingUuids();
}
/**
* Determine if the given table exists.
*
* @param string $table
* @return bool
* @static
*/
public static function hasTable($table)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
return $instance->hasTable($table);
\Illuminate\Database\Schema\MySqlBuilder::morphUsingUuids();
}
/**
* Determine if the given table has a given column.
@ -11941,7 +11975,7 @@
*/
public static function hasColumn($table, $column)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->hasColumn($table, $column);
}
/**
@ -11954,7 +11988,7 @@
*/
public static function hasColumns($table, $columns)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->hasColumns($table, $columns);
}
/**
@ -11967,20 +12001,8 @@
*/
public static function getColumnType($table, $column)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->getColumnType($table, $column);
}
/**
* Get the column listing for a given table.
*
* @param string $table
* @return array
* @static
*/
public static function getColumnListing($table)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
return $instance->getColumnListing($table);
}
/**
* Modify a table on the schema.
@ -11992,7 +12014,7 @@
*/
public static function table($table, $callback)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->table($table, $callback);
}
/**
@ -12005,7 +12027,7 @@
*/
public static function create($table, $callback)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->create($table, $callback);
}
/**
@ -12017,7 +12039,7 @@
*/
public static function drop($table)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->drop($table);
}
/**
@ -12029,7 +12051,7 @@
*/
public static function dropIfExists($table)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->dropIfExists($table);
}
/**
@ -12042,7 +12064,7 @@
*/
public static function dropColumns($table, $columns)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->dropColumns($table, $columns);
}
/**
@ -12054,20 +12076,8 @@
*/
public static function dropAllTypes()
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->dropAllTypes();
}
/**
* Get all of the table names for the database.
*
* @return void
* @throws \LogicException
* @static
*/
public static function getAllTables()
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
$instance->getAllTables();
}
/**
* Rename a table on the schema.
@ -12079,7 +12089,7 @@
*/
public static function rename($from, $to)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->rename($from, $to);
}
/**
@ -12090,7 +12100,7 @@
*/
public static function enableForeignKeyConstraints()
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->enableForeignKeyConstraints();
}
/**
@ -12101,7 +12111,7 @@
*/
public static function disableForeignKeyConstraints()
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->disableForeignKeyConstraints();
}
/**
@ -12117,7 +12127,7 @@
*/
public static function registerCustomDoctrineType($class, $name, $type)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->registerCustomDoctrineType($class, $name, $type);
}
/**
@ -12128,19 +12138,19 @@
*/
public static function getConnection()
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->getConnection();
}
/**
* Set the database connection instance.
*
* @param \Illuminate\Database\Connection $connection
* @return \Illuminate\Database\Schema\SQLiteBuilder
* @return \Illuminate\Database\Schema\MySqlBuilder
* @static
*/
public static function setConnection($connection)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->setConnection($connection);
}
/**
@ -12152,7 +12162,7 @@
*/
public static function blueprintResolver($resolver)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\SQLiteBuilder $instance */
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
$instance->blueprintResolver($resolver);
}
@ -16665,6 +16675,19 @@ namespace {
return $instance->unless($value, $callback, $default);
}
/**
*
*
* @see \Algolia\ScoutExtended\ScoutExtendedServiceProvider::registerMacros()
* @param array $array
* @param array|null $transformers
* @static
*/
public static function transform($array, $transformers = null)
{
return \Illuminate\Database\Eloquent\Builder::transform($array, $transformers);
}
/**
* Set the columns to be selected.
*

47
app.json Normal file
View File

@ -0,0 +1,47 @@
{
"name": "kcal the personal food nutrition journal",
"description": "Self-hostable web app for food and recipe nutrition tracking.",
"keywords": [
"cooking",
"fitness",
"food",
"heath",
"laravel",
"nutrition",
"php",
"recipes",
"self-host"
],
"repository": "https://github.com/kcal-app/kcal",
"website": "http://demo.kcal.cooking",
"buildpacks": [
{
"url": "heroku/php"
}
],
"addons": [
"heroku-postgresql"
],
"env": {
"APP_KEY": {
"description": "Used for the auth system.",
"generator": "secret"
},
"APP_TIMEZONE": {
"description": "Application time zone.",
"value": "Etc/UTC"
},
"DB_CONNECTION": {
"description": "Database driver.",
"value": "pgsql"
},
"SCOUT_DRIVER": {
"description": "Search driver ('algolia', 'elastic', or 'null').",
"value": "null"
}
},
"scripts": {
"postdeploy": "php artisan migrate --force && php artisan user:add kcal kcal --name=Admin"
},
"success_url": "/"
}

View File

@ -0,0 +1,90 @@
<?php
namespace App\Console\Commands;
use App\Models\User;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class UserAdd extends Command
{
/**
* @inheritdoc
*/
protected $signature = 'user:add
{username? : Username}
{password? : Password}
{--name= : User short name}';
/**
* @inheritdoc
*/
protected $description = 'Create a new user.';
/**
* @inheritdoc
*/
public function __construct()
{
parent::__construct();
}
/**
* Create a user, prompting for user information as needed.
*/
public function handle(): int
{
$arguments = $this->arguments();
if (!$arguments['username']) {
$arguments['username'] = $this->ask('Enter a username for the user');
}
// Check for an existing user.
if (User::whereUsername($arguments['username'])->exists()) {
$this->error("User `{$arguments['username']}` already exists.");
return 1;
}
$random_password = FALSE;
if (!$arguments['password']) {
$arguments['password'] = $this->secret('Enter a password for the user (leave blank for a random password)');
if (!empty($arguments['password'])) {
$password_confirm = $this->secret('Re-type the password to confirm');
if ($arguments['password'] !== $password_confirm) {
$this->error('Passwords did not match.');
return 1;
}
}
}
if (empty($arguments['password'])) {
$arguments['password'] = Str::random();
$random_password = TRUE;
}
$options = $this->options();
if (!$options['name']) {
$options['name'] = $this->ask('Enter a name for the user (optional)');
}
if (empty($arguments['username']) || empty($arguments['password'])) {
$this->error('Username and password must be provided.');
return 1;
}
User::create([
'username' => $arguments['username'],
'password' => Hash::make($arguments['password']),
'name' => $options['name'] ?: $arguments['username'],
'remember_token' => Str::random(10),
])->save();
$this->info("User `{$arguments['username']}` added!");
if ($random_password) {
$this->info("Password: {$arguments['password']}");
}
return 0;
}
}

View File

@ -5,6 +5,8 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@ -12,43 +14,30 @@ class AuthenticatedSessionController extends Controller
{
/**
* Display the login view.
*
* @return \Illuminate\View\View
*/
public function create()
public function create(): View
{
return view('auth.login');
}
/**
* Handle an incoming authentication request.
*
* @param \App\Http\Requests\Auth\LoginRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(LoginRequest $request)
public function store(LoginRequest $request): RedirectResponse
{
$request->authenticate();
$request->session()->regenerate();
return redirect(RouteServiceProvider::HOME);
}
/**
* Destroy an authenticated session.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Request $request)
public function destroy(Request $request): RedirectResponse
{
Auth::guard('web')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}

View File

@ -1,45 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
class ConfirmablePasswordController extends Controller
{
/**
* Show the confirm password view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\View
*/
public function show(Request $request)
{
return view('auth.confirm-password');
}
/**
* Confirm the user's password.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function store(Request $request)
{
if (! Auth::guard('web')->validate([
'email' => $request->user()->email,
'password' => $request->password,
])) {
throw ValidationException::withMessages([
'password' => __('auth.password'),
]);
}
$request->session()->put('auth.password_confirmed_at', time());
return redirect()->intended(RouteServiceProvider::HOME);
}
}

View File

@ -1,63 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Str;
class NewPasswordController extends Controller
{
/**
* Display the password reset view.
*
* @return \Illuminate\View\View
*/
public function create(Request $request)
{
return view('auth.reset-password', ['request' => $request]);
}
/**
* Handle an incoming new password request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'token' => 'required',
'email' => 'required|email',
'password' => 'required|string|confirmed|min:8',
]);
// Here we will attempt to reset the user's password. If it is successful we
// will update the password on an actual user model and persist it to the
// database. Otherwise we will parse the error and return the response.
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function ($user) use ($request) {
$user->forceFill([
'password' => Hash::make($request->password),
'remember_token' => Str::random(60),
])->save();
event(new PasswordReset($user));
}
);
// If the password was successfully reset, we will redirect the user back to
// the application's home authenticated view. If there is an error we can
// redirect them back to where they came from with their error message.
return $status == Password::PASSWORD_RESET
? redirect()->route('login')->with('status', __($status))
: back()->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
}

View File

@ -1,47 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
class PasswordResetLinkController extends Controller
{
/**
* Display the password reset link request view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.forgot-password');
}
/**
* Handle an incoming password reset link request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'email' => 'required|email',
]);
// We will send the password reset link to this user. Once we have attempted
// to send the link, we will examine the response then see the message we
// need to show to the user. Finally, we'll send out a proper response.
$status = Password::sendResetLink(
$request->only('email')
);
return $status == Password::RESET_LINK_SENT
? back()->with('status', __($status))
: back()->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
}

View File

@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Models\Food;
use App\Models\Recipe;
use App\Search\Ingredient;
use ElasticScoutDriverPlus\Builders\MultiMatchQueryBuilder;
use ElasticScoutDriverPlus\Builders\TermsQueryBuilder;
use Illuminate\Database\Eloquent\Collection;
@ -20,28 +21,62 @@ class IngredientPickerController extends Controller
$results = new Collection();
$term = $request->query->get('term');
if (!empty($term)) {
$results = Food::boolSearch()
->join(Recipe::class)
$results = match (config('scout.driver')) {
'algolia' => $this->searchWithAlgolia($term),
'elastic' => $this->searchWithElasticSearch($term),
default => $this->searchWithDatabaseLike($term),
};
// Attempt to match exact phrase first.
->should('match_phrase', ['name' => $term])
// Attempt multi-match search on all relevant fields with search-as-you-type on name.
->should((new MultiMatchQueryBuilder())
->fields(['name', 'name._2gram', 'name._3gram', 'detail', 'brand', 'source'])
->query($term)
->type('bool_prefix')
->analyzer('simple')
->fuzziness('AUTO'))
// Attempt to match on any tags in the term.
->should((new TermsQueryBuilder())
->terms('tags', explode(' ', $term)))
// Get resulting models.
->execute()
->models();
}
return response()->json($results->values());
}
/**
* Search using an Algolia service.
*/
private function searchWithAlgolia(string $term): Collection {
return Ingredient::search($term)->take(10)->get();
}
/**
* Search using an ElasticSearch service.
*/
private function searchWithElasticSearch(string $term): Collection {
return Food::boolSearch()
->join(Recipe::class)
// Attempt to match exact phrase first.
->should('match_phrase', ['name' => $term])
// Attempt multi-match search on all relevant fields with search-as-you-type on name.
->should((new MultiMatchQueryBuilder())
->fields(['name', 'name._2gram', 'name._3gram', 'detail', 'brand', 'source'])
->query($term)
->type('bool_prefix')
->analyzer('simple')
->fuzziness('AUTO'))
// Attempt to match on any tags in the term.
->should((new TermsQueryBuilder())
->terms('tags', explode(' ', $term)))
// Get resulting models.
->execute()
->models();
}
/**
* Search using basic database WHERE ... LIKE queries.
*/
private function searchWithDatabaseLike(string $term): Collection {
$foods = Food::query()->where('foods.name', 'like', "%{$term}%")
->orWhere('foods.detail', 'like', "%{$term}%")
->orWhere('foods.brand', 'like', "%{$term}%")
->get();
$recipes = Recipe::query()->where('recipes.name', 'like', "%{$term}%")
->orWhere('recipes.description', 'like', "%{$term}%")
->orWhere('recipes.source', 'like', "%{$term}%")
->get();
return $foods->merge($recipes);
}
}

View File

@ -29,7 +29,7 @@ class LoginRequest extends FormRequest
public function rules()
{
return [
'email' => 'required|string|email',
'username' => 'required|string',
'password' => 'required|string',
];
}
@ -45,11 +45,11 @@ class LoginRequest extends FormRequest
{
$this->ensureIsNotRateLimited();
if (! Auth::attempt($this->only('email', 'password'), $this->filled('remember'))) {
if (! Auth::attempt($this->only('username', 'password'), $this->filled('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'email' => 'auth.failed',
'username' => 'auth.failed',
]);
}
@ -74,7 +74,7 @@ class LoginRequest extends FormRequest
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.throttle', [
'username' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
@ -88,6 +88,6 @@ class LoginRequest extends FormRequest
*/
public function throttleKey()
{
return Str::lower($this->input('email')).'|'.$this->ip();
return Str::lower($this->input('username')).'|'.$this->ip();
}
}

View File

@ -26,8 +26,8 @@ class UserSchema extends SchemaProvider
public function getAttributes($resource): array
{
return [
'username' => $resource->username,
'name' => $resource->name,
'email' => $resource->email,
'createdAt' => $resource->created_at,
'updatedAt' => $resource->updated_at,
];

View File

@ -15,29 +15,29 @@ use Illuminate\Support\Facades\Auth;
*
* @property int $id
* @property string $name
* @property string $email
* @property string $username
* @property string $password
* @property string|null $remember_token
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property Carbon|null $created_at
* @property Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Goal[] $goals
* @property-read int|null $goals_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\JournalEntry[] $journalEntries
* @property-read int|null $journal_entries_count
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection|\Illuminate\Notifications\DatabaseNotification[] $notifications
* @property-read int|null $notifications_count
* @method static \Database\Factories\UserFactory factory(...$parameters)
* @method static \Illuminate\Database\Eloquent\Builder|User newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|User newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|User query()
* @method static \Illuminate\Database\Eloquent\Builder|User whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereEmail($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|User wherePassword($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereRememberToken($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereUsername($value)
* @mixin \Eloquent
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Goal[] $goals
* @property-read int|null $goals_count
* @method static \Database\Factories\UserFactory factory(...$parameters)
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\JournalEntry[] $journalEntries
* @property-read int|null $journal_entries_count
*/
final class User extends Authenticatable
{
@ -47,9 +47,9 @@ final class User extends Authenticatable
* @inheritdoc
*/
protected $fillable = [
'name',
'email',
'username',
'password',
'name',
];
/**

View File

@ -2,6 +2,7 @@
namespace App\Providers;
use App\Search\Ingredient;
use CloudCreativity\LaravelJsonApi\LaravelJsonApi;
use Illuminate\Support\ServiceProvider;
@ -25,5 +26,9 @@ class AppServiceProvider extends ServiceProvider
public function boot()
{
LaravelJsonApi::defaultApi('v1');
if (config('scout.driver') === 'algolia') {
Ingredient::bootSearchable();
}
}
}

View File

@ -2,10 +2,7 @@
namespace App\Providers;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
class EventServiceProvider extends ServiceProvider
{
@ -14,11 +11,7 @@ class EventServiceProvider extends ServiceProvider
*
* @var array
*/
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
];
protected $listen = [];
/**
* Register any events for your application.

16
app/Search/Ingredient.php Normal file
View File

@ -0,0 +1,16 @@
<?php
namespace App\Search;
use Algolia\ScoutExtended\Searchable\Aggregator;
use App\Models\Food;
use App\Models\Recipe;
class Ingredient extends Aggregator
{
/**
* @inheritdoc
*/
protected $models = [Food::class, Recipe::class];
}

View File

@ -5,6 +5,12 @@
"license": "MPL-2.0",
"require": {
"php": "^8.0",
"ext-fileinfo": "*",
"ext-gd": "*",
"ext-json": "*",
"ext-mbstring": "*",
"algolia/algoliasearch-client-php": "^2.7",
"algolia/scout-extended": "^1.15",
"babenkoivan/elastic-migrations": "^1.4",
"babenkoivan/elastic-scout-driver": "^1.3",
"babenkoivan/elastic-scout-driver-plus": "^2.0",

218
composer.lock generated
View File

@ -4,8 +4,163 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "f1b321a1250402dfe856aaab38adb2db",
"content-hash": "b404494454b0ff89c0db3d7eb87e3a44",
"packages": [
{
"name": "algolia/algoliasearch-client-php",
"version": "2.7.3",
"source": {
"type": "git",
"url": "https://github.com/algolia/algoliasearch-client-php.git",
"reference": "142a382e4649db0cb64d9eb8893872f1a4ba8dd3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/algolia/algoliasearch-client-php/zipball/142a382e4649db0cb64d9eb8893872f1a4ba8dd3",
"reference": "142a382e4649db0cb64d9eb8893872f1a4ba8dd3",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"php": "^5.3 || ^7.0 || ^8.0",
"psr/http-message": "^1.0",
"psr/log": "^1.0",
"psr/simple-cache": "^1.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.0",
"fzaninotto/faker": "^1.8",
"julienbourdeau/phpunit": "4.8.37",
"symfony/yaml": "^2.0 || ^4.0"
},
"suggest": {
"guzzlehttp/guzzle": "If you prefer to use Guzzle HTTP client instead of the Http Client implementation provided by the package"
},
"bin": [
"bin/algolia-doctor"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-2.0": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Algolia\\AlgoliaSearch\\": "src/"
},
"files": [
"src/Http/Psr7/functions.php",
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Algolia Team",
"email": "contact@algolia.com"
}
],
"description": "Algolia Search API Client for PHP",
"keywords": [
"algolia",
"api",
"client",
"php",
"search"
],
"support": {
"issues": "https://github.com/algolia/algoliasearch-client-php/issues",
"source": "https://github.com/algolia/algoliasearch-client-php/tree/2.7.3"
},
"time": "2020-12-22T11:27:03+00:00"
},
{
"name": "algolia/scout-extended",
"version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/algolia/scout-extended.git",
"reference": "f1da27101b4c88166f9d66d5110b46e1dacb8f1c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/algolia/scout-extended/zipball/f1da27101b4c88166f9d66d5110b46e1dacb8f1c",
"reference": "f1da27101b4c88166f9d66d5110b46e1dacb8f1c",
"shasum": ""
},
"require": {
"algolia/algoliasearch-client-php": "^2.7.3",
"ext-json": "*",
"illuminate/console": "^6.0|^7.0|^8.0",
"illuminate/contracts": "^6.0|^7.0|^8.0",
"illuminate/database": "^6.0|^7.0|^8.0",
"illuminate/filesystem": "^6.0|^7.0|^8.0",
"illuminate/support": "^6.0|^7.0|^8.0",
"laravel/scout": "^8.0",
"php": "^7.3|^8.0",
"riimu/kit-phpencoder": "^2.4"
},
"require-dev": {
"fakerphp/faker": "^1.13",
"laravel/legacy-factories": "^1.1",
"mockery/mockery": "^1.4",
"nunomaduro/larastan": "^0.6",
"orchestra/testbench": "^4.9|^5.9|^6.6",
"phpstan/phpstan": "^0.12.14",
"phpunit/phpunit": "^8.0|^9.0"
},
"suggest": {
"ext-dom": "Required to use the HTML Splitter."
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Algolia\\ScoutExtended\\ScoutExtendedServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Algolia\\ScoutExtended\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nuno Maduro",
"email": "enunomaduro@gmail.com"
},
{
"name": "Algolia Team",
"email": "contact@algolia.com"
}
],
"description": "Scout Extended extends Laravel Scout adding algolia-specific features",
"keywords": [
"algolia",
"analytics",
"extended",
"laravel",
"places",
"scout",
"search"
],
"support": {
"issues": "https://github.com/algolia/scout-extended/issues",
"source": "https://github.com/algolia/scout-extended/tree/v1.15.0"
},
"time": "2021-03-17T15:52:17+00:00"
},
{
"name": "asm89/stack-cors",
"version": "v2.0.3",
@ -4177,6 +4332,61 @@
},
"time": "2020-05-12T15:16:56+00:00"
},
{
"name": "riimu/kit-phpencoder",
"version": "v2.4.1",
"source": {
"type": "git",
"url": "https://github.com/Riimu/Kit-PHPEncoder.git",
"reference": "ca6f004e1290aec7ef4bebf6c0807b30fcf981d7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Riimu/Kit-PHPEncoder/zipball/ca6f004e1290aec7ef4bebf6c0807b30fcf981d7",
"reference": "ca6f004e1290aec7ef4bebf6c0807b30fcf981d7",
"shasum": ""
},
"require": {
"php": ">=5.6.0"
},
"require-dev": {
"phpunit/phpunit": "^9.4 || ^6.5 || ^5.7"
},
"suggest": {
"ext-gmp": "To convert GMP numbers into PHP code"
},
"type": "library",
"autoload": {
"psr-4": {
"Riimu\\Kit\\PHPEncoder\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Riikka Kalliomäki",
"email": "riikka.kalliomaki@gmail.com",
"homepage": "http://riimu.net"
}
],
"description": "Highly customizable alternative to var_export for PHP code generation",
"homepage": "http://kit.riimu.net",
"keywords": [
"code",
"encoder",
"export",
"generator",
"variable"
],
"support": {
"issues": "https://github.com/Riimu/Kit-PHPEncoder/issues",
"source": "https://github.com/Riimu/Kit-PHPEncoder/tree/v2.4.1"
},
"time": "2020-11-29T16:53:17+00:00"
},
{
"name": "spatie/eloquent-sortable",
"version": "3.11.0",
@ -11211,7 +11421,11 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": "^8.0"
"php": "^8.0",
"ext-fileinfo": "*",
"ext-gd": "*",
"ext-json": "*",
"ext-mbstring": "*"
},
"platform-dev": [],
"plugin-api-version": "2.0.0"

View File

@ -117,9 +117,12 @@ return [
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
| MD5 is used here to enforce the 32 character string requirement while
| allowing flexibility in the actual APP_KEY length.
|
*/
'key' => env('APP_KEY'),
'key' => md5(env('APP_KEY')),
'cipher' => 'AES-256-CBC',

View File

@ -4,6 +4,7 @@ namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class UserFactory extends Factory
@ -19,9 +20,9 @@ class UserFactory extends Factory
public function definition(): array
{
return [
'username' => $this->faker->unique()->userName,
'password' => Hash::make('password'),
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}

View File

@ -15,9 +15,9 @@ class CreateUsersTable extends Migration
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('username')->unique();
$table->string('password');
$table->string('name');
$table->rememberToken();
$table->timestamps();
});

View File

@ -15,9 +15,9 @@ class UserSeeder extends Seeder
public function run(): void
{
User::factory()->create([
'username' => 'admin',
'password' => Hash::make('admin'),
'name' => 'Admin',
'email' => 'admin@kcal.test',
'password' => Hash::make('admin@kcal.test'),
'remember_token' => Str::random(10),
]);
}

View File

@ -63,13 +63,6 @@ services:
- 'redis-data:/data'
networks:
- sail
mailhog:
image: 'mailhog/mailhog:latest'
ports:
- '${MAIL_PORT:-1025}:1025'
- '${MAILHOG_ADMIN_PORT:-8025}:8025'
networks:
- sail
networks:
sail:
driver: bridge

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@ -1,35 +0,0 @@
<x-guest-layout>
<x-slot name="title">Confirm Password</x-slot>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-gray-500" />
</a>
</x-slot>
<div class="mb-4 text-sm text-gray-600">
This is a secure area of the application. Please confirm your password before continuing.
</div>
<!-- Validation Errors -->
<x-auth-validation-errors class="mb-4" :errors="$errors" />
<form method="POST" action="{{ route('password.confirm') }}">
@csrf
<!-- Password -->
<div>
<x-inputs.label for="password" value="Password" />
<x-inputs.input id="password" class="block mt-1 w-full"
type="password"
name="password"
required autocomplete="current-password" />
</div>
<div class="flex justify-end mt-4">
<x-inputs.button>Confirm</x-inputs.button>
</div>
</form>
</x-auth-card>
</x-guest-layout>

View File

@ -1,35 +0,0 @@
<x-guest-layout>
<x-slot name="title">Forgot Password</x-slot>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-gray-500" />
</a>
</x-slot>
<div class="mb-4 text-sm text-gray-600">
Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.
</div>
<!-- Session Status -->
<x-auth-session-status class="mb-4" :status="session('status')" />
<!-- Validation Errors -->
<x-auth-validation-errors class="mb-4" :errors="$errors" />
<form method="POST" action="{{ route('password.email') }}">
@csrf
<!-- Email Address -->
<div>
<x-inputs.label for="email" value="Email" />
<x-inputs.input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus />
</div>
<div class="flex items-center justify-end mt-4">
<x-inputs.button>Email Password Reset Link</x-inputs.button>
</div>
</form>
</x-auth-card>
</x-guest-layout>

View File

@ -16,11 +16,11 @@
<form method="POST" action="{{ route('login') }}">
@csrf
<!-- Email Address -->
<!-- Username -->
<div>
<x-inputs.label for="email" value="Email" />
<x-inputs.label for="username" value="Username" />
<x-inputs.input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus />
<x-inputs.input id="username" class="block mt-1 w-full" type="text" name="username" :value="old('username')" required autofocus />
</div>
<!-- Password -->

View File

@ -1,48 +0,0 @@
<x-guest-layout>
<x-slot name="title">Reset Password</x-slot>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-gray-500" />
</a>
</x-slot>
<!-- Validation Errors -->
<x-auth-validation-errors class="mb-4" :errors="$errors" />
<form method="POST" action="{{ route('password.update') }}">
@csrf
<!-- Password Reset Token -->
<input type="hidden" name="token" value="{{ $request->route('token') }}">
<!-- Email Address -->
<div>
<x-inputs.label for="email" value="Email" />
<x-inputs.input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email', $request->email)" required autofocus />
</div>
<!-- Password -->
<div class="mt-4">
<x-inputs.label for="password" value="Password" />
<x-inputs.input id="password" class="block mt-1 w-full" type="password" name="password" required />
</div>
<!-- Confirm Password -->
<div class="mt-4">
<x-inputs.label for="password_confirmation" value="Confirm Password" />
<x-inputs.input id="password_confirmation" class="block mt-1 w-full"
type="password"
name="password_confirmation" required />
</div>
<div class="flex items-center justify-end mt-4">
<x-inputs.button>Reset Password
</x-inputs.button>
</div>
</form>
</x-auth-card>
</x-guest-layout>

View File

@ -1,35 +0,0 @@
<x-guest-layout>
<x-slot name="title">Verify Email</x-slot>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-gray-500" />
</a>
</x-slot>
<div class="mb-4 text-sm text-gray-600">
Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.
</div>
@if (session('status') == 'verification-link-sent')
<div class="mb-4 font-medium text-sm text-green-600">
A new verification link has been sent to the email address you provided during registration.
</div>
@endif
<div class="mt-4 flex items-center justify-between">
<form method="POST" action="{{ route('verification.send') }}">
@csrf
<div>
<x-inputs.button>Resend Verification Email</x-inputs.button>
</div>
</form>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit" class="underline text-sm text-gray-600 hover:text-gray-900">Logout</button>
</form>
</div>
</x-auth-card>
</x-guest-layout>

View File

@ -0,0 +1,5 @@
<div class="flex justify-center pt-12 sm:pt-0 sm:justify-start">
<a href="https://www.algolia.com/" target="_blank">
<img src="{{ asset('images/search-by-algolia-light-background.svg') }}" alt="Search by Algolia">
</a>
</div>

View File

@ -24,13 +24,16 @@
</x-inputs.icon-green>
<div class="flex items-center justify-end mt-4 space-x-4">
<fieldset class="flex space-x-2">
<x-inputs.input name="group_entries" type="checkbox" class="h-5 w-5" value="1" checked />
<x-inputs.label for="groupEntries" value="Group entries by day and meal" />
<x-inputs.input type="checkbox" name="group_entries" value="1" checked />
</fieldset>
<x-inputs.button x-on:click="removeTemplate($el);">Add entries</x-inputs.button>
</div>
</div>
</form>
@if(config('scout.driver') === 'algolia')
<x-search-by-algolia />
@endif
@once
@push('scripts')

View File

@ -34,7 +34,7 @@
<x-slot name="content">
<div class="ml-3">
<div class="font-medium text-base text-gray-800">{{ Auth::user()->name }}</div>
<div class="font-medium text-sm text-gray-500">{{ Auth::user()->email }}</div>
<div class="font-medium text-sm text-gray-500">{{ Auth::user()->username }}</div>
</div>
<div class="mt-3 space-y-1">

View File

@ -182,6 +182,9 @@
</x-inputs.button>
</div>
</form>
@if(config('scout.driver') === 'algolia')
<x-search-by-algolia />
@endif
@once
@push('styles')

View File

@ -21,7 +21,7 @@ class AuthenticationTest extends TestCase
{
$user = User::factory()->create();
$response = $this->post('/login', [
'email' => $user->email,
'username' => $user->username,
'password' => 'password',
]);
$this->assertAuthenticated();
@ -32,7 +32,7 @@ class AuthenticationTest extends TestCase
{
$user = User::factory()->create();
$this->post('/login', [
'email' => $user->email,
'username' => $user->username,
'password' => 'wrong-password',
]);
$this->assertGuest();

View File

@ -1,44 +0,0 @@
<?php
namespace Tests\Feature\Http\Controllers\Auth;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class PasswordConfirmationTest extends TestCase
{
use RefreshDatabase;
public function testConfirmPasswordScreenCanBeRendered()
{
$user = User::factory()->create();
$response = $this->actingAs($user)->get('/confirm-password');
$response->assertStatus(200);
}
public function testPasswordCanBeConfirmed()
{
$user = User::factory()->create();
$response = $this->actingAs($user)->post('/confirm-password', [
'password' => 'password',
]);
$response->assertRedirect();
$response->assertSessionHasNoErrors();
}
public function testPasswordIsNotConfirmedWithInvalidPassword()
{
$user = User::factory()->create();
$response = $this->actingAs($user)->post('/confirm-password', [
'password' => 'wrong-password',
]);
$response->assertSessionHasErrors();
}
}

View File

@ -1,71 +0,0 @@
<?php
namespace Tests\Feature\Http\Controllers\Auth;
use App\Models\User;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Notification;
use Tests\TestCase;
class PasswordResetTest extends TestCase
{
use RefreshDatabase;
public function testResetPasswordLinkScreenCanBeRendered()
{
$response = $this->get('/forgot-password');
$response->assertStatus(200);
}
public function testResetPasswordLinkCanBeRequested()
{
Notification::fake();
$user = User::factory()->create();
$this->post('/forgot-password', ['email' => $user->email]);
Notification::assertSentTo($user, ResetPassword::class);
}
public function testResetPasswordScreenCanBeRendered()
{
Notification::fake();
$user = User::factory()->create();
$this->post('/forgot-password', ['email' => $user->email]);
Notification::assertSentTo($user, ResetPassword::class, function ($notification) {
$response = $this->get('/reset-password/'.$notification->token);
$response->assertStatus(200);
return true;
});
}
public function testPasswordCanBeResetWithValidToken()
{
Notification::fake();
$user = User::factory()->create();
$this->post('/forgot-password', ['email' => $user->email]);
Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
$response = $this->post('/reset-password', [
'token' => $notification->token,
'email' => $user->email,
'password' => 'password',
'password_confirmation' => 'password',
]);
$response->assertSessionHasNoErrors();
return true;
});
}
}

View File

@ -15,7 +15,7 @@ trait LogsIn
{
$this->user = User::factory()->create();
$this->post('/login', [
'email' => $this->user->email,
'username' => $this->user->username,
'password' => 'password',
]);
}