Passed
Branch master (fc5382)
by Fabian
03:13
created

AccountResponse   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 9
eloc 34
dl 0
loc 74
ccs 0
cts 32
cp 0
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
B get() 0 38 6
A set() 0 19 3
1
<?php
2
namespace LE_ACME2\Cache;
3
4
use LE_ACME2\Account;
5
use LE_ACME2\Connector;
6
use LE_ACME2\Request;
7
use LE_ACME2\Response;
8
use LE_ACME2\Exception;
9
use LE_ACME2\Utilities;
10
use LE_ACME2\SingletonTrait;
11
12
class AccountResponse extends AbstractKeyValuableCache {
13
14
    use SingletonTrait;
15
16
    private const _FILE = 'CacheResponse';
17
    private const _DEPRECATED_FILE = 'DirectoryNewAccountResponse';
18
19
    private $_responses = [];
20
21
    /**
22
     * @param Account $account
23
     * @return Response\Account\AbstractAccount
24
     * @throws Exception\InvalidResponse
25
     * @throws Exception\RateLimitReached
26
     */
27
    public function get(Account $account): Response\Account\AbstractAccount {
28
29
        $accountIdentifier = $this->_getObjectIdentifier($account);
30
31
        if(array_key_exists($accountIdentifier, $this->_responses)) {
32
            return $this->_responses[ $accountIdentifier ];
33
        }
34
        $this->_responses[ $accountIdentifier ] = null;
35
36
        $cacheFile = $account->getKeyDirectoryPath() . self::_FILE;
37
        $deprecatedCacheFile = $account->getKeyDirectoryPath() . self::_DEPRECATED_FILE;
38
39
        if(file_exists($deprecatedCacheFile) && !file_exists($cacheFile)) {
40
            rename($deprecatedCacheFile, $cacheFile);
41
        }
42
43
        if(file_exists($cacheFile) && filemtime($cacheFile) > strtotime('-7 days')) {
44
45
            $rawResponse = Connector\RawResponse::getFromString(file_get_contents($cacheFile));
46
47
            $response = new Response\Account\Create($rawResponse);
48
49
            $this->_responses[ $accountIdentifier ] = $response;
50
51
            Utilities\Logger::getInstance()->add(
0 ignored issues
show
Bug introduced by
It seems like add() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

51
            Utilities\Logger::getInstance()->/** @scrutinizer ignore-call */ add(
Loading history...
52
                Utilities\Logger::LEVEL_DEBUG,
53
                get_class() . '::' . __FUNCTION__ . ' response from cache'
54
            );
55
56
            return $response;
57
        }
58
59
        $request = new Request\Account\Get($account);
60
        $response = $request->getResponse();
61
62
        $this->set($account, $response);
63
64
        return $response;
65
    }
66
67
    public function set(Account $account, Response\Account\AbstractAccount $response = null) : void {
68
69
        $accountIdentifier = $this->_getObjectIdentifier($account);
70
71
        $filePath = $account->getKeyDirectoryPath() . self::_FILE;
72
73
        if($response === null) {
74
75
            unset($this->_responses[$accountIdentifier]);
76
77
            if(file_exists($filePath)) {
78
                unlink($filePath);
79
            }
80
81
            return;
82
        }
83
84
        $this->_responses[$accountIdentifier] = $response;
85
        file_put_contents($filePath, $response->getRaw()->toString());
86
    }
87
}