Passed
Push — master ( 96a485...3c999b )
by Fran
02:49
created

SRITrait   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Test Coverage

Coverage 93.75%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
c 1
b 0
f 0
dl 0
loc 43
ccs 15
cts 16
cp 0.9375
rs 10
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getSriHash() 0 11 2
A init() 0 7 3
1
<?php
2
namespace PSFS\base\extension\traits;
3
4
use PSFS\base\Cache;
5
use PSFS\base\types\helpers\Inspector;
6
use PSFS\base\types\traits\SingletonTrait;
7
8
defined('CSS_SRI_FILENAME') or define('CSS_SRI_FILENAME', CACHE_DIR . DIRECTORY_SEPARATOR . 'css.sri.json');
9
defined('JS_SRI_FILENAME') or define('JS_SRI_FILENAME', CACHE_DIR . DIRECTORY_SEPARATOR . 'js.sri.json');
10
/**
11
 * Trait SRITrait
12
 * @package PSFS\base\extension\traits
13
 */
14
trait SRITrait {
15
    use SingletonTrait;
16
17
    /**
18
     * @var array
19
     */
20
    protected $sri = [];
21
22
    /**
23
     * @var string
24
     */
25
    protected $sriFilename;
26
27
    /**
28
     * @param string $type
29
     */
30 1
    public function init($type) {
31 1
        $this->sriFilename = $type === 'js' ? JS_SRI_FILENAME : CSS_SRI_FILENAME;
32
        /** @var Cache $cache */
33 1
        $cache = Cache::getInstance();
34 1
        $this->sri = $cache->getDataFromFile($this->sriFilename, Cache::JSON, true);
35 1
        if(empty($this->sri)) {
36 1
            $this->sri = [];
37
        }
38 1
    }
39
40
    /**
41
     * @param $hash
42
     * @param string $type
43
     * @return mixed|string
44
     * @throws \PSFS\base\exception\GeneratorException
45
     */
46 1
    protected function getSriHash($hash, $type = 'js') {
47 1
        if(array_key_exists($hash, $this->sri)) {
48
            $sriHash = $this->sri[$hash];
49
        } else {
50 1
            Inspector::stats('[SRITrait] Generating SRI for ' . $hash, Inspector::SCOPE_DEBUG);
51 1
            $filename = WEB_DIR . DIRECTORY_SEPARATOR . $type . DIRECTORY_SEPARATOR . $hash . '.' . $type;
52 1
            $sriHash = base64_encode(hash("sha384", file_get_contents($filename), true));
53 1
            $this->sri[$hash] = $sriHash;
54 1
            Cache::getInstance()->storeData($this->sriFilename, $this->sri, Cache::JSON, true);
55
        }
56 1
        return $sriHash;
57
    }
58
}