forked from oneduo/laravel-cloudfront-cookies
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCloudfrontSignedCookiesMiddleware.php
More file actions
63 lines (47 loc) · 1.84 KB
/
CloudfrontSignedCookiesMiddleware.php
File metadata and controls
63 lines (47 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
declare(strict_types=1);
namespace Creacoon\LaravelCloudfrontCookies\Http\Middleware;
use Carbon\CarbonInterval;
use Closure;
use Creacoon\LaravelCloudfrontCookies\Facades\LaravelCloudfrontCookies;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;
class CloudfrontSignedCookiesMiddleware
{
public function handle(Request $request, Closure $next)
{
$cookies = collect(static::cookieNames());
$shouldNotSign = ! config('cloudfront-cookies.resource') ||
! config('cloudfront-cookies.key_pair_id') ||
! config('cloudfront-cookies.private_key_path') ||
$cookies->every(function ($cookie) use ($request) {
return $request->hasCookie($cookie);
});
if ($shouldNotSign) {
return $next($request);
}
$resource = config('cloudfront-cookies.resource');
$intervalValue = config('cloudfront-cookies.cookies_expiration.value');
$intervalUnit = config('cloudfront-cookies.cookies_expiration.unit');
$interval = CarbonInterval::fromString($intervalValue.$intervalUnit);
$expiration = now()->add($interval);
$cookies = LaravelCloudfrontCookies::resource($resource)
->expiresAt($expiration)
->policy()
->get();
$host = config('cloudfront-cookies-cookies.cookie_domain');
collect($cookies)->each(function (string $value, string $name) use ($host, $interval) {
$cookie = Cookie::make($name, $value, minutes: (int) $interval->totalMinutes, domain: $host);
Cookie::queue($cookie);
});
return $next($request);
}
public static function cookieNames(): array
{
return [
'CloudFront-Policy',
'CloudFront-Key-Pair-Id',
'CloudFront-Signature',
];
}
}