Completed
Pull Request — newinternal (#285)
by Simon
07:17 queued 04:17
created

SecurityConfigurationFactory::asCheckUserData()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 9
nc 1
nop 0
dl 0
loc 13
ccs 0
cts 11
cp 0
crap 2
rs 9.4285
c 1
b 0
f 0
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
    public function __construct($forceIdentified)
24
    {
25
        $this->forceIdentified = $forceIdentified;
26
    }
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
    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
    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 View Code Duplication
    public function asPublicPage()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

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.

Loading history...
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
     * Special case for zoom page private data.
126
     *
127
     * This will only return true if you are either a checkuser or a tool admin, taking special note of disabled
128
     * accounts which happen to be check users
129
     *
130
     * @return SecurityConfiguration
131
     */
132 View Code Duplication
    public function asGeneralPrivateDataAccess()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

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.

Loading history...
133
    {
134
        $config = new SecurityConfiguration();
135
        $config
136
            // Basic configuration, admins and check users allowed
137
            ->setAdmin(SecurityConfiguration::ALLOW)
138
            ->setCheckuser(SecurityConfiguration::ALLOW)
139
            // Deny these, even if they were allowed by the above
140
            ->setCommunity(SecurityConfiguration::DENY)
141
            ->setSuspended(SecurityConfiguration::DENY)
142
            ->setDeclined(SecurityConfiguration::DENY)
143
            ->setNew(SecurityConfiguration::DENY);
144
145
        // You must also be identified to access this data
146
        $config->setRequireIdentified($this->forceIdentified);
147
148
        return $config;
149
    }
150
151
    /**
152
     * @category Security-Critical
153
     * @return SecurityConfiguration
154
     */
155
    public function asNone()
156
    {
157
        $config = new SecurityConfiguration();
158
159
        return $config;
160
    }
161
}