Failed Conditions
Pull Request — oauthcreation (#531)
by Simon
18:38 queued 08:37
created
includes/Pages/UserAuth/PageOAuthCallback.php 1 patch
Indentation   +75 added lines, -75 removed lines patch added patch discarded remove patch
@@ -17,90 +17,90 @@
 block discarded – undo
17 17
 
18 18
 class PageOAuthCallback extends InternalPageBase
19 19
 {
20
-    /**
21
-     * @return bool
22
-     */
23
-    protected function isProtectedPage()
24
-    {
25
-        // This page is critical to ensuring OAuth functionality is operational.
26
-        return false;
27
-    }
20
+	/**
21
+	 * @return bool
22
+	 */
23
+	protected function isProtectedPage()
24
+	{
25
+		// This page is critical to ensuring OAuth functionality is operational.
26
+		return false;
27
+	}
28 28
 
29
-    /**
30
-     * Main function for this page, when no specific actions are called.
31
-     * @return void
32
-     */
33
-    protected function main()
34
-    {
35
-        // This should never get hit except by URL manipulation.
36
-        $this->redirect('');
37
-    }
29
+	/**
30
+	 * Main function for this page, when no specific actions are called.
31
+	 * @return void
32
+	 */
33
+	protected function main()
34
+	{
35
+		// This should never get hit except by URL manipulation.
36
+		$this->redirect('');
37
+	}
38 38
 
39
-    /**
40
-     * Registered endpoint for the account creation callback.
41
-     *
42
-     * If this ever gets hit, something is wrong somewhere.
43
-     */
44
-    protected function create()
45
-    {
46
-        throw new Exception('OAuth account creation endpoint triggered.');
47
-    }
39
+	/**
40
+	 * Registered endpoint for the account creation callback.
41
+	 *
42
+	 * If this ever gets hit, something is wrong somewhere.
43
+	 */
44
+	protected function create()
45
+	{
46
+		throw new Exception('OAuth account creation endpoint triggered.');
47
+	}
48 48
 
49
-    /**
50
-     * Callback entry point
51
-     */
52
-    protected function authorise()
53
-    {
54
-        $oauthToken = WebRequest::getString('oauth_token');
55
-        $oauthVerifier = WebRequest::getString('oauth_verifier');
49
+	/**
50
+	 * Callback entry point
51
+	 */
52
+	protected function authorise()
53
+	{
54
+		$oauthToken = WebRequest::getString('oauth_token');
55
+		$oauthVerifier = WebRequest::getString('oauth_verifier');
56 56
 
57
-        $this->doCallbackValidation($oauthToken, $oauthVerifier);
57
+		$this->doCallbackValidation($oauthToken, $oauthVerifier);
58 58
 
59
-        $database = $this->getDatabase();
59
+		$database = $this->getDatabase();
60 60
 
61
-        $user = OAuthUserHelper::findUserByRequestToken($oauthToken, $database);
62
-        $oauth = new OAuthUserHelper($user, $database, $this->getOAuthProtocolHelper(), $this->getSiteConfiguration());
61
+		$user = OAuthUserHelper::findUserByRequestToken($oauthToken, $database);
62
+		$oauth = new OAuthUserHelper($user, $database, $this->getOAuthProtocolHelper(), $this->getSiteConfiguration());
63 63
 
64
-        try {
65
-            $oauth->completeHandshake($oauthVerifier);
66
-        }
67
-        catch (CurlException $ex) {
68
-            throw new ApplicationLogicException($ex->getMessage(), 0, $ex);
69
-        }
64
+		try {
65
+			$oauth->completeHandshake($oauthVerifier);
66
+		}
67
+		catch (CurlException $ex) {
68
+			throw new ApplicationLogicException($ex->getMessage(), 0, $ex);
69
+		}
70 70
 
71
-        // OK, we're the same session that just did a partial login that was redirected to OAuth. Let's upgrade the
72
-        // login to a full login
73
-        if (WebRequest::getOAuthPartialLogin() === $user->getId()) {
74
-            WebRequest::setLoggedInUser($user);
75
-        }
71
+		// OK, we're the same session that just did a partial login that was redirected to OAuth. Let's upgrade the
72
+		// login to a full login
73
+		if (WebRequest::getOAuthPartialLogin() === $user->getId()) {
74
+			WebRequest::setLoggedInUser($user);
75
+		}
76 76
 
77
-        // My thinking is there are three cases here:
78
-        //   a) new user => redirect to prefs - it's the only thing they can access other than stats
79
-        //   b) existing user hit the connect button in prefs => redirect to prefs since it's where they were
80
-        //   c) existing user logging in => redirect to wherever they came from
81
-        $redirectDestination = WebRequest::clearPostLoginRedirect();
82
-        if ($redirectDestination !== null && !$user->isNewUser()) {
83
-            $this->redirectUrl($redirectDestination);
84
-        }
85
-        else {
86
-            $this->redirect('preferences', null, null, 'internal.php');
87
-        }
88
-    }
77
+		// My thinking is there are three cases here:
78
+		//   a) new user => redirect to prefs - it's the only thing they can access other than stats
79
+		//   b) existing user hit the connect button in prefs => redirect to prefs since it's where they were
80
+		//   c) existing user logging in => redirect to wherever they came from
81
+		$redirectDestination = WebRequest::clearPostLoginRedirect();
82
+		if ($redirectDestination !== null && !$user->isNewUser()) {
83
+			$this->redirectUrl($redirectDestination);
84
+		}
85
+		else {
86
+			$this->redirect('preferences', null, null, 'internal.php');
87
+		}
88
+	}
89 89
 
90
-    /**
91
-     * @param string $oauthToken
92
-     * @param string $oauthVerifier
93
-     *
94
-     * @throws ApplicationLogicException
95
-     */
96
-    private function doCallbackValidation($oauthToken, $oauthVerifier)
97
-    {
98
-        if ($oauthToken === null) {
99
-            throw new ApplicationLogicException('No token provided');
100
-        }
90
+	/**
91
+	 * @param string $oauthToken
92
+	 * @param string $oauthVerifier
93
+	 *
94
+	 * @throws ApplicationLogicException
95
+	 */
96
+	private function doCallbackValidation($oauthToken, $oauthVerifier)
97
+	{
98
+		if ($oauthToken === null) {
99
+			throw new ApplicationLogicException('No token provided');
100
+		}
101 101
 
102
-        if ($oauthVerifier === null) {
103
-            throw new ApplicationLogicException('No oauth verifier provided.');
104
-        }
105
-    }
102
+		if ($oauthVerifier === null) {
103
+			throw new ApplicationLogicException('No oauth verifier provided.');
104
+		}
105
+	}
106 106
 }
107 107
\ No newline at end of file
Please login to merge, or discard this patch.
includes/Pages/UserAuth/Login/PagePasswordLogin.php 2 patches
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -13,31 +13,31 @@
 block discarded – undo
13 13
 
14 14
 class PagePasswordLogin extends LoginCredentialPageBase
15 15
 {
16
-    protected function providerSpecificSetup()
17
-    {
18
-        list($partialId, $partialStage) = WebRequest::getAuthPartialLogin();
19
-
20
-        if($partialId !== null && $partialStage > 1) {
21
-            $sql = 'SELECT type FROM credential WHERE user = :user AND factor = :stage AND disabled = 0 ORDER BY priority';
22
-            $statement = $this->getDatabase()->prepare($sql);
23
-            $statement->execute(array(':user' => $partialId, ':stage' => $partialStage));
24
-            $nextStage = $statement->fetchColumn();
25
-            $statement->closeCursor();
26
-
27
-            $this->redirect("login/" . $this->nextPageMap[$nextStage]);
28
-            return;
29
-        }
30
-
31
-        $this->setTemplate('login/password.tpl');
32
-    }
33
-
34
-    protected function getProviderCredentials()
35
-    {
36
-        $password = WebRequest::postString("password");
37
-        if ($password === null || $password === "") {
38
-            throw new ApplicationLogicException("No password specified");
39
-        }
40
-
41
-        return $password;
42
-    }
16
+	protected function providerSpecificSetup()
17
+	{
18
+		list($partialId, $partialStage) = WebRequest::getAuthPartialLogin();
19
+
20
+		if($partialId !== null && $partialStage > 1) {
21
+			$sql = 'SELECT type FROM credential WHERE user = :user AND factor = :stage AND disabled = 0 ORDER BY priority';
22
+			$statement = $this->getDatabase()->prepare($sql);
23
+			$statement->execute(array(':user' => $partialId, ':stage' => $partialStage));
24
+			$nextStage = $statement->fetchColumn();
25
+			$statement->closeCursor();
26
+
27
+			$this->redirect("login/" . $this->nextPageMap[$nextStage]);
28
+			return;
29
+		}
30
+
31
+		$this->setTemplate('login/password.tpl');
32
+	}
33
+
34
+	protected function getProviderCredentials()
35
+	{
36
+		$password = WebRequest::postString("password");
37
+		if ($password === null || $password === "") {
38
+			throw new ApplicationLogicException("No password specified");
39
+		}
40
+
41
+		return $password;
42
+	}
43 43
 }
44 44
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -17,14 +17,14 @@
 block discarded – undo
17 17
     {
18 18
         list($partialId, $partialStage) = WebRequest::getAuthPartialLogin();
19 19
 
20
-        if($partialId !== null && $partialStage > 1) {
20
+        if ($partialId !== null && $partialStage > 1) {
21 21
             $sql = 'SELECT type FROM credential WHERE user = :user AND factor = :stage AND disabled = 0 ORDER BY priority';
22 22
             $statement = $this->getDatabase()->prepare($sql);
23 23
             $statement->execute(array(':user' => $partialId, ':stage' => $partialStage));
24 24
             $nextStage = $statement->fetchColumn();
25 25
             $statement->closeCursor();
26 26
 
27
-            $this->redirect("login/" . $this->nextPageMap[$nextStage]);
27
+            $this->redirect("login/".$this->nextPageMap[$nextStage]);
28 28
             return;
29 29
         }
30 30
 
Please login to merge, or discard this patch.
includes/Pages/UserAuth/Login/PageU2FLogin.php 1 patch
Indentation   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -14,20 +14,20 @@  discard block
 block discarded – undo
14 14
 
15 15
 class PageU2FLogin extends LoginCredentialPageBase
16 16
 {
17
-    protected function providerSpecificSetup()
18
-    {
19
-        $this->assign('showSignIn', false);
20
-        $this->setTemplate('login/u2f.tpl');
17
+	protected function providerSpecificSetup()
18
+	{
19
+		$this->assign('showSignIn', false);
20
+		$this->setTemplate('login/u2f.tpl');
21 21
 
22
-        if ($this->partialUser === null) {
23
-            throw new ApplicationLogicException("U2F cannot be first-stage authentication");
24
-        }
22
+		if ($this->partialUser === null) {
23
+			throw new ApplicationLogicException("U2F cannot be first-stage authentication");
24
+		}
25 25
 
26
-        $u2f = new U2FCredentialProvider($this->getDatabase(), $this->getSiteConfiguration());
27
-        $authData = json_encode($u2f->getAuthenticationData($this->partialUser));
26
+		$u2f = new U2FCredentialProvider($this->getDatabase(), $this->getSiteConfiguration());
27
+		$authData = json_encode($u2f->getAuthenticationData($this->partialUser));
28 28
 
29
-        $this->addJs('/vendor/yubico/u2flib-server/examples/assets/u2f-api.js');
30
-        $this->setTailScript(<<<JS
29
+		$this->addJs('/vendor/yubico/u2flib-server/examples/assets/u2f-api.js');
30
+		$this->setTailScript(<<<JS
31 31
 var request = ${authData};
32 32
 console.log("starting sign");
33 33
 u2f.sign(request, function(data) {
@@ -44,19 +44,19 @@  discard block
 block discarded – undo
44 44
                 form.submit();
45 45
             });
46 46
 JS
47
-        );
47
+		);
48 48
 
49
-    }
49
+	}
50 50
 
51
-    protected function getProviderCredentials()
52
-    {
53
-        $authenticate = WebRequest::postString("authenticate");
54
-        $request = WebRequest::postString("request");
51
+	protected function getProviderCredentials()
52
+	{
53
+		$authenticate = WebRequest::postString("authenticate");
54
+		$request = WebRequest::postString("request");
55 55
 
56
-        if ($authenticate === null || $authenticate === "" || $request === null || $request === "") {
57
-              throw new ApplicationLogicException("No authentication specified");
58
-        }
56
+		if ($authenticate === null || $authenticate === "" || $request === null || $request === "") {
57
+			  throw new ApplicationLogicException("No authentication specified");
58
+		}
59 59
 
60
-        return array(json_decode($authenticate), json_decode($request), 'u2f');
61
-    }
60
+		return array(json_decode($authenticate), json_decode($request), 'u2f');
61
+	}
62 62
 }
63 63
\ No newline at end of file
Please login to merge, or discard this patch.
includes/Pages/UserAuth/Login/PageOtpLogin.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -13,18 +13,18 @@
 block discarded – undo
13 13
 
14 14
 class PageOtpLogin extends LoginCredentialPageBase
15 15
 {
16
-    protected function providerSpecificSetup()
17
-    {
18
-        $this->setTemplate('login/otp.tpl');
19
-    }
16
+	protected function providerSpecificSetup()
17
+	{
18
+		$this->setTemplate('login/otp.tpl');
19
+	}
20 20
 
21
-    protected function getProviderCredentials()
22
-    {
23
-        $otp = WebRequest::postString("otp");
24
-        if ($otp === null || $otp === "") {
25
-            throw new ApplicationLogicException("No one-time code specified");
26
-        }
21
+	protected function getProviderCredentials()
22
+	{
23
+		$otp = WebRequest::postString("otp");
24
+		if ($otp === null || $otp === "") {
25
+			throw new ApplicationLogicException("No one-time code specified");
26
+		}
27 27
 
28
-        return $otp;
29
-    }
28
+		return $otp;
29
+	}
30 30
 }
31 31
\ No newline at end of file
Please login to merge, or discard this patch.
includes/Pages/Registration/PageRegisterBase.php 1 patch
Indentation   +196 added lines, -196 removed lines patch added patch discarded remove patch
@@ -20,200 +20,200 @@
 block discarded – undo
20 20
 
21 21
 abstract class PageRegisterBase extends InternalPageBase
22 22
 {
23
-    /**
24
-     * Main function for this page, when no specific actions are called.
25
-     */
26
-    protected function main()
27
-    {
28
-        $useOAuthSignup = $this->getSiteConfiguration()->getUseOAuthSignup();
29
-
30
-        // Dual-mode page
31
-        if (WebRequest::wasPosted()) {
32
-            $this->validateCSRFToken();
33
-
34
-            try {
35
-                $this->handlePost($useOAuthSignup);
36
-            }
37
-            catch (ApplicationLogicException $ex) {
38
-                SessionAlert::error($ex->getMessage());
39
-                $this->redirect('register');
40
-            }
41
-        }
42
-        else {
43
-            $this->assignCSRFToken();
44
-            $this->assign("useOAuthSignup", $useOAuthSignup);
45
-            $this->setTemplate($this->getRegistrationTemplate());
46
-        }
47
-    }
48
-
49
-    protected abstract function getRegistrationTemplate();
50
-
51
-    protected function isProtectedPage()
52
-    {
53
-        return false;
54
-    }
55
-
56
-    /**
57
-     * @param string $emailAddress
58
-     *
59
-     * @throws ApplicationLogicException
60
-     */
61
-    protected function validateUniqueEmail($emailAddress)
62
-    {
63
-        $query = 'SELECT COUNT(id) FROM user WHERE email = :email';
64
-        $statement = $this->getDatabase()->prepare($query);
65
-        $statement->execute(array(':email' => $emailAddress));
66
-
67
-        if ($statement->fetchColumn() > 0) {
68
-            throw new ApplicationLogicException('That email address is already in use on this system.');
69
-        }
70
-
71
-        $statement->closeCursor();
72
-    }
73
-
74
-    /**
75
-     * @param $emailAddress
76
-     * @param $password
77
-     * @param $username
78
-     * @param $useOAuthSignup
79
-     * @param $confirmationId
80
-     * @param $onwikiUsername
81
-     *
82
-     * @throws ApplicationLogicException
83
-     */
84
-    protected function validateRequest(
85
-        $emailAddress,
86
-        $password,
87
-        $username,
88
-        $useOAuthSignup,
89
-        $confirmationId,
90
-        $onwikiUsername
91
-    ) {
92
-        if (!WebRequest::postBoolean('guidelines')) {
93
-            throw new ApplicationLogicException('You must read the interface guidelines before your request may be submitted.');
94
-        }
95
-
96
-        $this->validateGeneralInformation($emailAddress, $password, $username);
97
-        $this->validateUniqueEmail($emailAddress);
98
-        $this->validateNonOAuthFields($useOAuthSignup, $confirmationId, $onwikiUsername);
99
-    }
100
-
101
-    /**
102
-     * @param $useOAuthSignup
103
-     * @param $confirmationId
104
-     * @param $onwikiUsername
105
-     *
106
-     * @throws ApplicationLogicException
107
-     */
108
-    protected function validateNonOAuthFields($useOAuthSignup, $confirmationId, $onwikiUsername)
109
-    {
110
-        if (!$useOAuthSignup) {
111
-            if ($confirmationId === null || $confirmationId <= 0) {
112
-                throw new ApplicationLogicException('Please enter the revision id of your confirmation edit.');
113
-            }
114
-
115
-            if ($onwikiUsername === null) {
116
-                throw new ApplicationLogicException('Please specify your on-wiki username.');
117
-            }
118
-        }
119
-    }
120
-
121
-    /**
122
-     * @param $emailAddress
123
-     * @param $password
124
-     * @param $username
125
-     *
126
-     * @throws ApplicationLogicException
127
-     */
128
-    protected function validateGeneralInformation($emailAddress, $password, $username)
129
-    {
130
-        if ($emailAddress === null) {
131
-            throw new ApplicationLogicException('Your email address appears to be invalid!');
132
-        }
133
-
134
-        if ($password !== WebRequest::postString('pass2')) {
135
-            throw new ApplicationLogicException('Your passwords did not match, please try again.');
136
-        }
137
-
138
-        if (User::getByUsername($username, $this->getDatabase()) !== false) {
139
-            throw new ApplicationLogicException('That username is already in use on this system.');
140
-        }
141
-    }
142
-
143
-    /**
144
-     * @param $useOAuthSignup
145
-     *
146
-     * @throws ApplicationLogicException
147
-     * @throws \Exception
148
-     */
149
-    protected function handlePost($useOAuthSignup)
150
-    {
151
-        // Get the data
152
-        $emailAddress = WebRequest::postEmail('email');
153
-        $password = WebRequest::postString('pass');
154
-        $username = WebRequest::postString('name');
155
-
156
-        // Only set if OAuth is disabled
157
-        $confirmationId = WebRequest::postInt('conf_revid');
158
-        $onwikiUsername = WebRequest::postString('wname');
159
-
160
-        // Do some validation
161
-        $this->validateRequest($emailAddress, $password, $username, $useOAuthSignup, $confirmationId,
162
-            $onwikiUsername);
163
-
164
-        $database = $this->getDatabase();
165
-
166
-        $user = new User();
167
-        $user->setDatabase($database);
168
-
169
-        $user->setUsername($username);
170
-        $user->setEmail($emailAddress);
171
-
172
-        if (!$useOAuthSignup) {
173
-            $user->setOnWikiName($onwikiUsername);
174
-            $user->setConfirmationDiff($confirmationId);
175
-        }
176
-
177
-        $user->save();
178
-
179
-        $passwordCredentialProvider = new PasswordCredentialProvider($database, $this->getSiteConfiguration());
180
-        $passwordCredentialProvider->setCredential($user, 1, $password);
181
-
182
-        $defaultRole = $this->getDefaultRole();
183
-
184
-        $role = new UserRole();
185
-        $role->setDatabase($database);
186
-        $role->setUser($user->getId());
187
-        $role->setRole($defaultRole);
188
-        $role->save();
189
-
190
-        // Log now to get the signup date.
191
-        Logger::newUser($database, $user);
192
-        Logger::userRolesEdited($database, $user, 'Registration', array($defaultRole), array());
193
-
194
-        if ($useOAuthSignup) {
195
-            $oauthProtocolHelper = $this->getOAuthProtocolHelper();
196
-            $oauth = new OAuthUserHelper($user, $database, $oauthProtocolHelper, $this->getSiteConfiguration());
197
-
198
-            $authoriseUrl = $oauth->getRequestToken();
199
-            WebRequest::setOAuthPartialLogin($user);
200
-            $this->redirectUrl($authoriseUrl);
201
-        }
202
-        else {
203
-            // only notify if we're not using the oauth signup.
204
-            $this->getNotificationHelper()->userNew($user);
205
-            WebRequest::setLoggedInUser($user);
206
-            $this->redirect('preferences');
207
-        }
208
-    }
209
-
210
-    protected abstract function getDefaultRole();
211
-
212
-    /**
213
-     * Entry point for registration complete
214
-     */
215
-    protected function done()
216
-    {
217
-        $this->setTemplate('registration/alert-registrationcomplete.tpl');
218
-    }
23
+	/**
24
+	 * Main function for this page, when no specific actions are called.
25
+	 */
26
+	protected function main()
27
+	{
28
+		$useOAuthSignup = $this->getSiteConfiguration()->getUseOAuthSignup();
29
+
30
+		// Dual-mode page
31
+		if (WebRequest::wasPosted()) {
32
+			$this->validateCSRFToken();
33
+
34
+			try {
35
+				$this->handlePost($useOAuthSignup);
36
+			}
37
+			catch (ApplicationLogicException $ex) {
38
+				SessionAlert::error($ex->getMessage());
39
+				$this->redirect('register');
40
+			}
41
+		}
42
+		else {
43
+			$this->assignCSRFToken();
44
+			$this->assign("useOAuthSignup", $useOAuthSignup);
45
+			$this->setTemplate($this->getRegistrationTemplate());
46
+		}
47
+	}
48
+
49
+	protected abstract function getRegistrationTemplate();
50
+
51
+	protected function isProtectedPage()
52
+	{
53
+		return false;
54
+	}
55
+
56
+	/**
57
+	 * @param string $emailAddress
58
+	 *
59
+	 * @throws ApplicationLogicException
60
+	 */
61
+	protected function validateUniqueEmail($emailAddress)
62
+	{
63
+		$query = 'SELECT COUNT(id) FROM user WHERE email = :email';
64
+		$statement = $this->getDatabase()->prepare($query);
65
+		$statement->execute(array(':email' => $emailAddress));
66
+
67
+		if ($statement->fetchColumn() > 0) {
68
+			throw new ApplicationLogicException('That email address is already in use on this system.');
69
+		}
70
+
71
+		$statement->closeCursor();
72
+	}
73
+
74
+	/**
75
+	 * @param $emailAddress
76
+	 * @param $password
77
+	 * @param $username
78
+	 * @param $useOAuthSignup
79
+	 * @param $confirmationId
80
+	 * @param $onwikiUsername
81
+	 *
82
+	 * @throws ApplicationLogicException
83
+	 */
84
+	protected function validateRequest(
85
+		$emailAddress,
86
+		$password,
87
+		$username,
88
+		$useOAuthSignup,
89
+		$confirmationId,
90
+		$onwikiUsername
91
+	) {
92
+		if (!WebRequest::postBoolean('guidelines')) {
93
+			throw new ApplicationLogicException('You must read the interface guidelines before your request may be submitted.');
94
+		}
95
+
96
+		$this->validateGeneralInformation($emailAddress, $password, $username);
97
+		$this->validateUniqueEmail($emailAddress);
98
+		$this->validateNonOAuthFields($useOAuthSignup, $confirmationId, $onwikiUsername);
99
+	}
100
+
101
+	/**
102
+	 * @param $useOAuthSignup
103
+	 * @param $confirmationId
104
+	 * @param $onwikiUsername
105
+	 *
106
+	 * @throws ApplicationLogicException
107
+	 */
108
+	protected function validateNonOAuthFields($useOAuthSignup, $confirmationId, $onwikiUsername)
109
+	{
110
+		if (!$useOAuthSignup) {
111
+			if ($confirmationId === null || $confirmationId <= 0) {
112
+				throw new ApplicationLogicException('Please enter the revision id of your confirmation edit.');
113
+			}
114
+
115
+			if ($onwikiUsername === null) {
116
+				throw new ApplicationLogicException('Please specify your on-wiki username.');
117
+			}
118
+		}
119
+	}
120
+
121
+	/**
122
+	 * @param $emailAddress
123
+	 * @param $password
124
+	 * @param $username
125
+	 *
126
+	 * @throws ApplicationLogicException
127
+	 */
128
+	protected function validateGeneralInformation($emailAddress, $password, $username)
129
+	{
130
+		if ($emailAddress === null) {
131
+			throw new ApplicationLogicException('Your email address appears to be invalid!');
132
+		}
133
+
134
+		if ($password !== WebRequest::postString('pass2')) {
135
+			throw new ApplicationLogicException('Your passwords did not match, please try again.');
136
+		}
137
+
138
+		if (User::getByUsername($username, $this->getDatabase()) !== false) {
139
+			throw new ApplicationLogicException('That username is already in use on this system.');
140
+		}
141
+	}
142
+
143
+	/**
144
+	 * @param $useOAuthSignup
145
+	 *
146
+	 * @throws ApplicationLogicException
147
+	 * @throws \Exception
148
+	 */
149
+	protected function handlePost($useOAuthSignup)
150
+	{
151
+		// Get the data
152
+		$emailAddress = WebRequest::postEmail('email');
153
+		$password = WebRequest::postString('pass');
154
+		$username = WebRequest::postString('name');
155
+
156
+		// Only set if OAuth is disabled
157
+		$confirmationId = WebRequest::postInt('conf_revid');
158
+		$onwikiUsername = WebRequest::postString('wname');
159
+
160
+		// Do some validation
161
+		$this->validateRequest($emailAddress, $password, $username, $useOAuthSignup, $confirmationId,
162
+			$onwikiUsername);
163
+
164
+		$database = $this->getDatabase();
165
+
166
+		$user = new User();
167
+		$user->setDatabase($database);
168
+
169
+		$user->setUsername($username);
170
+		$user->setEmail($emailAddress);
171
+
172
+		if (!$useOAuthSignup) {
173
+			$user->setOnWikiName($onwikiUsername);
174
+			$user->setConfirmationDiff($confirmationId);
175
+		}
176
+
177
+		$user->save();
178
+
179
+		$passwordCredentialProvider = new PasswordCredentialProvider($database, $this->getSiteConfiguration());
180
+		$passwordCredentialProvider->setCredential($user, 1, $password);
181
+
182
+		$defaultRole = $this->getDefaultRole();
183
+
184
+		$role = new UserRole();
185
+		$role->setDatabase($database);
186
+		$role->setUser($user->getId());
187
+		$role->setRole($defaultRole);
188
+		$role->save();
189
+
190
+		// Log now to get the signup date.
191
+		Logger::newUser($database, $user);
192
+		Logger::userRolesEdited($database, $user, 'Registration', array($defaultRole), array());
193
+
194
+		if ($useOAuthSignup) {
195
+			$oauthProtocolHelper = $this->getOAuthProtocolHelper();
196
+			$oauth = new OAuthUserHelper($user, $database, $oauthProtocolHelper, $this->getSiteConfiguration());
197
+
198
+			$authoriseUrl = $oauth->getRequestToken();
199
+			WebRequest::setOAuthPartialLogin($user);
200
+			$this->redirectUrl($authoriseUrl);
201
+		}
202
+		else {
203
+			// only notify if we're not using the oauth signup.
204
+			$this->getNotificationHelper()->userNew($user);
205
+			WebRequest::setLoggedInUser($user);
206
+			$this->redirect('preferences');
207
+		}
208
+	}
209
+
210
+	protected abstract function getDefaultRole();
211
+
212
+	/**
213
+	 * Entry point for registration complete
214
+	 */
215
+	protected function done()
216
+	{
217
+		$this->setTemplate('registration/alert-registrationcomplete.tpl');
218
+	}
219 219
 }
Please login to merge, or discard this patch.
includes/Security/CredentialProviders/U2FCredentialProvider.php 3 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -32,7 +32,7 @@
 block discarded – undo
32 32
     {
33 33
         parent::__construct($database, $configuration, 'u2f');
34 34
 
35
-        $appId = 'https://' . WebRequest::httpHost();
35
+        $appId = 'https://'.WebRequest::httpHost();
36 36
         $this->u2f = new U2F($appId);
37 37
     }
38 38
 
Please login to merge, or discard this patch.
Unused Use Statements   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -9,14 +9,14 @@
 block discarded – undo
9 9
 namespace Waca\Security\CredentialProviders;
10 10
 
11 11
 use DateTimeImmutable;
12
-use u2flib_server\Error;
13
-use u2flib_server\U2F;
14 12
 use Waca\DataObjects\User;
15 13
 use Waca\Exceptions\ApplicationLogicException;
16 14
 use Waca\Exceptions\OptimisticLockFailedException;
17 15
 use Waca\PdoDatabase;
18 16
 use Waca\SiteConfiguration;
19 17
 use Waca\WebRequest;
18
+use u2flib_server\Error;
19
+use u2flib_server\U2F;
20 20
 
21 21
 class U2FCredentialProvider extends CredentialProviderBase
22 22
 {
Please login to merge, or discard this patch.
Indentation   +127 added lines, -127 removed lines patch added patch discarded remove patch
@@ -20,131 +20,131 @@
 block discarded – undo
20 20
 
21 21
 class U2FCredentialProvider extends CredentialProviderBase
22 22
 {
23
-    /** @var U2F */
24
-    private $u2f;
25
-
26
-    /**
27
-     * U2FCredentialProvider constructor.
28
-     *
29
-     * @param PdoDatabase       $database
30
-     * @param SiteConfiguration $configuration
31
-     */
32
-    public function __construct(PdoDatabase $database, SiteConfiguration $configuration)
33
-    {
34
-        parent::__construct($database, $configuration, 'u2f');
35
-
36
-        $appId = 'https://' . WebRequest::httpHost();
37
-        $this->u2f = new U2F($appId);
38
-    }
39
-
40
-    /**
41
-     * Validates a user-provided credential
42
-     *
43
-     * @param User   $user The user to test the authentication against
44
-     * @param string $data The raw credential data to be validated
45
-     *
46
-     * @return bool
47
-     * @throws OptimisticLockFailedException
48
-     */
49
-    public function authenticate(User $user, $data)
50
-    {
51
-        if (!is_array($data)) {
52
-            return false;
53
-        }
54
-
55
-        list($authenticate, $request, $isU2F) = $data;
56
-
57
-        if ($isU2F !== 'u2f') {
58
-            return false;
59
-        }
60
-
61
-        $storedData = $this->getCredentialData($user->getId(), false);
62
-        $registrations = json_decode($storedData->getData());
63
-
64
-        try {
65
-            $updatedRegistration = $this->u2f->doAuthenticate($request, array($registrations), $authenticate);
66
-            $storedData->setData(json_encode($updatedRegistration));
67
-            $storedData->save();
68
-        }
69
-        catch (Error $ex) {
70
-            return false;
71
-        }
72
-
73
-        return true;
74
-    }
75
-
76
-    public function enable(User $user, $request, $u2fData)
77
-    {
78
-        $registrationData = $this->u2f->doRegister($request, $u2fData);
79
-
80
-        $storedData = $this->getCredentialData($user->getId(), true);
81
-
82
-        if ($storedData === null) {
83
-            throw new ApplicationLogicException('Credential data not found');
84
-        }
85
-
86
-        if ($storedData->getTimeout() > new DateTimeImmutable()) {
87
-            $storedData->setData(json_encode($registrationData));
88
-            $storedData->setDisabled(0);
89
-            $storedData->setTimeout(null);
90
-            $storedData->save();
91
-        }
92
-    }
93
-
94
-    /**
95
-     * @param User   $user   The user the credential belongs to
96
-     * @param int    $factor The factor this credential provides
97
-     * @param string $data   Unused here, due to multi-stage enrollment
98
-     */
99
-    public function setCredential(User $user, $factor, $data)
100
-    {
101
-        $storedData = $this->getCredentialData($user->getId(), null);
102
-
103
-        if ($storedData !== null) {
104
-            $storedData->delete();
105
-        }
106
-
107
-        $storedData = $this->createNewCredential($user);
108
-
109
-        $storedData->setData(null);
110
-        $storedData->setFactor($factor);
111
-        $storedData->setTimeout(new DateTimeImmutable('+ 1 hour'));
112
-        $storedData->setDisabled(1);
113
-        $storedData->setPriority(4);
114
-        $storedData->setVersion(1);
115
-
116
-        $storedData->save();
117
-    }
118
-
119
-    public function isPartiallyEnrolled(User $user)
120
-    {
121
-        $storedData = $this->getCredentialData($user->getId(), true);
122
-
123
-        if ($storedData->getTimeout() < new DateTimeImmutable()) {
124
-            $storedData->delete();
125
-
126
-            return false;
127
-        }
128
-
129
-        if ($storedData === null) {
130
-            return false;
131
-        }
132
-
133
-        return true;
134
-    }
135
-
136
-    public function getRegistrationData()
137
-    {
138
-        return $this->u2f->getRegisterData();
139
-    }
140
-
141
-    public function getAuthenticationData(User $user)
142
-    {
143
-        $storedData = $this->getCredentialData($user->getId(), false);
144
-        $registrations = json_decode($storedData->getData());
145
-
146
-        $authenticateData = $this->u2f->getAuthenticateData(array($registrations));
147
-
148
-        return $authenticateData;
149
-    }
23
+	/** @var U2F */
24
+	private $u2f;
25
+
26
+	/**
27
+	 * U2FCredentialProvider constructor.
28
+	 *
29
+	 * @param PdoDatabase       $database
30
+	 * @param SiteConfiguration $configuration
31
+	 */
32
+	public function __construct(PdoDatabase $database, SiteConfiguration $configuration)
33
+	{
34
+		parent::__construct($database, $configuration, 'u2f');
35
+
36
+		$appId = 'https://' . WebRequest::httpHost();
37
+		$this->u2f = new U2F($appId);
38
+	}
39
+
40
+	/**
41
+	 * Validates a user-provided credential
42
+	 *
43
+	 * @param User   $user The user to test the authentication against
44
+	 * @param string $data The raw credential data to be validated
45
+	 *
46
+	 * @return bool
47
+	 * @throws OptimisticLockFailedException
48
+	 */
49
+	public function authenticate(User $user, $data)
50
+	{
51
+		if (!is_array($data)) {
52
+			return false;
53
+		}
54
+
55
+		list($authenticate, $request, $isU2F) = $data;
56
+
57
+		if ($isU2F !== 'u2f') {
58
+			return false;
59
+		}
60
+
61
+		$storedData = $this->getCredentialData($user->getId(), false);
62
+		$registrations = json_decode($storedData->getData());
63
+
64
+		try {
65
+			$updatedRegistration = $this->u2f->doAuthenticate($request, array($registrations), $authenticate);
66
+			$storedData->setData(json_encode($updatedRegistration));
67
+			$storedData->save();
68
+		}
69
+		catch (Error $ex) {
70
+			return false;
71
+		}
72
+
73
+		return true;
74
+	}
75
+
76
+	public function enable(User $user, $request, $u2fData)
77
+	{
78
+		$registrationData = $this->u2f->doRegister($request, $u2fData);
79
+
80
+		$storedData = $this->getCredentialData($user->getId(), true);
81
+
82
+		if ($storedData === null) {
83
+			throw new ApplicationLogicException('Credential data not found');
84
+		}
85
+
86
+		if ($storedData->getTimeout() > new DateTimeImmutable()) {
87
+			$storedData->setData(json_encode($registrationData));
88
+			$storedData->setDisabled(0);
89
+			$storedData->setTimeout(null);
90
+			$storedData->save();
91
+		}
92
+	}
93
+
94
+	/**
95
+	 * @param User   $user   The user the credential belongs to
96
+	 * @param int    $factor The factor this credential provides
97
+	 * @param string $data   Unused here, due to multi-stage enrollment
98
+	 */
99
+	public function setCredential(User $user, $factor, $data)
100
+	{
101
+		$storedData = $this->getCredentialData($user->getId(), null);
102
+
103
+		if ($storedData !== null) {
104
+			$storedData->delete();
105
+		}
106
+
107
+		$storedData = $this->createNewCredential($user);
108
+
109
+		$storedData->setData(null);
110
+		$storedData->setFactor($factor);
111
+		$storedData->setTimeout(new DateTimeImmutable('+ 1 hour'));
112
+		$storedData->setDisabled(1);
113
+		$storedData->setPriority(4);
114
+		$storedData->setVersion(1);
115
+
116
+		$storedData->save();
117
+	}
118
+
119
+	public function isPartiallyEnrolled(User $user)
120
+	{
121
+		$storedData = $this->getCredentialData($user->getId(), true);
122
+
123
+		if ($storedData->getTimeout() < new DateTimeImmutable()) {
124
+			$storedData->delete();
125
+
126
+			return false;
127
+		}
128
+
129
+		if ($storedData === null) {
130
+			return false;
131
+		}
132
+
133
+		return true;
134
+	}
135
+
136
+	public function getRegistrationData()
137
+	{
138
+		return $this->u2f->getRegisterData();
139
+	}
140
+
141
+	public function getAuthenticationData(User $user)
142
+	{
143
+		$storedData = $this->getCredentialData($user->getId(), false);
144
+		$registrations = json_decode($storedData->getData());
145
+
146
+		$authenticateData = $this->u2f->getAuthenticateData(array($registrations));
147
+
148
+		return $authenticateData;
149
+	}
150 150
 }
Please login to merge, or discard this patch.
includes/Security/CredentialProviders/CredentialProviderBase.php 3 patches
Indentation   +133 added lines, -133 removed lines patch added patch discarded remove patch
@@ -15,137 +15,137 @@
 block discarded – undo
15 15
 
16 16
 abstract class CredentialProviderBase implements ICredentialProvider
17 17
 {
18
-    /**
19
-     * @var PdoDatabase
20
-     */
21
-    private $database;
22
-    /**
23
-     * @var SiteConfiguration
24
-     */
25
-    private $configuration;
26
-    /** @var string */
27
-    private $type;
28
-
29
-    /**
30
-     * CredentialProviderBase constructor.
31
-     *
32
-     * @param PdoDatabase       $database
33
-     * @param SiteConfiguration $configuration
34
-     * @param string            $type
35
-     */
36
-    public function __construct(PdoDatabase $database, SiteConfiguration $configuration, $type)
37
-    {
38
-        $this->database = $database;
39
-        $this->configuration = $configuration;
40
-        $this->type = $type;
41
-    }
42
-
43
-    /**
44
-     * @param int  $userId
45
-     *
46
-     * @param bool $disabled
47
-     *
48
-     * @return Credential
49
-     */
50
-    protected function getCredentialData($userId, $disabled = false)
51
-    {
52
-        $sql = 'SELECT * FROM credential WHERE type = :t AND user = :u';
53
-        $parameters = array(
54
-            ':u' => $userId,
55
-            ':t' => $this->type
56
-        );
57
-
58
-        if($disabled !== null) {
59
-            $sql .= ' AND disabled = :d';
60
-            $parameters[':d'] = $disabled ? 1 : 0;
61
-        }
62
-
63
-        $statement = $this->database->prepare($sql);
64
-        $statement->execute($parameters);
65
-
66
-        /** @var Credential $obj */
67
-        $obj = $statement->fetchObject(Credential::class);
68
-
69
-        if ($obj === false) {
70
-            return null;
71
-        }
72
-
73
-        $obj->setDatabase($this->database);
74
-
75
-        $statement->closeCursor();
76
-
77
-        return $obj;
78
-    }
79
-
80
-    /**
81
-     * @return PdoDatabase
82
-     */
83
-    public function getDatabase()
84
-    {
85
-        return $this->database;
86
-    }
87
-
88
-    /**
89
-     * @return SiteConfiguration
90
-     */
91
-    public function getConfiguration()
92
-    {
93
-        return $this->configuration;
94
-    }
95
-
96
-    public function deleteCredential(User $user) {
97
-        // get this factor
98
-        $statement = $this->database->prepare('SELECT * FROM credential WHERE user = :user AND type = :type');
99
-        $statement->execute(array(':user' => $user->getId(), ':type' => $this->type));
100
-        /** @var Credential $credential */
101
-        $credential = $statement->fetchObject(Credential::class);
102
-        $credential->setDatabase($this->database);
103
-        $statement->closeCursor();
104
-
105
-        $stage = $credential->getFactor();
106
-
107
-        $statement = $this->database->prepare('SELECT COUNT(*) FROM credential WHERE user = :user AND factor = :factor');
108
-        $statement->execute(array(':user' => $user->getId(), ':factor' => $stage));
109
-        $alternates = $statement->fetchColumn();
110
-        $statement->closeCursor();
111
-
112
-        if($alternates <= 1) {
113
-            // decrement the factor for every stage above this
114
-            $sql = 'UPDATE credential SET factor = factor - 1 WHERE user = :user AND factor > :factor';
115
-            $statement = $this->database->prepare($sql);
116
-            $statement->execute(array(':user' => $user->getId(), ':factor' => $stage));
117
-        }
118
-        else {
119
-            // There are other auth factors at this point. Don't renumber the factors just yet.
120
-        }
121
-
122
-        // delete this credential.
123
-        $credential->delete();
124
-    }
125
-
126
-    /**
127
-     * @param User $user
128
-     *
129
-     * @return Credential
130
-     */
131
-    protected function createNewCredential(User $user)
132
-    {
133
-        $credential = new Credential();
134
-        $credential->setDatabase($this->getDatabase());
135
-        $credential->setUserId($user->getId());
136
-        $credential->setType($this->type);
137
-
138
-        return $credential;
139
-    }
140
-
141
-    /**
142
-     * @param int $userId
143
-     *
144
-     * @return bool
145
-     */
146
-    public function userIsEnrolled($userId) {
147
-        $cred = $this->getCredentialData($userId);
148
-
149
-        return $cred !== null;
150
-    }
18
+	/**
19
+	 * @var PdoDatabase
20
+	 */
21
+	private $database;
22
+	/**
23
+	 * @var SiteConfiguration
24
+	 */
25
+	private $configuration;
26
+	/** @var string */
27
+	private $type;
28
+
29
+	/**
30
+	 * CredentialProviderBase constructor.
31
+	 *
32
+	 * @param PdoDatabase       $database
33
+	 * @param SiteConfiguration $configuration
34
+	 * @param string            $type
35
+	 */
36
+	public function __construct(PdoDatabase $database, SiteConfiguration $configuration, $type)
37
+	{
38
+		$this->database = $database;
39
+		$this->configuration = $configuration;
40
+		$this->type = $type;
41
+	}
42
+
43
+	/**
44
+	 * @param int  $userId
45
+	 *
46
+	 * @param bool $disabled
47
+	 *
48
+	 * @return Credential
49
+	 */
50
+	protected function getCredentialData($userId, $disabled = false)
51
+	{
52
+		$sql = 'SELECT * FROM credential WHERE type = :t AND user = :u';
53
+		$parameters = array(
54
+			':u' => $userId,
55
+			':t' => $this->type
56
+		);
57
+
58
+		if($disabled !== null) {
59
+			$sql .= ' AND disabled = :d';
60
+			$parameters[':d'] = $disabled ? 1 : 0;
61
+		}
62
+
63
+		$statement = $this->database->prepare($sql);
64
+		$statement->execute($parameters);
65
+
66
+		/** @var Credential $obj */
67
+		$obj = $statement->fetchObject(Credential::class);
68
+
69
+		if ($obj === false) {
70
+			return null;
71
+		}
72
+
73
+		$obj->setDatabase($this->database);
74
+
75
+		$statement->closeCursor();
76
+
77
+		return $obj;
78
+	}
79
+
80
+	/**
81
+	 * @return PdoDatabase
82
+	 */
83
+	public function getDatabase()
84
+	{
85
+		return $this->database;
86
+	}
87
+
88
+	/**
89
+	 * @return SiteConfiguration
90
+	 */
91
+	public function getConfiguration()
92
+	{
93
+		return $this->configuration;
94
+	}
95
+
96
+	public function deleteCredential(User $user) {
97
+		// get this factor
98
+		$statement = $this->database->prepare('SELECT * FROM credential WHERE user = :user AND type = :type');
99
+		$statement->execute(array(':user' => $user->getId(), ':type' => $this->type));
100
+		/** @var Credential $credential */
101
+		$credential = $statement->fetchObject(Credential::class);
102
+		$credential->setDatabase($this->database);
103
+		$statement->closeCursor();
104
+
105
+		$stage = $credential->getFactor();
106
+
107
+		$statement = $this->database->prepare('SELECT COUNT(*) FROM credential WHERE user = :user AND factor = :factor');
108
+		$statement->execute(array(':user' => $user->getId(), ':factor' => $stage));
109
+		$alternates = $statement->fetchColumn();
110
+		$statement->closeCursor();
111
+
112
+		if($alternates <= 1) {
113
+			// decrement the factor for every stage above this
114
+			$sql = 'UPDATE credential SET factor = factor - 1 WHERE user = :user AND factor > :factor';
115
+			$statement = $this->database->prepare($sql);
116
+			$statement->execute(array(':user' => $user->getId(), ':factor' => $stage));
117
+		}
118
+		else {
119
+			// There are other auth factors at this point. Don't renumber the factors just yet.
120
+		}
121
+
122
+		// delete this credential.
123
+		$credential->delete();
124
+	}
125
+
126
+	/**
127
+	 * @param User $user
128
+	 *
129
+	 * @return Credential
130
+	 */
131
+	protected function createNewCredential(User $user)
132
+	{
133
+		$credential = new Credential();
134
+		$credential->setDatabase($this->getDatabase());
135
+		$credential->setUserId($user->getId());
136
+		$credential->setType($this->type);
137
+
138
+		return $credential;
139
+	}
140
+
141
+	/**
142
+	 * @param int $userId
143
+	 *
144
+	 * @return bool
145
+	 */
146
+	public function userIsEnrolled($userId) {
147
+		$cred = $this->getCredentialData($userId);
148
+
149
+		return $cred !== null;
150
+	}
151 151
 }
152 152
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
             ':t' => $this->type
56 56
         );
57 57
 
58
-        if($disabled !== null) {
58
+        if ($disabled !== null) {
59 59
             $sql .= ' AND disabled = :d';
60 60
             $parameters[':d'] = $disabled ? 1 : 0;
61 61
         }
@@ -109,7 +109,7 @@  discard block
 block discarded – undo
109 109
         $alternates = $statement->fetchColumn();
110 110
         $statement->closeCursor();
111 111
 
112
-        if($alternates <= 1) {
112
+        if ($alternates <= 1) {
113 113
             // decrement the factor for every stage above this
114 114
             $sql = 'UPDATE credential SET factor = factor - 1 WHERE user = :user AND factor > :factor';
115 115
             $statement = $this->database->prepare($sql);
Please login to merge, or discard this patch.
Braces   +4 added lines, -2 removed lines patch added patch discarded remove patch
@@ -93,7 +93,8 @@  discard block
 block discarded – undo
93 93
         return $this->configuration;
94 94
     }
95 95
 
96
-    public function deleteCredential(User $user) {
96
+    public function deleteCredential(User $user)
97
+    {
97 98
         // get this factor
98 99
         $statement = $this->database->prepare('SELECT * FROM credential WHERE user = :user AND type = :type');
99 100
         $statement->execute(array(':user' => $user->getId(), ':type' => $this->type));
@@ -143,7 +144,8 @@  discard block
 block discarded – undo
143 144
      *
144 145
      * @return bool
145 146
      */
146
-    public function userIsEnrolled($userId) {
147
+    public function userIsEnrolled($userId)
148
+    {
147 149
         $cred = $this->getCredentialData($userId);
148 150
 
149 151
         return $cred !== null;
Please login to merge, or discard this patch.
includes/Security/EncryptionHelper.php 2 patches
Indentation   +44 added lines, -44 removed lines patch added patch discarded remove patch
@@ -12,48 +12,48 @@
 block discarded – undo
12 12
 
13 13
 class EncryptionHelper
14 14
 {
15
-    /**
16
-     * @var SiteConfiguration
17
-     */
18
-    private $configuration;
19
-
20
-    /**
21
-     * EncryptionHelper constructor.
22
-     *
23
-     * @param SiteConfiguration $configuration
24
-     */
25
-    public function __construct(SiteConfiguration $configuration)
26
-    {
27
-        $this->configuration = $configuration;
28
-    }
29
-
30
-    public function encryptData($secret)
31
-    {
32
-        $iv = openssl_random_pseudo_bytes(16);
33
-        $password = $this->getEncryptionKey();
34
-        $encryptedKey = openssl_encrypt($secret, 'aes-256-ctr', $password, OPENSSL_RAW_DATA, $iv);
35
-
36
-        $data = base64_encode($iv) . '|' . base64_encode($encryptedKey);
37
-
38
-        return $data;
39
-    }
40
-
41
-    public function decryptData($data)
42
-    {
43
-        list($iv, $encryptedKey) = array_map('base64_decode', explode('|', $data));
44
-
45
-        $password = $this->getEncryptionKey();
46
-
47
-        $secret = openssl_decrypt($encryptedKey, 'aes-256-ctr', $password, OPENSSL_RAW_DATA, $iv);
48
-
49
-        return $secret;
50
-    }
51
-
52
-    /**
53
-     * @return string
54
-     */
55
-    private function getEncryptionKey()
56
-    {
57
-        return openssl_digest($this->configuration->getTotpEncryptionKey(), 'sha256');
58
-    }
15
+	/**
16
+	 * @var SiteConfiguration
17
+	 */
18
+	private $configuration;
19
+
20
+	/**
21
+	 * EncryptionHelper constructor.
22
+	 *
23
+	 * @param SiteConfiguration $configuration
24
+	 */
25
+	public function __construct(SiteConfiguration $configuration)
26
+	{
27
+		$this->configuration = $configuration;
28
+	}
29
+
30
+	public function encryptData($secret)
31
+	{
32
+		$iv = openssl_random_pseudo_bytes(16);
33
+		$password = $this->getEncryptionKey();
34
+		$encryptedKey = openssl_encrypt($secret, 'aes-256-ctr', $password, OPENSSL_RAW_DATA, $iv);
35
+
36
+		$data = base64_encode($iv) . '|' . base64_encode($encryptedKey);
37
+
38
+		return $data;
39
+	}
40
+
41
+	public function decryptData($data)
42
+	{
43
+		list($iv, $encryptedKey) = array_map('base64_decode', explode('|', $data));
44
+
45
+		$password = $this->getEncryptionKey();
46
+
47
+		$secret = openssl_decrypt($encryptedKey, 'aes-256-ctr', $password, OPENSSL_RAW_DATA, $iv);
48
+
49
+		return $secret;
50
+	}
51
+
52
+	/**
53
+	 * @return string
54
+	 */
55
+	private function getEncryptionKey()
56
+	{
57
+		return openssl_digest($this->configuration->getTotpEncryptionKey(), 'sha256');
58
+	}
59 59
 }
60 60
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -33,7 +33,7 @@
 block discarded – undo
33 33
         $password = $this->getEncryptionKey();
34 34
         $encryptedKey = openssl_encrypt($secret, 'aes-256-ctr', $password, OPENSSL_RAW_DATA, $iv);
35 35
 
36
-        $data = base64_encode($iv) . '|' . base64_encode($encryptedKey);
36
+        $data = base64_encode($iv).'|'.base64_encode($encryptedKey);
37 37
 
38 38
         return $data;
39 39
     }
Please login to merge, or discard this patch.
includes/Security/AuthenticationManager.php 1 patch
Indentation   +56 added lines, -56 removed lines patch added patch discarded remove patch
@@ -22,67 +22,67 @@
 block discarded – undo
22 22
 
23 23
 class AuthenticationManager
24 24
 {
25
-    const AUTH_OK = 1;
26
-    const AUTH_FAIL = 2;
27
-    const AUTH_REQUIRE_NEXT_STAGE = 3;
28
-    private $typeMap = array();
29
-    /**
30
-     * @var PdoDatabase
31
-     */
32
-    private $database;
25
+	const AUTH_OK = 1;
26
+	const AUTH_FAIL = 2;
27
+	const AUTH_REQUIRE_NEXT_STAGE = 3;
28
+	private $typeMap = array();
29
+	/**
30
+	 * @var PdoDatabase
31
+	 */
32
+	private $database;
33 33
 
34
-    /**
35
-     * AuthenticationManager constructor.
36
-     *
37
-     * @param PdoDatabase       $database
38
-     * @param SiteConfiguration $siteConfiguration
39
-     * @param HttpHelper        $httpHelper
40
-     */
41
-    public function __construct(PdoDatabase $database, SiteConfiguration $siteConfiguration, HttpHelper $httpHelper)
42
-    {
43
-        // setup providers
44
-        // note on type map: this *must* be the value in the database, as this is what it maps.
45
-        $this->typeMap['password'] = new PasswordCredentialProvider($database, $siteConfiguration);
46
-        $this->typeMap['yubikeyotp'] = new YubikeyOtpCredentialProvider($database, $siteConfiguration, $httpHelper);
47
-        $this->typeMap['totp'] = new TotpCredentialProvider($database, $siteConfiguration);
48
-        $this->typeMap['scratch'] = new ScratchTokenCredentialProvider($database, $siteConfiguration);
49
-        $this->typeMap['u2f'] = new U2FCredentialProvider($database, $siteConfiguration);
50
-        $this->database = $database;
51
-    }
34
+	/**
35
+	 * AuthenticationManager constructor.
36
+	 *
37
+	 * @param PdoDatabase       $database
38
+	 * @param SiteConfiguration $siteConfiguration
39
+	 * @param HttpHelper        $httpHelper
40
+	 */
41
+	public function __construct(PdoDatabase $database, SiteConfiguration $siteConfiguration, HttpHelper $httpHelper)
42
+	{
43
+		// setup providers
44
+		// note on type map: this *must* be the value in the database, as this is what it maps.
45
+		$this->typeMap['password'] = new PasswordCredentialProvider($database, $siteConfiguration);
46
+		$this->typeMap['yubikeyotp'] = new YubikeyOtpCredentialProvider($database, $siteConfiguration, $httpHelper);
47
+		$this->typeMap['totp'] = new TotpCredentialProvider($database, $siteConfiguration);
48
+		$this->typeMap['scratch'] = new ScratchTokenCredentialProvider($database, $siteConfiguration);
49
+		$this->typeMap['u2f'] = new U2FCredentialProvider($database, $siteConfiguration);
50
+		$this->database = $database;
51
+	}
52 52
 
53
-    public function authenticate(User $user, $data, $stage)
54
-    {
55
-        $sql = 'SELECT type FROM credential WHERE user = :user AND factor = :stage AND disabled = 0 ORDER BY priority ASC';
56
-        $statement = $this->database->prepare($sql);
57
-        $statement->execute(array(':user' => $user->getId(), ':stage' => $stage));
58
-        $options = $statement->fetchAll(PDO::FETCH_COLUMN);
53
+	public function authenticate(User $user, $data, $stage)
54
+	{
55
+		$sql = 'SELECT type FROM credential WHERE user = :user AND factor = :stage AND disabled = 0 ORDER BY priority ASC';
56
+		$statement = $this->database->prepare($sql);
57
+		$statement->execute(array(':user' => $user->getId(), ':stage' => $stage));
58
+		$options = $statement->fetchAll(PDO::FETCH_COLUMN);
59 59
 
60
-        $sql = 'SELECT count(DISTINCT factor) FROM credential WHERE user = :user AND factor > :stage AND disabled = 0 AND type <> :scratch';
61
-        $statement = $this->database->prepare($sql);
62
-        $statement->execute(array(':user' => $user->getId(), ':stage' => $stage, ':scratch' => 'scratch'));
63
-        $requiredFactors = $statement->fetchColumn();
60
+		$sql = 'SELECT count(DISTINCT factor) FROM credential WHERE user = :user AND factor > :stage AND disabled = 0 AND type <> :scratch';
61
+		$statement = $this->database->prepare($sql);
62
+		$statement->execute(array(':user' => $user->getId(), ':stage' => $stage, ':scratch' => 'scratch'));
63
+		$requiredFactors = $statement->fetchColumn();
64 64
 
65
-        // prep the correct OK response based on how many factors are ahead of this one
66
-        $success = self::AUTH_OK;
67
-        if ($requiredFactors > 0) {
68
-            $success = self::AUTH_REQUIRE_NEXT_STAGE;
69
-        }
65
+		// prep the correct OK response based on how many factors are ahead of this one
66
+		$success = self::AUTH_OK;
67
+		if ($requiredFactors > 0) {
68
+			$success = self::AUTH_REQUIRE_NEXT_STAGE;
69
+		}
70 70
 
71
-        foreach ($options as $type) {
72
-            if (!isset($this->typeMap[$type])) {
73
-                // does this type have a credentialProvider registered?
74
-                continue;
75
-            }
71
+		foreach ($options as $type) {
72
+			if (!isset($this->typeMap[$type])) {
73
+				// does this type have a credentialProvider registered?
74
+				continue;
75
+			}
76 76
 
77
-            /** @var ICredentialProvider $credentialProvider */
78
-            $credentialProvider = $this->typeMap[$type];
79
-            if ($credentialProvider->authenticate($user, $data)) {
80
-                return $success;
81
-            }
82
-        }
77
+			/** @var ICredentialProvider $credentialProvider */
78
+			$credentialProvider = $this->typeMap[$type];
79
+			if ($credentialProvider->authenticate($user, $data)) {
80
+				return $success;
81
+			}
82
+		}
83 83
 
84
-        // We've iterated over all the available providers for this stage.
85
-        // They all hate you.
86
-        return self::AUTH_FAIL;
87
-    }
84
+		// We've iterated over all the available providers for this stage.
85
+		// They all hate you.
86
+		return self::AUTH_FAIL;
87
+	}
88 88
 }
89 89
\ No newline at end of file
Please login to merge, or discard this patch.