diff --git a/.env.example b/.env.example index 8e98cb86..c8d4e223 100644 --- a/.env.example +++ b/.env.example @@ -36,3 +36,5 @@ SANCTUM_STATEFUL_DOMAINS=crater.test SESSION_DOMAIN=crater.test TRUSTED_PROXIES="*" + +CRON_JOB_AUTH_TOKEN="" diff --git a/app/Http/Controllers/V1/Webhook/CronJobController.php b/app/Http/Controllers/V1/Webhook/CronJobController.php new file mode 100644 index 00000000..7acd8e68 --- /dev/null +++ b/app/Http/Controllers/V1/Webhook/CronJobController.php @@ -0,0 +1,23 @@ +json(['success' => true]); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 36f04843..def40b1f 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -69,6 +69,7 @@ class Kernel extends HttpKernel 'redirect-if-unauthenticated' => \Crater\Http\Middleware\RedirectIfUnauthorized::class, 'customer-guest' => \Crater\Http\Middleware\CustomerGuest::class, 'company' => \Crater\Http\Middleware\CompanyMiddleware::class, + 'cron-job' => \Crater\Http\Middleware\CronJobMiddleware::class, ]; /** diff --git a/app/Http/Middleware/CronJobMiddleware.php b/app/Http/Middleware/CronJobMiddleware.php new file mode 100644 index 00000000..379b3ab7 --- /dev/null +++ b/app/Http/Middleware/CronJobMiddleware.php @@ -0,0 +1,25 @@ +header('x-authorization-token') && $request->header('x-authorization-token') == config('services.cron_job.auth_token')) { + return $next($request); + } + + return response()->json(['unauthorized'], 401); + } +} diff --git a/config/services.php b/config/services.php index d9b0607f..c9254a8b 100644 --- a/config/services.php +++ b/config/services.php @@ -62,4 +62,7 @@ return [ 'redirect' => env('GITHUB_REDIRECT_URL'), ], + 'cron_job' => [ + 'auth_token' => env('CRON_JOB_AUTH_TOKEN', 0) + ], ]; diff --git a/routes/api.php b/routes/api.php index 6e62f1c2..bd69ad47 100644 --- a/routes/api.php +++ b/routes/api.php @@ -80,6 +80,7 @@ use Crater\Http\Controllers\V1\Installation\FinishController; use Crater\Http\Controllers\V1\Installation\LoginController; use Crater\Http\Controllers\V1\Installation\OnboardingWizardController; use Crater\Http\Controllers\V1\Installation\RequirementsController; +use Crater\Http\Controllers\V1\Webhook\CronJobController; use Illuminate\Support\Facades\Route; /* @@ -437,3 +438,5 @@ Route::prefix('/v1')->group(function () { Route::apiResource('/users', UsersController::class); }); }); + +Route::get('/cron', CronJobController::class)->middleware('cron-job');