Subversion-Projekte lars-tiefland.laravel_shop

Revision

Zur aktuellen Revision | Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Laravel\Sanctum\Http\Middleware;
4
 
5
use Illuminate\Routing\Pipeline;
6
use Illuminate\Support\Collection;
7
use Illuminate\Support\Str;
8
 
9
class EnsureFrontendRequestsAreStateful
10
{
11
    /**
12
     * Handle the incoming requests.
13
     *
14
     * @param  \Illuminate\Http\Request  $request
15
     * @param  callable  $next
16
     * @return \Illuminate\Http\Response
17
     */
18
    public function handle($request, $next)
19
    {
20
        $this->configureSecureCookieSessions();
21
 
22
        return (new Pipeline(app()))->send($request)->through(static::fromFrontend($request) ? [
23
            function ($request, $next) {
24
                $request->attributes->set('sanctum', true);
25
 
26
                return $next($request);
27
            },
28
            config('sanctum.middleware.encrypt_cookies', \Illuminate\Cookie\Middleware\EncryptCookies::class),
29
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
30
            \Illuminate\Session\Middleware\StartSession::class,
31
            config('sanctum.middleware.verify_csrf_token', \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class),
32
        ] : [])->then(function ($request) use ($next) {
33
            return $next($request);
34
        });
35
    }
36
 
37
    /**
38
     * Configure secure cookie sessions.
39
     *
40
     * @return void
41
     */
42
    protected function configureSecureCookieSessions()
43
    {
44
        config([
45
            'session.http_only' => true,
46
            'session.same_site' => 'lax',
47
        ]);
48
    }
49
 
50
    /**
51
     * Determine if the given request is from the first-party application frontend.
52
     *
53
     * @param  \Illuminate\Http\Request  $request
54
     * @return bool
55
     */
56
    public static function fromFrontend($request)
57
    {
58
        $domain = $request->headers->get('referer') ?: $request->headers->get('origin');
59
 
60
        if (is_null($domain)) {
61
            return false;
62
        }
63
 
64
        $domain = Str::replaceFirst('https://', '', $domain);
65
        $domain = Str::replaceFirst('http://', '', $domain);
66
        $domain = Str::endsWith($domain, '/') ? $domain : "{$domain}/";
67
 
68
        $stateful = array_filter(config('sanctum.stateful', []));
69
 
70
        return Str::is(Collection::make($stateful)->map(function ($uri) {
71
            return trim($uri).'/*';
72
        })->all(), $domain);
73
    }
74
}