TokenCreator::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 2
1
<?php
2
3
namespace VideoPublisher\Security;
4
5
use VideoPublisher\Connection\ConnectionInterface;
6
use VideoPublisher\Exception\UnableToCreateHashException;
7
use VideoPublisher\Payload\LoginPayload;
8
use VideoPublisher\Connection\ResponseException;
9
use VideoPublisher\Payload\PayloadFactory;
10
11
/**
12
 * Class TokenCreator.
13
 *
14
 * @author Bart Malestein <[email protected]>
15
 */
16
class TokenCreator
17
{
18
    /**
19
     * @var ConnectionInterface
20
     */
21
    private $connection;
22
23
    /**
24
     * @var PayloadFactory
25
     */
26
    private $payloadFactory;
27
28
    /**
29
     * TokenCreator constructor.
30
     * @param ConnectionInterface $connection
31
     * @param PayloadFactory $payloadFactory
32
     */
33
    public function __construct(ConnectionInterface $connection, PayloadFactory $payloadFactory)
34
    {
35
        $this->connection = $connection;
36
        $this->payloadFactory = $payloadFactory;
37
    }
38
39
    /**
40
     * @param string $consumerKey
41
     * @param string $privateKey
42
     * @return Token
43
     * @throws ResponseException
44
     * @throws UnableToCreateHashException
45
     */
46
    public function requestTokenFromMyIsset($consumerKey, $privateKey)
47
    {
48
        $payload = $this->payloadFactory->post('/api/login');
49
50
        $time = time();
51
        $hash = crypt($time . '' . $privateKey . '' . $consumerKey, '$6$rounds=9001$' . $consumerKey . '$');
52
        if ($hash === '*0' || $hash === '*1') {
53
            throw new UnableToCreateHashException;
54
        }
55
56
        $payload->setHeader('Content-Type', 'application/json');
57
        $payload->setPostData('consumer_key', $consumerKey);
58
        $payload->setPostData('time', $time);
59
        $payload->setPostData('hash', $hash);
60
61
        $response = $this->connection->sendPayload($payload);
62
        $statusCode = $response->getStatusCode();
63
        if ($statusCode >= 200 && $statusCode < 300) {
64
            return new Token($response->getJsonResponse()['token']) ;
65
        } else {
66
            throw new ResponseException($response);
67
        }
68
    }
69
}