Upgrade framework

This commit is contained in:
2023-11-14 16:54:35 +01:00
parent 1648a5cd42
commit 4fcf6fffcc
10548 changed files with 693138 additions and 466698 deletions

View File

@@ -0,0 +1,52 @@
<?php
namespace Spatie\LaravelIgnition\Http\Controllers;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Spatie\Ignition\Contracts\SolutionProviderRepository;
use Spatie\LaravelIgnition\Exceptions\CannotExecuteSolutionForNonLocalIp;
use Spatie\LaravelIgnition\Http\Requests\ExecuteSolutionRequest;
use Spatie\LaravelIgnition\Support\RunnableSolutionsGuard;
class ExecuteSolutionController
{
use ValidatesRequests;
public function __invoke(
ExecuteSolutionRequest $request,
SolutionProviderRepository $solutionProviderRepository
) {
$this
->ensureRunnableSolutionsEnabled()
->ensureLocalRequest();
$solution = $request->getRunnableSolution();
$solution->run($request->get('parameters', []));
return response()->noContent();
}
public function ensureRunnableSolutionsEnabled(): self
{
// Should already be checked in middleware but we want to be 100% certain.
abort_unless(RunnableSolutionsGuard::check(), 400);
return $this;
}
public function ensureLocalRequest(): self
{
$ipIsPublic = filter_var(
request()->ip(),
FILTER_VALIDATE_IP,
FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
);
if ($ipIsPublic) {
throw CannotExecuteSolutionForNonLocalIp::make();
}
return $this;
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace Spatie\LaravelIgnition\Http\Controllers;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Str;
class HealthCheckController
{
public function __invoke()
{
return [
'can_execute_commands' => $this->canExecuteCommands(),
];
}
protected function canExecuteCommands(): bool
{
Artisan::call('help', ['--version']);
$output = Artisan::output();
return Str::contains($output, app()->version());
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace Spatie\LaravelIgnition\Http\Controllers;
use Spatie\Ignition\Config\IgnitionConfig;
use Spatie\LaravelIgnition\Http\Requests\UpdateConfigRequest;
class UpdateConfigController
{
public function __invoke(UpdateConfigRequest $request)
{
$result = (new IgnitionConfig())->saveValues($request->validated());
return response()->json($result);
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace Spatie\LaravelIgnition\Http\Middleware;
use Closure;
use Spatie\LaravelIgnition\Support\RunnableSolutionsGuard;
class RunnableSolutionsEnabled
{
public function handle($request, Closure $next)
{
if (! RunnableSolutionsGuard::check()) {
abort(404);
}
return $next($request);
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace Spatie\LaravelIgnition\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Spatie\Ignition\Contracts\RunnableSolution;
use Spatie\Ignition\Contracts\Solution;
use Spatie\Ignition\Contracts\SolutionProviderRepository;
class ExecuteSolutionRequest extends FormRequest
{
public function rules(): array
{
return [
'solution' => 'required',
'parameters' => 'array',
];
}
public function getSolution(): Solution
{
$solution = app(SolutionProviderRepository::class)
->getSolutionForClass($this->get('solution'));
abort_if(is_null($solution), 404, 'Solution could not be found');
return $solution;
}
public function getRunnableSolution(): RunnableSolution
{
$solution = $this->getSolution();
if (! $solution instanceof RunnableSolution) {
abort(404, 'Runnable solution could not be found');
}
return $solution;
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace Spatie\LaravelIgnition\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateConfigRequest extends FormRequest
{
public function rules(): array
{
return [
'theme' => ['required', Rule::in(['light', 'dark', 'auto'])],
'editor' => ['required'],
'hide_solutions' => ['required', 'boolean'],
];
}
}