Completed
Push — master ( b6d2bb...2d22de )
by Sherif
05:28
created

ApiConsumer::delete()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php namespace App\Modules\Core\Utl;
2
3
use Illuminate\Foundation\Application;
4
use Illuminate\Http\Request;
5
use Illuminate\Routing\Router as LaravelRouter;
6
7
class ApiConsumer
8
{
9
10
    private $app;
11
12
    private $router;
13
14
    private $request;
15
16
    private $disableMiddleware = false;
17
18
    /**
19
     * @param \Illuminate\Foundation\Application $app
20
     * @param \Illuminate\Http\Request $request,
0 ignored issues
show
Documentation introduced by
There is no parameter named $request,. Did you maybe mean $request?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

Loading history...
21
     * @param \Illuminate\Routing\Router $router
22
     */
23
    public function __construct(Application $app, Request $request, LaravelRouter $router)
0 ignored issues
show
Bug introduced by
You have injected the Request via parameter $request. This is generally not recommended as there might be multiple instances during a request cycle (f.e. when using sub-requests). Instead, it is recommended to inject the RequestStack and retrieve the current request each time you need it via getCurrentRequest().
Loading history...
24
    {
25
        $this->app = $app;
26
        $this->request = $request;
27
        $this->router = $router;
28
    }
29
30
    /**
31
     * @param  string $uri
0 ignored issues
show
Bug introduced by
There is no parameter named $uri. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
32
     * @param  array  $data
0 ignored issues
show
Bug introduced by
There is no parameter named $data. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
33
     * @param  array  $headers
0 ignored issues
show
Bug introduced by
There is no parameter named $headers. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
34
     * @param  string $content
0 ignored issues
show
Bug introduced by
There is no parameter named $content. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
35
     * @return \Illuminate\Http\Response
36
     */
37
    public function get()
38
    {
39
        return $this->quickCall('GET', func_get_args());
40
    }
41
42
    /**
43
     * @param  string $uri
0 ignored issues
show
Bug introduced by
There is no parameter named $uri. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
44
     * @param  array  $data
0 ignored issues
show
Bug introduced by
There is no parameter named $data. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
45
     * @param  array  $headers
0 ignored issues
show
Bug introduced by
There is no parameter named $headers. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
46
     * @param  string $content
0 ignored issues
show
Bug introduced by
There is no parameter named $content. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
47
     * @return \Illuminate\Http\Response
48
     */
49
    public function post()
50
    {
51
        return $this->quickCall('POST', func_get_args());
52
    }
53
54
    /**
55
     * @param  string $uri
0 ignored issues
show
Bug introduced by
There is no parameter named $uri. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
56
     * @param  array  $data
0 ignored issues
show
Bug introduced by
There is no parameter named $data. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
57
     * @param  array  $headers
0 ignored issues
show
Bug introduced by
There is no parameter named $headers. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
58
     * @param  string $content
0 ignored issues
show
Bug introduced by
There is no parameter named $content. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
59
     * @return \Illuminate\Http\Response
60
     */
61
    public function put()
62
    {
63
        return $this->quickCall('PUT', func_get_args());
64
    }
65
66
    /**
67
     * @param  string $uri
0 ignored issues
show
Bug introduced by
There is no parameter named $uri. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
68
     * @param  array  $data
0 ignored issues
show
Bug introduced by
There is no parameter named $data. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
69
     * @param  array  $headers
0 ignored issues
show
Bug introduced by
There is no parameter named $headers. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
70
     * @param  string $content
0 ignored issues
show
Bug introduced by
There is no parameter named $content. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
71
     * @return \Illuminate\Http\Response
72
     */
73
    public function delete()
74
    {
75
        return $this->quickCall('DELETE', func_get_args());
76
    }
77
78
    /**
79
     * @param  array $requests An array of requests
80
     * @return array
81
     */
82
    public function batchRequest(array $requests)
83
    {
84
        foreach ($requests as $i => $request) {
85
            $requests[$i] = call_user_func_array([$this, 'singleRequest'], $request);
86
        }
87
88
        return $requests;
89
    }
90
91
    /**
92
     * @param  string $method
93
     * @param  array  $args
94
     * @return \Illuminate\Http\Response
95
     */
96
    public function quickCall($method, array $args)
97
    {
98
        array_unshift($args, $method);
99
        return call_user_func_array([$this, "singleRequest"], $args);
100
    }
101
102
    /**
103
     * @param  string $method
104
     * @param  string $uri
105
     * @param  array  $data
106
     * @param  array  $headers
107
     * @param  string $content
108
     * @return \Illuminate\Http\Response
109
     */
110
    public function singleRequest($method, $uri, array $data = [], array $headers = [], $content = null)
111
    {
112
        // Save the current request so we can reset the router back to it
113
        // after we've completed our internal request.
114
        $currentRequest = $this->request->instance()->duplicate();
115
116
        $headers = $this->overrideHeaders($currentRequest->server->getHeaders(), $headers);
117
118
        if ($this->disableMiddleware) {
119
            $this->app->instance('middleware.disable', true);
120
        }
121
122
        $response = $this->request($method, $uri, $data, $headers, $content);
123
124
        if ($this->disableMiddleware) {
125
            $this->app->instance('middleware.disable', false);
126
        }
127
128
        // Once the request has completed we reset the currentRequest of the router
129
        // to match the original request.
130
        $this->request->instance()->initialize(
131
            $currentRequest->query->all(),
132
            $currentRequest->request->all(),
133
            $currentRequest->attributes->all(),
134
            $currentRequest->cookies->all(),
135
            $currentRequest->files->all(),
136
            $currentRequest->server->all(),
137
            $currentRequest->content
0 ignored issues
show
Security Bug introduced by
It seems like $currentRequest->content can also be of type false; however, Symfony\Component\HttpFo...n\Request::initialize() does only seem to accept string|resource|null, did you maybe forget to handle an error condition?
Loading history...
138
        );
139
140
        return $response;
141
    }
142
143
    private function overrideHeaders(array $default, array $headers)
144
    {
145
        $headers = $this->transformHeadersToUppercaseUnderscoreType($headers);
146
        return array_merge($default, $headers);
147
    }
148
149
    public function enableMiddleware()
150
    {
151
        $this->disableMiddleware = false;
152
    }
153
154
    public function disableMiddleware()
155
    {
156
        $this->disableMiddleware = true;
157
    }
158
159
    /**
160
     * @param  string $method
161
     * @param  string $uri
162
     * @param  array  $data
163
     * @param  array  $headers
164
     * @param  string $content
165
     * @return \Illuminate\Http\Response
166
     */
167
    private function request($method, $uri, array $data = [], array $headers = [], $content = null)
168
    {
169
        // Create a new request object for the internal request
170
        $request = $this->createRequest($method, $uri, $data, $headers, $content);
171
172
        // Handle the request in the kernel and prepare a response
173
        $response = $this->router->prepareResponse($request, $this->app->handle($request));
174
175
        return $response;
176
    }
177
178
    /**
179
     * @param  string $method
180
     * @param  string $uri
181
     * @param  array  $data
182
     * @param  array  $headers
183
     * @param  string $content
184
     * @return \Illuminate\Http\Request
185
     */
186
    private function createRequest($method, $uri, array $data = [], array $headers = [], $content = null)
187
    {
188
        $server = $this->transformHeadersToServerVariables($headers);
189
190
        return $this->request->create($uri, $method, $data, [], [], $server, $content);
191
    }
192
193
    private function transformHeadersToUppercaseUnderscoreType($headers)
194
    {
195
        $transformed = [];
196
197
        foreach ($headers as $headerType => $headerValue) {
198
            $headerType = strtoupper(str_replace('-', '_', $headerType));
199
200
            $transformed[$headerType] = $headerValue;
201
        }
202
203
        return $transformed;
204
    }
205
206
    /**
207
     * https://github.com/symfony/symfony/issues/5074
208
     *
209
     * @param  array $headers
210
     * @return array
211
     */
212
    private function transformHeadersToServerVariables($headers)
213
    {
214
        $server = [];
215
216
        foreach ($headers as $headerType => $headerValue) {
217
            $headerType = 'HTTP_' . $headerType;
218
219
            $server[$headerType] = $headerValue;
220
        }
221
222
        return $server;
223
    }
224
}
225