HmacSignature::generateParams()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nc 1
nop 1
dl 0
loc 10
rs 10
c 0
b 0
f 0
1
<?php
2
namespace CodeCloud\Bundle\ShopifyBundle\Security;
3
4
class HmacSignature
5
{
6
    /**
7
     * @var string
8
     */
9
    private $sharedSecret;
10
11
    /**
12
     * @param string $sharedSecret
13
     */
14
    public function __construct(string $sharedSecret)
15
    {
16
        $this->sharedSecret = $sharedSecret;
17
    }
18
19
    /**
20
     * Check if the signature is correct
21
     * @param string $signature
22
     * @param array $params
23
     * @return bool
24
     */
25
    public function isValid($signature, array $params)
26
    {
27
        return $this->generateHmac($params) === $signature;
28
    }
29
30
    /**
31
     * Generate parameters to be used to authenticate subsequent requests
32
     * @param string $storeName
33
     * @return array
34
     */
35
    public function generateParams($storeName)
36
    {
37
        $timestamp = time();
38
39
        return array(
40
            'shop'      => (string)$storeName,
41
            'timestamp' => $timestamp,
42
            'hmac' => $this->generateHmac(array(
43
                'shop'      => (string)$storeName,
44
                'timestamp' => $timestamp
45
            ))
46
        );
47
    }
48
49
    /**
50
     * @param array $params
51
     * @return string
52
     */
53
    private function generateHmac($params)
54
    {
55
        $signatureParts = array();
56
57
        foreach ($params as $key => $value) {
58
            if (in_array($key, array('signature', 'hmac'))) {
59
                continue;
60
            }
61
62
            $signatureParts[] = $key . '=' . $value;
63
        }
64
65
        natsort($signatureParts);
66
67
        return hash_hmac('sha256', implode('&', $signatureParts), $this->sharedSecret);
68
    }
69
}
70