diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
index fea9bfb..4f90117 100644
--- a/app/Exceptions/Handler.php
+++ b/app/Exceptions/Handler.php
@@ -36,6 +36,8 @@ class Handler extends ExceptionHandler
*
* @param Throwable $exception
* @return void
+ *
+ * @throws \Exception
*/
public function report(Throwable $exception)
{
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 77008d5..e78bbbd 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -15,6 +15,7 @@ class Kernel extends HttpKernel
*/
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
+ \Fruitcake\Cors\HandleCors::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
@@ -40,7 +41,7 @@ class Kernel extends HttpKernel
'api' => [
'snake_case',
'throttle:60,1',
- 'bindings',
+ \Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php
index e4cec9c..2395ddc 100644
--- a/app/Http/Middleware/RedirectIfAuthenticated.php
+++ b/app/Http/Middleware/RedirectIfAuthenticated.php
@@ -2,6 +2,7 @@
namespace App\Http\Middleware;
+use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;
@@ -18,7 +19,7 @@ class RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
- return redirect('/home');
+ return redirect(RouteServiceProvider::HOME);
}
return $next($request);
diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php
index 324a166..0c13b85 100644
--- a/app/Http/Middleware/VerifyCsrfToken.php
+++ b/app/Http/Middleware/VerifyCsrfToken.php
@@ -6,13 +6,6 @@
class VerifyCsrfToken extends Middleware
{
- /**
- * Indicates whether the XSRF-TOKEN cookie should be set on the response.
- *
- * @var bool
- */
- protected $addHttpCookie = true;
-
/**
* The URIs that should be excluded from CSRF verification.
*
diff --git a/app/Models/User.php b/app/Models/User.php
index 80dfd47..00267c4 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -49,6 +49,15 @@ class User extends BaseModel implements
'password', 'remember_token', 'email_verified_at', 'primary_role',
];
+ /**
+ * The attributes that should be cast to native types.
+ *
+ * @var array
+ */
+ protected $casts = [
+ 'email_verified_at' => 'datetime',
+ ];
+
/**
* Model's boot function
*/
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 72c3913..9cf354c 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -9,24 +9,24 @@
class AppServiceProvider extends ServiceProvider
{
/**
- * Bootstrap any application services.
+ * Register any application services.
*
* @return void
*/
- public function boot()
+ public function register()
{
- //
+ $this->registerExceptionHandler();
+ $this->registerTelescope();
}
/**
- * Register any application services.
+ * Bootstrap any application services.
*
* @return void
*/
- public function register()
+ public function boot()
{
- $this->registerExceptionHandler();
- $this->registerTelescope();
+ //
}
/**
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index e0bd583..7830505 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -2,6 +2,8 @@
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;
@@ -13,7 +15,9 @@ class EventServiceProvider extends ServiceProvider
* @var array
*/
protected $listen = [
-
+ Registered::class => [
+ // SendEmailVerificationNotification::class,
+ ],
];
/**
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
index 7101879..4968b82 100644
--- a/app/Providers/RouteServiceProvider.php
+++ b/app/Providers/RouteServiceProvider.php
@@ -16,6 +16,13 @@ class RouteServiceProvider extends ServiceProvider
*/
protected $namespace = 'App\Http\Controllers';
+ /**
+ * The path to the "home" route for your application.
+ *
+ * @var string
+ */
+ public const HOME = '/';
+
/**
* Define your route model bindings, pattern filters, etc.
*
@@ -38,6 +45,7 @@ public function map()
{
$this->mapApiRoutes();
+ // Re-enable if you would like to add web routes (eg. non-API routes for things like legacy webhook receivers)
//$this->mapWebRoutes();
}
diff --git a/composer.json b/composer.json
index c3fedf4..c7d486e 100644
--- a/composer.json
+++ b/composer.json
@@ -13,6 +13,8 @@
"require": {
"php": "^7.2.5",
"fideloper/proxy": "^4.2",
+ "fruitcake/laravel-cors": "^1.0",
+ "guzzlehttp/guzzle": "^6.3",
"laravel/framework": "^7.0",
"laravel/tinker": "^2.4",
"specialtactics/l5-api": "^2.0"
@@ -21,11 +23,11 @@
"barryvdh/laravel-ide-helper": "^2.7",
"beyondcode/laravel-dump-server": "^1.4",
"facade/ignition": "^2.0",
- "fzaninotto/faker": "^1.9",
- "laravel/telescope": "^3.3",
- "mockery/mockery": "^1.0",
- "nunomaduro/collision": "^4.2",
- "phpunit/phpunit": "^8.5"
+ "fzaninotto/faker": "^1.9.1",
+ "mockery/mockery": "^1.3.1",
+ "nunomaduro/collision": "^4.1",
+ "phpunit/phpunit": "^8.5",
+ "laravel/telescope": "^3.3"
},
"config": {
"optimize-autoloader": true,
diff --git a/config/app.php b/config/app.php
index c9960cd..8409e00 100644
--- a/config/app.php
+++ b/config/app.php
@@ -39,7 +39,7 @@
|
*/
- 'debug' => env('APP_DEBUG', false),
+ 'debug' => (bool) env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
@@ -207,6 +207,7 @@
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
+ 'Http' => Illuminate\Support\Facades\Http::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
diff --git a/config/auth.php b/config/auth.php
index a999082..3a2555c 100644
--- a/config/auth.php
+++ b/config/auth.php
@@ -97,6 +97,7 @@
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
+ 'throttle' => 60,
],
],
diff --git a/config/cache.php b/config/cache.php
index 46751e6..4f41fdf 100644
--- a/config/cache.php
+++ b/config/cache.php
@@ -39,6 +39,7 @@
'array' => [
'driver' => 'array',
+ 'serialize' => false,
],
'database' => [
diff --git a/config/cors.php b/config/cors.php
new file mode 100644
index 0000000..558369d
--- /dev/null
+++ b/config/cors.php
@@ -0,0 +1,34 @@
+ ['api/*'],
+
+ 'allowed_methods' => ['*'],
+
+ 'allowed_origins' => ['*'],
+
+ 'allowed_origins_patterns' => [],
+
+ 'allowed_headers' => ['*'],
+
+ 'exposed_headers' => [],
+
+ 'max_age' => 0,
+
+ 'supports_credentials' => false,
+
+];
diff --git a/config/database.php b/config/database.php
index 199382d..b42d9b3 100644
--- a/config/database.php
+++ b/config/database.php
@@ -130,16 +130,16 @@
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
- 'port' => env('REDIS_PORT', 6379),
- 'database' => env('REDIS_DB', 0),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
- 'port' => env('REDIS_PORT', 6379),
- 'database' => env('REDIS_CACHE_DB', 1),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_CACHE_DB', '1'),
],
],
diff --git a/config/filesystems.php b/config/filesystems.php
index ec6a7ce..94c8112 100644
--- a/config/filesystems.php
+++ b/config/filesystems.php
@@ -62,8 +62,24 @@
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
+ 'endpoint' => env('AWS_ENDPOINT'),
],
],
+ /*
+ |--------------------------------------------------------------------------
+ | Symbolic Links
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the symbolic links that will be created when the
+ | `storage:link` Artisan command is executed. The array keys should be
+ | the locations of the links and the values should be their targets.
+ |
+ */
+
+ 'links' => [
+ public_path('storage') => storage_path('app/public'),
+ ],
+
];
diff --git a/config/logging.php b/config/logging.php
index 0df8212..088c204 100644
--- a/config/logging.php
+++ b/config/logging.php
@@ -37,7 +37,7 @@
'channels' => [
'stack' => [
'driver' => 'stack',
- 'channels' => ['daily'],
+ 'channels' => ['single'],
'ignore_exceptions' => false,
],
@@ -95,6 +95,10 @@
'driver' => 'monolog',
'handler' => NullHandler::class,
],
+
+ 'emergency' => [
+ 'path' => storage_path('logs/laravel.log'),
+ ],
],
];
diff --git a/config/mail.php b/config/mail.php
index 3c65eb3..5201bb7 100644
--- a/config/mail.php
+++ b/config/mail.php
@@ -4,45 +4,72 @@
/*
|--------------------------------------------------------------------------
- | Mail Driver
+ | Default Mailer
|--------------------------------------------------------------------------
|
- | Laravel supports both SMTP and PHP's "mail" function as drivers for the
- | sending of e-mail. You may specify which one you're using throughout
- | your application here. By default, Laravel is setup for SMTP mail.
- |
- | Supported: "smtp", "sendmail", "mailgun", "ses",
- | "postmark", "log", "array"
+ | This option controls the default mailer that is used to send any email
+ | messages sent by your application. Alternative mailers may be setup
+ | and used as needed; however, this mailer will be used by default.
|
*/
- 'driver' => env('MAIL_DRIVER', 'smtp'),
+ 'default' => env('MAIL_MAILER', 'smtp'),
/*
|--------------------------------------------------------------------------
- | SMTP Host Address
+ | Mailer Configurations
|--------------------------------------------------------------------------
|
- | Here you may provide the host address of the SMTP server used by your
- | applications. A default option is provided that is compatible with
- | the Mailgun mail service which will provide reliable deliveries.
+ | Here you may configure all of the mailers used by your application plus
+ | their respective settings. Several examples have been configured for
+ | you and you are free to add your own as your application requires.
|
- */
-
- 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
-
- /*
- |--------------------------------------------------------------------------
- | SMTP Host Port
- |--------------------------------------------------------------------------
+ | Laravel supports a variety of mail "transport" drivers to be used while
+ | sending an e-mail. You will specify which one you are using for your
+ | mailers below. You are free to add additional mailers as required.
|
- | This is the SMTP port used by your application to deliver e-mails to
- | users of the application. Like the host we have set this value to
- | stay compatible with the Mailgun e-mail application by default.
+ | Supported: "smtp", "sendmail", "mailgun", "ses",
+ | "postmark", "log", "array"
|
*/
- 'port' => env('MAIL_PORT', 587),
+ 'mailers' => [
+ 'smtp' => [
+ 'transport' => 'smtp',
+ 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
+ 'port' => env('MAIL_PORT', 587),
+ 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
+ 'username' => env('MAIL_USERNAME'),
+ 'password' => env('MAIL_PASSWORD'),
+ 'timeout' => null,
+ ],
+
+ 'ses' => [
+ 'transport' => 'ses',
+ ],
+
+ 'mailgun' => [
+ 'transport' => 'mailgun',
+ ],
+
+ 'postmark' => [
+ 'transport' => 'postmark',
+ ],
+
+ 'sendmail' => [
+ 'transport' => 'sendmail',
+ 'path' => '/usr/sbin/sendmail -bs',
+ ],
+
+ 'log' => [
+ 'transport' => 'log',
+ 'channel' => env('MAIL_LOG_CHANNEL'),
+ ],
+
+ 'array' => [
+ 'transport' => 'array',
+ ],
+ ],
/*
|--------------------------------------------------------------------------
@@ -60,47 +87,6 @@
'name' => env('MAIL_FROM_NAME', 'Example'),
],
- /*
- |--------------------------------------------------------------------------
- | E-Mail Encryption Protocol
- |--------------------------------------------------------------------------
- |
- | Here you may specify the encryption protocol that should be used when
- | the application send e-mail messages. A sensible default using the
- | transport layer security protocol should provide great security.
- |
- */
-
- 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
-
- /*
- |--------------------------------------------------------------------------
- | SMTP Server Username
- |--------------------------------------------------------------------------
- |
- | If your SMTP server requires a username for authentication, you should
- | set it here. This will get used to authenticate with your server on
- | connection. You may also set the "password" value below this one.
- |
- */
-
- 'username' => env('MAIL_USERNAME'),
-
- 'password' => env('MAIL_PASSWORD'),
-
- /*
- |--------------------------------------------------------------------------
- | Sendmail System Path
- |--------------------------------------------------------------------------
- |
- | When using the "sendmail" driver to send e-mails, we will need to know
- | the path to where Sendmail lives on this server. A default path has
- | been provided here, which will work well on most of your systems.
- |
- */
-
- 'sendmail' => '/usr/sbin/sendmail -bs',
-
/*
|--------------------------------------------------------------------------
| Markdown Mail Settings
@@ -120,17 +106,4 @@
],
],
- /*
- |--------------------------------------------------------------------------
- | Log Channel
- |--------------------------------------------------------------------------
- |
- | If you are using the "log" driver, you may specify the logging channel
- | if you prefer to keep mail messages separate from other log entries
- | for simpler reading. Otherwise, the default channel will be used.
- |
- */
-
- 'log_channel' => env('MAIL_LOG_CHANNEL'),
-
];
diff --git a/config/queue.php b/config/queue.php
index 3a30d6c..00b76d6 100644
--- a/config/queue.php
+++ b/config/queue.php
@@ -55,6 +55,7 @@
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'your-queue-name'),
+ 'suffix' => env('SQS_SUFFIX'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
diff --git a/config/session.php b/config/session.php
index fbb9b4d..da692f3 100644
--- a/config/session.php
+++ b/config/session.php
@@ -166,7 +166,7 @@
|
*/
- 'secure' => env('SESSION_SECURE_COOKIE', false),
+ 'secure' => env('SESSION_SECURE_COOKIE'),
/*
|--------------------------------------------------------------------------
@@ -188,12 +188,12 @@
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
- | do not enable this as other CSRF protection services are in place.
+ | will set this value to "lax" since this is a secure default value.
|
- | Supported: "lax", "strict"
+ | Supported: "lax", "strict", "none", null
|
*/
- 'same_site' => null,
+ 'same_site' => 'lax',
];
diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php
index 389bdf7..9bddee3 100644
--- a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php
+++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php
@@ -14,7 +14,7 @@ class CreateFailedJobsTable extends Migration
public function up()
{
Schema::create('failed_jobs', function (Blueprint $table) {
- $table->bigIncrements('id');
+ $table->id();
$table->text('connection');
$table->text('queue');
$table->longText('payload');
diff --git a/phpunit.xml b/phpunit.xml
index 7d83ad9..8f37563 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,8 +1,10 @@
-
-
+
+
+
-
+
diff --git a/public/.htaccess b/public/.htaccess
index b75525b..3aec5e2 100644
--- a/public/.htaccess
+++ b/public/.htaccess
@@ -14,7 +14,7 @@
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
- # Handle Front Controller...
+ # Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php
index f3b01a4..2345a56 100644
--- a/resources/lang/en/passwords.php
+++ b/resources/lang/en/passwords.php
@@ -14,8 +14,9 @@
*/
'reset' => 'Your password has been reset!',
- 'sent' => 'We have e-mailed your password reset link!',
+ 'sent' => 'We have emailed your password reset link!',
+ 'throttled' => 'Please wait before retrying.',
'token' => 'This password reset token is invalid.',
- 'user' => "We can't find a user with that e-mail address.",
+ 'user' => "We can't find a user with that email address.",
];
diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php
index ce1d80d..a65914f 100644
--- a/resources/lang/en/validation.php
+++ b/resources/lang/en/validation.php
@@ -40,7 +40,7 @@
'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'email' => 'The :attribute must be a valid email address.',
- 'ends_with' => 'The :attribute must end with one of the following: :values',
+ 'ends_with' => 'The :attribute must end with one of the following: :values.',
'exists' => 'The selected :attribute is invalid.',
'file' => 'The :attribute must be a file.',
'filled' => 'The :attribute field must have a value.',
@@ -110,7 +110,7 @@
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
- 'starts_with' => 'The :attribute must start with one of the following: :values',
+ 'starts_with' => 'The :attribute must start with one of the following: :values.',
'string' => 'The :attribute must be a string.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
diff --git a/routes/channels.php b/routes/channels.php
index f16a20b..963b0d2 100644
--- a/routes/channels.php
+++ b/routes/channels.php
@@ -1,5 +1,7 @@