|
1
|
|
|
<?php |
|
2
|
|
|
/****************************************************************************** |
|
3
|
|
|
* Wikipedia Account Creation Assistance tool * |
|
4
|
|
|
* * |
|
5
|
|
|
* All code in this file is released into the public domain by the ACC * |
|
6
|
|
|
* Development Team. Please see team.json for a list of contributors. * |
|
7
|
|
|
******************************************************************************/ |
|
8
|
|
|
|
|
9
|
|
|
namespace Waca\Security; |
|
10
|
|
|
|
|
11
|
|
|
final class SecurityConfigurationFactory |
|
12
|
|
|
{ |
|
13
|
|
|
/** |
|
14
|
|
|
* @var bool |
|
15
|
|
|
*/ |
|
16
|
|
|
private $forceIdentified; |
|
17
|
|
|
|
|
18
|
|
|
/** |
|
19
|
|
|
* Security constructor. |
|
20
|
|
|
* |
|
21
|
|
|
* @param bool $forceIdentified |
|
22
|
|
|
*/ |
|
23
|
32 |
|
public function __construct($forceIdentified) |
|
24
|
|
|
{ |
|
25
|
32 |
|
$this->forceIdentified = $forceIdentified; |
|
26
|
32 |
|
} |
|
27
|
|
|
|
|
28
|
|
|
/** |
|
29
|
|
|
* Returns a pre-built security configuration for an internal page. |
|
30
|
|
|
* |
|
31
|
|
|
* @category Security-Critical |
|
32
|
|
|
* @return SecurityConfiguration |
|
33
|
|
|
*/ |
|
34
|
|
|
public function asInternalPage() |
|
35
|
|
|
{ |
|
36
|
|
|
$config = new SecurityConfiguration(); |
|
37
|
|
|
$config->setAdmin(SecurityConfiguration::ALLOW) |
|
38
|
|
|
->setUser(SecurityConfiguration::ALLOW); |
|
39
|
|
|
|
|
40
|
|
|
$config->setRequireIdentified($this->forceIdentified); |
|
41
|
|
|
|
|
42
|
|
|
return $config; |
|
43
|
|
|
} |
|
44
|
|
|
|
|
45
|
|
|
/** |
|
46
|
|
|
* Returns a pre-built security configuration for a tool admin only page. |
|
47
|
|
|
* |
|
48
|
|
|
* @category Security-Critical |
|
49
|
|
|
* @return SecurityConfiguration |
|
50
|
|
|
*/ |
|
51
|
|
|
public function asAdminPage() |
|
52
|
|
|
{ |
|
53
|
|
|
$config = new SecurityConfiguration(); |
|
54
|
|
|
$config->setAdmin(SecurityConfiguration::ALLOW); |
|
55
|
|
|
|
|
56
|
|
|
$config->setRequireIdentified($this->forceIdentified); |
|
57
|
|
|
|
|
58
|
|
|
return $config; |
|
59
|
|
|
} |
|
60
|
|
|
|
|
61
|
|
|
/** |
|
62
|
|
|
* Returns a pre-built security configuration for a page accessible to *ALL* logged in users, including suspended |
|
63
|
|
|
* and new users. This probably isn't the setting you want. |
|
64
|
|
|
* |
|
65
|
|
|
* @category Security-Critical |
|
66
|
|
|
* @return SecurityConfiguration |
|
67
|
|
|
*/ |
|
68
|
|
View Code Duplication |
public function asAllLoggedInUsersPage() |
|
|
|
|
|
|
69
|
|
|
{ |
|
70
|
|
|
$config = new SecurityConfiguration(); |
|
71
|
|
|
$config->setAdmin(SecurityConfiguration::ALLOW) |
|
72
|
|
|
->setUser(SecurityConfiguration::ALLOW) |
|
73
|
|
|
->setDeclined(SecurityConfiguration::ALLOW) |
|
74
|
|
|
->setNew(SecurityConfiguration::ALLOW) |
|
75
|
|
|
->setSuspended(SecurityConfiguration::ALLOW); |
|
76
|
|
|
|
|
77
|
|
|
$config->setRequireIdentified($this->forceIdentified); |
|
78
|
|
|
|
|
79
|
|
|
return $config; |
|
80
|
|
|
} |
|
81
|
|
|
|
|
82
|
|
|
/** |
|
83
|
|
|
* @return SecurityConfiguration |
|
84
|
|
|
* @category Security-Critical |
|
85
|
|
|
*/ |
|
86
|
|
View Code Duplication |
public function asCheckUserData() |
|
|
|
|
|
|
87
|
|
|
{ |
|
88
|
|
|
$config = new SecurityConfiguration(); |
|
89
|
|
|
$config->setCheckuser(SecurityConfiguration::ALLOW) |
|
90
|
|
|
->setCommunity(SecurityConfiguration::DENY) |
|
91
|
|
|
->setSuspended(SecurityConfiguration::DENY) |
|
92
|
|
|
->setDeclined(SecurityConfiguration::DENY) |
|
93
|
|
|
->setNew(SecurityConfiguration::DENY); |
|
94
|
|
|
|
|
95
|
|
|
$config->setRequireIdentified($this->forceIdentified); |
|
96
|
|
|
|
|
97
|
|
|
return $config; |
|
98
|
|
|
} |
|
99
|
|
|
|
|
100
|
|
|
/** |
|
101
|
|
|
* Returns a pre-built security configuration for a public page. |
|
102
|
|
|
* |
|
103
|
|
|
* @category Security-Critical |
|
104
|
|
|
* @return SecurityConfiguration |
|
105
|
|
|
*/ |
|
106
|
|
|
public function asPublicPage() |
|
107
|
|
|
{ |
|
108
|
|
|
$config = new SecurityConfiguration(); |
|
109
|
|
|
$config->setAdmin(SecurityConfiguration::ALLOW) |
|
110
|
|
|
->setUser(SecurityConfiguration::ALLOW) |
|
111
|
|
|
->setCheckuser(SecurityConfiguration::ALLOW) |
|
112
|
|
|
->setCommunity(SecurityConfiguration::ALLOW) |
|
113
|
|
|
->setSuspended(SecurityConfiguration::ALLOW) |
|
114
|
|
|
->setDeclined(SecurityConfiguration::ALLOW) |
|
115
|
|
|
->setNew(SecurityConfiguration::ALLOW); |
|
116
|
|
|
|
|
117
|
|
|
// Public pages shouldn't be inaccessible to logged-in, unidentified users. |
|
118
|
|
|
// Otherwise, logged in but unidentified users can't even log out. |
|
119
|
|
|
$config->setRequireIdentified(false); |
|
120
|
|
|
|
|
121
|
|
|
return $config; |
|
122
|
|
|
} |
|
123
|
|
|
|
|
124
|
|
|
/** |
|
125
|
|
|
* @category Security-Critical |
|
126
|
|
|
* @return SecurityConfiguration |
|
127
|
|
|
*/ |
|
128
|
|
|
public function asNone() { |
|
129
|
|
|
$config = new SecurityConfiguration(); |
|
130
|
|
|
|
|
131
|
|
|
return $config; |
|
132
|
|
|
} |
|
133
|
|
|
} |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.