-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathConfiguration.php
110 lines (90 loc) · 3.15 KB
/
Configuration.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\TrackingSpamPrevention;
use Piwik\Config;
class Configuration
{
public const DEFAULT_RANGE_THROW_EXCEPTION = 0;
public const DEFAULT_RANGE_ALLOW_LIST = [''];
public const DEFAULT_GEOIP_MATCH_PROVIDERS = ['alicloud', 'alibaba cloud', 'digitalocean', 'digital ocean'];
public const KEY_RANGE_THROW_EXCEPTION = 'block_cloud_sync_throw_exception_on_error';
public const KEY_RANGE_ALLOW_LIST = 'iprange_allowlist';
public const KEY_GEOIP_MATCH_PROVIDERS = 'block_geoip_organisations';
public function install()
{
$config = $this->getConfig();
$default = $config->TrackingSpamPrevention;
if (empty($default)) {
$default = array();
}
if (empty($default[self::KEY_RANGE_THROW_EXCEPTION])) {
$default[self::KEY_RANGE_THROW_EXCEPTION] = self::DEFAULT_RANGE_THROW_EXCEPTION;
}
if (empty($default[self::KEY_RANGE_ALLOW_LIST])) {
$default[self::KEY_RANGE_ALLOW_LIST] = self::DEFAULT_RANGE_ALLOW_LIST;
}
if (empty($default[self::KEY_GEOIP_MATCH_PROVIDERS])) {
$default[self::KEY_GEOIP_MATCH_PROVIDERS] = self::DEFAULT_GEOIP_MATCH_PROVIDERS;
}
$config->TrackingSpamPrevention = $default;
$config->forceSave();
}
public function uninstall()
{
$config = $this->getConfig();
$config->TrackingSpamPrevention = array();
$config->forceSave();
}
/**
* @return bool
*/
public function shouldThrowExceptionOnIpRangeSync()
{
$value = $this->getConfigValue(self::KEY_RANGE_THROW_EXCEPTION, self::DEFAULT_RANGE_THROW_EXCEPTION);
if ($value === false || $value === '' || $value === null) {
$value = self::KEY_RANGE_THROW_EXCEPTION;
}
return (bool) $value;
}
/**
* @return array
*/
public function getIpRangesAlwaysAllowed()
{
$value = $this->getConfigValue(self::KEY_RANGE_ALLOW_LIST, self::DEFAULT_RANGE_ALLOW_LIST);
if (empty($value) || !is_array($value)) {
$value = self::DEFAULT_RANGE_ALLOW_LIST;
}
$value = array_values(array_filter($value));
$value = array_map(function ($range) {
if (strpos($range, '/') === false) {
// we assume user did not enter a range so we make it one that matches that one ip
if (strpos($range, '.') !== false) {
$range .= '/32';
} elseif (strpos($range, ':') !== false) {
$range .= '/128';
}
}
return $range;
}, $value);
return $value;
}
private function getConfig()
{
return Config::getInstance();
}
private function getConfigValue($name, $default)
{
$config = $this->getConfig();
$attribution = $config->TrackingSpamPrevention;
if (isset($attribution[$name])) {
return $attribution[$name];
}
return $default;
}
}