Completed
Pull Request — master (#99)
by Kevin
06:07
created

Request::fetch()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Magium\Util\Api;
4
5
use Guzzle\Http\Client;
6
use Guzzle\Http\Message\Response;
7
use QueryAuth\Credentials\Credentials;
8
use QueryAuth\Factory;
9
use QueryAuth\Request\Adapter\Outgoing\GuzzleHttpRequestAdapter;
10
use QueryAuth\Request\Adapter\Outgoing\GuzzleRequestAdapter;
11
12
class Request
13
{
14
15
    protected $apiConfiguration;
16
17
    public function __construct(ApiConfiguration $configuration)
18
    {
19
        $this->apiConfiguration = $configuration;
20
    }
21
22
    protected function doRequest($method, $url, array $payload = null)
23
    {
24
        if ($this->apiConfiguration->getEnabled()) {
25
            if ($payload) {
26
                $payload = ['payload' => json_encode($payload)];
27
            }
28
29
            $url = 'http://' . $this->apiConfiguration->getApiHostname() . $url;
30
31
            $factory = new Factory();
32
            $requestSigner = $factory->newRequestSigner();
33
            $credentials = new Credentials(
34
                $this->apiConfiguration->getKey(),
35
                $this->apiConfiguration->getSecret()
36
            );
37
38
            $guzzle = new Client();
39
            $request = $guzzle->createRequest($method, $url, ['content-type' => 'application/json'], $payload);
40
41
            $requestSigner->signRequest(new GuzzleRequestAdapter($request), $credentials);
42
            $response = $guzzle->send($request);
43
44
            return $response;
45
        }
46
        return null;
47
    }
48
49
    public function getPayload(Response $response)
50
    {
51
        $payload = json_decode($response->getBody(true), true);
52
        return $payload;
53
    }
54
55
    public function push($url, array $data = null)
56
    {
57
        return $this->doRequest('POST', $url, $data);
58
    }
59
60
    public function fetch($url)
61
    {
62
        return $this->doRequest('GET', $url);
63
    }
64
}