Completed
Push — ghaction ( 43957e...7bbf38 )
by Andreas
02:52
created

Headers::contentSecurityPolicy()   A

Complexity

Conditions 5
Paths 9

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
nc 9
nop 1
dl 0
loc 22
rs 9.2568
c 0
b 0
f 0
1
<?php
2
3
namespace dokuwiki\HTTP;
4
5
/**
6
 * Utilities to send HTTP Headers
7
 */
8
class Headers
9
{
10
    /**
11
     * Send a Content-Security-Polica Header
12
     *
13
     * Expects an associative array with individual policies and their values
14
     *
15
     * @param array $policy
16
     */
17
    static public function contentSecurityPolicy($policy)
18
    {
19
        foreach ($policy as $key => $values) {
20
            // if the value is not an array, we also accept newline terminated strings
21
            if (!is_array($values)) $values = explode("\n", $values);
22
            $values = array_map('trim', $values);
23
            $values = array_unique($values);
24
            $values = array_filter($values);
25
            $policy[$key] = $values;
26
        }
27
28
        $cspheader = 'Content-Security-Policy:';
29
        foreach ($policy as $key => $values) {
30
            if ($values) {
31
                $cspheader .= " $key " . join(' ', $values) . ';';
32
            } else {
33
                $cspheader .= " $key;";
34
            }
35
        }
36
37
        header($cspheader);
38
    }
39
}
40