CSPViolationsReport   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Importance

Changes 8
Bugs 1 Features 0
Metric Value
eloc 37
c 8
b 1
f 0
dl 0
loc 69
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A sourceRecords() 0 3 1
A description() 0 9 1
A title() 0 3 1
A getReportField() 0 38 1
1
<?php
2
3
namespace Signify\Reports;
4
5
use SilverStripe\Reports\Report;
6
use Signify\Models\CSPViolation;
7
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
8
use Signify\Forms\GridField\GridFieldDeleteRelationsButton;
9
use SilverStripe\View\Requirements;
10
use SilverStripe\Forms\DropdownField;
11
use SilverStripe\Forms\NumericField;
12
use SilverStripe\Forms\TextField;
13
use SilverStripe\Forms\DatetimeField;
14
use SilverStripe\Forms\ListboxField;
15
16
class CSPViolationsReport extends Report
17
{
18
19
    /**
20
     * The number of reports that can be loaded simultaneously when deleting.
21
     *
22
     * @var integer
23
     */
24
    private static $deletion_batch_size = 50;
0 ignored issues
show
introduced by
The private property $deletion_batch_size is not used, and could be removed.
Loading history...
25
26
    public function title()
27
    {
28
        return _t(__CLASS__ . '.TITLE', 'CSP violations');
29
    }
30
31
    public function description()
32
    {
33
        $desc = _t(
34
            __CLASS__ . '.DESCRIPTION',
35
            'Lists violations caught by the Content Security Policy.'
36
            . ' For more details see <a href="{url}" target="_blank">the MDN documentation</a>.',
37
            ['url' => 'https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP#Violation_report_syntax']
38
        );
39
        return str_replace('</a>', ' <span class="font-icon-external-link"></span></a>', $desc);
40
    }
41
42
    public function sourceRecords($params = [], $sort = null, $limit = null)
43
    {
44
        return CSPViolation::get();
45
    }
46
47
    public function getReportField()
48
    {
49
        Requirements::css('signify-nz/silverstripe-security-headers:client/dist/main.css');
50
        /* @var $gridConfig \SilverStripe\Forms\GridField\GridFieldConfig */
51
        $gridField = parent::getReportField();
52
        $gridConfig = $gridField->getConfig();
53
54
        $dispositions = CSPViolation::get()->columnUnique('Disposition');
55
        $dispositions = array_combine($dispositions, $dispositions);
56
        $directives = CSPViolation::get()->columnUnique('EffectiveDirective');
57
        $directives = array_combine($directives, $directives);
58
59
        $gridConfig->addComponents([
60
            new GridFieldDeleteAction(),
61
            GridFieldDeleteRelationsButton::create('buttons-before-left')
62
            ->setFilterFields([
63
                DatetimeField::create('ReportedTime'),
64
                DropdownField::create('Disposition', 'Disposition', $dispositions),
65
                TextField::create('BlockedURI'),
66
                ListboxField::create('EffectiveDirective', 'EffectiveDirective', $directives),
67
                NumericField::create('Violations', '# Violations'),
68
                TextField::create('Documents.URI', 'Document URIs'),
69
            ])
70
            ->setFilterOptions([
71
                'ReportedTime' => GridFieldDeleteRelationsButton::NUMBER_DATE_FILTER_OPTIONS,
72
                'Disposition' => [
73
                    'ExactMatch',
74
                ],
75
                'BlockedURI' => GridFieldDeleteRelationsButton::STRING_FILTER_OPTIONS,
76
                'EffectiveDirective' => [
77
                    'ExactMatch',
78
                ],
79
                'Violations' => GridFieldDeleteRelationsButton::NUMBER_DATE_FILTER_OPTIONS,
80
                'Documents.URI' => GridFieldDeleteRelationsButton::STRING_FILTER_OPTIONS,
81
            ]),
82
        ]);
83
84
        return $gridField;
85
    }
86
}
87