Completed
Push — master ( 61259d...5f4fd2 )
by Vagner Luz do
05:09 queued 02:47
created

CorsMiddleware::handle()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 2
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Vluzrmos\LumenCors;
4
5
use Closure;
6
use Illuminate\Http\Request;
7
use Illuminate\Http\Response;
8
9
/**
10
 * Class CorsMiddleware.
11
 */
12
class CorsMiddleware
13
{
14
    /**
15
     * LumenCors Service.
16
     * @var CorsService
17
     */
18
    private $cors;
19
20
    /**
21
     * A middleware to handle Cors Preflighted Requests.
22
     * @param \Vluzrmos\LumenCors\CorsService $cors
23
     */
24
    public function __construct(CorsService $cors)
25
    {
26
        $this->cors = $cors;
27
    }
28
29
    /**
30
     * Handle an incoming request.
31
     * @param  \Illuminate\Http\Request $request
32
     * @param  \Closure                 $next
33
     * @return mixed
34
     */
35
    public function handle(Request $request, Closure $next)
36
    {
37
        $this->setTrustedProxiesForRequest($request);
38
39
        if ($this->cors->isPreflightRequest($request)) {
40
            return $this->cors->setCorsHeaders(new Response('OK'), $request);
41
        }
42
43
        $response = $next($request);
44
45
        return $this->cors->setCorsHeaders($response, $request);
46
    }
47
48
    /**
49
     * Set trusted proxies for the request.
50
     * @param \Illuminate\Http\Request $request
51
     */
52
    public function setTrustedProxiesForRequest(Request $request)
53
    {
54
        if (empty($request->getTrustedProxies())) {
55
            $args = [$request->getClientIps()];
56
            
57
            if (defined('\Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL')) {
58
                array_push($args, Request::HEADER_X_FORWARDED_ALL);
59
            }
60
                
61
            call_user_func_array([$request, 'setTrustedProxies'], $args);
62
        }
63
    }
64
65
    /**
66
     * Get the instance of Cors Service.
67
     * @return \Vluzrmos\LumenCors\CorsService
68
     */
69
    public function getCorsService()
70
    {
71
        return $this->cors;
72
    }
73
}
74