Completed
Push — master ( d7d231...3a9895 )
by Nils
06:20
created

FilterExtension::init()   C

Complexity

Conditions 7
Paths 7

Size

Total Lines 22
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 1 Features 1
Metric Value
c 4
b 1
f 1
dl 0
loc 22
rs 6.9811
cc 7
eloc 12
nc 7
nop 2
1
<?php
2
3
namespace whm\Smoke\Extensions\SmokeFilter;
4
5
use phmLabs\Components\Annovent\Event\Event;
6
use whm\Smoke\Http\Response;
7
use whm\Smoke\Yaml\EnvAwareYaml;
8
9
/**
10
 * Class FilterExtension.
11
 *
12
 * @example for filter file
13
 *
14
 * filters:
15
 *   _HttpHeaderSuccessStatus:
16
 *     - http://www.wunderweib.de/tag/
17
 *     - http://www.amilio.de/old-but-mandatory-file/
18
 *     - http://www.amilio.de/images/(.*)
19
 */
20
class FilterExtension
21
{
22
    private $filters = array();
23
24
    public function init($filters = array(), $filterFile = '')
25
    {
26
        if ($filterFile !== '') {
27
            if (!file_exists($filterFile)) {
28
                throw new \RuntimeException('Filter file not found: ' . $filterFile);
29
            }
30
31
            $filterElements = EnvAwareYaml::parse(file_get_contents($filterFile));
32
33
            foreach ($filterElements['filters'] as $rule => $uris) {
34
                foreach ($uris as $uri) {
35
                    $this->filters[] = array('rule' => $rule, 'uri' => $uri);
36
                }
37
            }
38
        } else {
39
            foreach($filters as $rule => $filteredUrls) {
40
                foreach ($filteredUrls as $uri) {
41
                    $this->filters[] = array('rule' => $rule, 'uri' => $uri);
42
                }
43
            }
44
        }
45
    }
46
47
    /**
48
     * @Event("Scanner.CheckResponse.isFiltered")
49
     */
50
    public function isFiltered(Event $event, $ruleName, Response $response)
51
    {
52
        foreach ($this->filters as $filter) {
53
            if ($ruleName === $filter['rule'] && 0 < preg_match('$' . preg_quote($filter['uri']) . '$', (string) $response->getUri())) {
54
                $event->setProcessed();
55
var_dump("hier");
0 ignored issues
show
Security Debugging Code introduced by
var_dump('hier'); looks like debug code. Are you sure you do not want to remove it? This might expose sensitive data.
Loading history...
56
                return true;
57
            }
58
        }
59
60
        return false;
61
    }
62
}
63