Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Spatie\LaravelIgnition\Http\Controllers;
4
 
5
use Illuminate\Foundation\Validation\ValidatesRequests;
6
use Spatie\Ignition\Contracts\SolutionProviderRepository;
7
use Spatie\LaravelIgnition\Exceptions\CannotExecuteSolutionForNonLocalIp;
8
use Spatie\LaravelIgnition\Http\Requests\ExecuteSolutionRequest;
9
use Spatie\LaravelIgnition\Support\RunnableSolutionsGuard;
10
 
11
class ExecuteSolutionController
12
{
13
    use ValidatesRequests;
14
 
15
    public function __invoke(
16
        ExecuteSolutionRequest $request,
17
        SolutionProviderRepository $solutionProviderRepository
18
    ) {
19
        $this
20
            ->ensureRunnableSolutionsEnabled()
21
            ->ensureLocalRequest();
22
 
23
        $solution = $request->getRunnableSolution();
24
 
25
        $solution->run($request->get('parameters', []));
26
 
27
        return response()->noContent();
28
    }
29
 
30
    public function ensureRunnableSolutionsEnabled(): self
31
    {
32
        // Should already be checked in middleware but we want to be 100% certain.
33
        abort_unless(RunnableSolutionsGuard::check(), 400);
34
 
35
        return $this;
36
    }
37
 
38
    public function ensureLocalRequest(): self
39
    {
40
        $ipIsPublic = filter_var(
41
            request()->ip(),
42
            FILTER_VALIDATE_IP,
43
            FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
44
        );
45
 
46
        if ($ipIsPublic) {
47
            throw CannotExecuteSolutionForNonLocalIp::make();
48
        }
49
 
50
        return $this;
51
    }
52
}