Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 148 | Details | Vergleich mit vorheriger | 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
 
1663 lars 22
        return (new Pipeline(app()))->send($request)->through(
23
            static::fromFrontend($request) ? $this->frontendMiddleware() : []
24
        )->then(function ($request) use ($next) {
148 lars 25
            return $next($request);
26
        });
27
    }
28
 
29
    /**
30
     * Configure secure cookie sessions.
31
     *
32
     * @return void
33
     */
34
    protected function configureSecureCookieSessions()
35
    {
36
        config([
37
            'session.http_only' => true,
38
            'session.same_site' => 'lax',
39
        ]);
40
    }
41
 
42
    /**
1663 lars 43
     * Get the middleware that should be applied to requests from the "frontend".
44
     *
45
     * @return array
46
     */
47
    protected function frontendMiddleware()
48
    {
49
        $middleware = array_values(array_filter(array_unique([
50
            config('sanctum.middleware.encrypt_cookies', \Illuminate\Cookie\Middleware\EncryptCookies::class),
51
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
52
            \Illuminate\Session\Middleware\StartSession::class,
53
            config('sanctum.middleware.validate_csrf_token'),
54
            config('sanctum.middleware.verify_csrf_token', \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class),
55
        ])));
56
 
57
        array_unshift($middleware, function ($request, $next) {
58
            $request->attributes->set('sanctum', true);
59
 
60
            return $next($request);
61
        });
62
 
63
        return $middleware;
64
    }
65
 
66
    /**
148 lars 67
     * Determine if the given request is from the first-party application frontend.
68
     *
69
     * @param  \Illuminate\Http\Request  $request
70
     * @return bool
71
     */
72
    public static function fromFrontend($request)
73
    {
74
        $domain = $request->headers->get('referer') ?: $request->headers->get('origin');
75
 
76
        if (is_null($domain)) {
77
            return false;
78
        }
79
 
80
        $domain = Str::replaceFirst('https://', '', $domain);
81
        $domain = Str::replaceFirst('http://', '', $domain);
82
        $domain = Str::endsWith($domain, '/') ? $domain : "{$domain}/";
83
 
84
        $stateful = array_filter(config('sanctum.stateful', []));
85
 
86
        return Str::is(Collection::make($stateful)->map(function ($uri) {
87
            return trim($uri).'/*';
88
        })->all(), $domain);
89
    }
90
}