Completed
Pull Request — master (#6247)
by Lukas
33:53 queued 18:13
created
core/Controller/ClientFlowLoginController.php 1 patch
Indentation   +244 added lines, -244 removed lines patch added patch discarded remove patch
@@ -43,268 +43,268 @@
 block discarded – undo
43 43
 use OCP\Session\Exceptions\SessionNotAvailableException;
44 44
 
45 45
 class ClientFlowLoginController extends Controller {
46
-	/** @var IUserSession */
47
-	private $userSession;
48
-	/** @var IL10N */
49
-	private $l10n;
50
-	/** @var Defaults */
51
-	private $defaults;
52
-	/** @var ISession */
53
-	private $session;
54
-	/** @var IProvider */
55
-	private $tokenProvider;
56
-	/** @var ISecureRandom */
57
-	private $random;
58
-	/** @var IURLGenerator */
59
-	private $urlGenerator;
60
-	/** @var ClientMapper */
61
-	private $clientMapper;
62
-	/** @var AccessTokenMapper */
63
-	private $accessTokenMapper;
64
-	/** @var ICrypto */
65
-	private $crypto;
46
+    /** @var IUserSession */
47
+    private $userSession;
48
+    /** @var IL10N */
49
+    private $l10n;
50
+    /** @var Defaults */
51
+    private $defaults;
52
+    /** @var ISession */
53
+    private $session;
54
+    /** @var IProvider */
55
+    private $tokenProvider;
56
+    /** @var ISecureRandom */
57
+    private $random;
58
+    /** @var IURLGenerator */
59
+    private $urlGenerator;
60
+    /** @var ClientMapper */
61
+    private $clientMapper;
62
+    /** @var AccessTokenMapper */
63
+    private $accessTokenMapper;
64
+    /** @var ICrypto */
65
+    private $crypto;
66 66
 
67
-	const stateName = 'client.flow.state.token';
67
+    const stateName = 'client.flow.state.token';
68 68
 
69
-	/**
70
-	 * @param string $appName
71
-	 * @param IRequest $request
72
-	 * @param IUserSession $userSession
73
-	 * @param IL10N $l10n
74
-	 * @param Defaults $defaults
75
-	 * @param ISession $session
76
-	 * @param IProvider $tokenProvider
77
-	 * @param ISecureRandom $random
78
-	 * @param IURLGenerator $urlGenerator
79
-	 * @param ClientMapper $clientMapper
80
-	 * @param AccessTokenMapper $accessTokenMapper
81
-	 * @param ICrypto $crypto
82
-	 */
83
-	public function __construct($appName,
84
-								IRequest $request,
85
-								IUserSession $userSession,
86
-								IL10N $l10n,
87
-								Defaults $defaults,
88
-								ISession $session,
89
-								IProvider $tokenProvider,
90
-								ISecureRandom $random,
91
-								IURLGenerator $urlGenerator,
92
-								ClientMapper $clientMapper,
93
-								AccessTokenMapper $accessTokenMapper,
94
-								ICrypto $crypto) {
95
-		parent::__construct($appName, $request);
96
-		$this->userSession = $userSession;
97
-		$this->l10n = $l10n;
98
-		$this->defaults = $defaults;
99
-		$this->session = $session;
100
-		$this->tokenProvider = $tokenProvider;
101
-		$this->random = $random;
102
-		$this->urlGenerator = $urlGenerator;
103
-		$this->clientMapper = $clientMapper;
104
-		$this->accessTokenMapper = $accessTokenMapper;
105
-		$this->crypto = $crypto;
106
-	}
69
+    /**
70
+     * @param string $appName
71
+     * @param IRequest $request
72
+     * @param IUserSession $userSession
73
+     * @param IL10N $l10n
74
+     * @param Defaults $defaults
75
+     * @param ISession $session
76
+     * @param IProvider $tokenProvider
77
+     * @param ISecureRandom $random
78
+     * @param IURLGenerator $urlGenerator
79
+     * @param ClientMapper $clientMapper
80
+     * @param AccessTokenMapper $accessTokenMapper
81
+     * @param ICrypto $crypto
82
+     */
83
+    public function __construct($appName,
84
+                                IRequest $request,
85
+                                IUserSession $userSession,
86
+                                IL10N $l10n,
87
+                                Defaults $defaults,
88
+                                ISession $session,
89
+                                IProvider $tokenProvider,
90
+                                ISecureRandom $random,
91
+                                IURLGenerator $urlGenerator,
92
+                                ClientMapper $clientMapper,
93
+                                AccessTokenMapper $accessTokenMapper,
94
+                                ICrypto $crypto) {
95
+        parent::__construct($appName, $request);
96
+        $this->userSession = $userSession;
97
+        $this->l10n = $l10n;
98
+        $this->defaults = $defaults;
99
+        $this->session = $session;
100
+        $this->tokenProvider = $tokenProvider;
101
+        $this->random = $random;
102
+        $this->urlGenerator = $urlGenerator;
103
+        $this->clientMapper = $clientMapper;
104
+        $this->accessTokenMapper = $accessTokenMapper;
105
+        $this->crypto = $crypto;
106
+    }
107 107
 
108
-	/**
109
-	 * @return string
110
-	 */
111
-	private function getClientName() {
112
-		$userAgent = $this->request->getHeader('USER_AGENT');
113
-		return $userAgent !== null ? $userAgent : 'unknown';
114
-	}
108
+    /**
109
+     * @return string
110
+     */
111
+    private function getClientName() {
112
+        $userAgent = $this->request->getHeader('USER_AGENT');
113
+        return $userAgent !== null ? $userAgent : 'unknown';
114
+    }
115 115
 
116
-	/**
117
-	 * @param string $stateToken
118
-	 * @return bool
119
-	 */
120
-	private function isValidToken($stateToken) {
121
-		$currentToken = $this->session->get(self::stateName);
122
-		if(!is_string($stateToken) || !is_string($currentToken)) {
123
-			return false;
124
-		}
125
-		return hash_equals($currentToken, $stateToken);
126
-	}
116
+    /**
117
+     * @param string $stateToken
118
+     * @return bool
119
+     */
120
+    private function isValidToken($stateToken) {
121
+        $currentToken = $this->session->get(self::stateName);
122
+        if(!is_string($stateToken) || !is_string($currentToken)) {
123
+            return false;
124
+        }
125
+        return hash_equals($currentToken, $stateToken);
126
+    }
127 127
 
128
-	/**
129
-	 * @return TemplateResponse
130
-	 */
131
-	private function stateTokenForbiddenResponse() {
132
-		$response = new TemplateResponse(
133
-			$this->appName,
134
-			'403',
135
-			[
136
-				'file' => $this->l10n->t('State token does not match'),
137
-			],
138
-			'guest'
139
-		);
140
-		$response->setStatus(Http::STATUS_FORBIDDEN);
141
-		return $response;
142
-	}
128
+    /**
129
+     * @return TemplateResponse
130
+     */
131
+    private function stateTokenForbiddenResponse() {
132
+        $response = new TemplateResponse(
133
+            $this->appName,
134
+            '403',
135
+            [
136
+                'file' => $this->l10n->t('State token does not match'),
137
+            ],
138
+            'guest'
139
+        );
140
+        $response->setStatus(Http::STATUS_FORBIDDEN);
141
+        return $response;
142
+    }
143 143
 
144
-	/**
145
-	 * @PublicPage
146
-	 * @NoCSRFRequired
147
-	 * @UseSession
148
-	 *
149
-	 * @param string $clientIdentifier
150
-	 *
151
-	 * @return TemplateResponse
152
-	 */
153
-	public function showAuthPickerPage($clientIdentifier = '') {
154
-		$clientName = $this->getClientName();
155
-		$client = null;
156
-		if($clientIdentifier !== '') {
157
-			$client = $this->clientMapper->getByIdentifier($clientIdentifier);
158
-			$clientName = $client->getName();
159
-		}
144
+    /**
145
+     * @PublicPage
146
+     * @NoCSRFRequired
147
+     * @UseSession
148
+     *
149
+     * @param string $clientIdentifier
150
+     *
151
+     * @return TemplateResponse
152
+     */
153
+    public function showAuthPickerPage($clientIdentifier = '') {
154
+        $clientName = $this->getClientName();
155
+        $client = null;
156
+        if($clientIdentifier !== '') {
157
+            $client = $this->clientMapper->getByIdentifier($clientIdentifier);
158
+            $clientName = $client->getName();
159
+        }
160 160
 
161
-		// No valid clientIdentifier given and no valid API Request (APIRequest header not set)
162
-		$clientRequest = $this->request->getHeader('OCS-APIREQUEST');
163
-		if ($clientRequest !== 'true' && $client === null) {
164
-			return new TemplateResponse(
165
-				$this->appName,
166
-				'error',
167
-				[
168
-					'errors' =>
169
-					[
170
-						[
171
-							'error' => 'Access Forbidden',
172
-							'hint' => 'Invalid request',
173
-						],
174
-					],
175
-				],
176
-				'guest'
177
-			);
178
-		}
161
+        // No valid clientIdentifier given and no valid API Request (APIRequest header not set)
162
+        $clientRequest = $this->request->getHeader('OCS-APIREQUEST');
163
+        if ($clientRequest !== 'true' && $client === null) {
164
+            return new TemplateResponse(
165
+                $this->appName,
166
+                'error',
167
+                [
168
+                    'errors' =>
169
+                    [
170
+                        [
171
+                            'error' => 'Access Forbidden',
172
+                            'hint' => 'Invalid request',
173
+                        ],
174
+                    ],
175
+                ],
176
+                'guest'
177
+            );
178
+        }
179 179
 
180
-		$stateToken = $this->random->generate(
181
-			64,
182
-			ISecureRandom::CHAR_LOWER.ISecureRandom::CHAR_UPPER.ISecureRandom::CHAR_DIGITS
183
-		);
184
-		$this->session->set(self::stateName, $stateToken);
180
+        $stateToken = $this->random->generate(
181
+            64,
182
+            ISecureRandom::CHAR_LOWER.ISecureRandom::CHAR_UPPER.ISecureRandom::CHAR_DIGITS
183
+        );
184
+        $this->session->set(self::stateName, $stateToken);
185 185
 
186
-		return new TemplateResponse(
187
-			$this->appName,
188
-			'loginflow/authpicker',
189
-			[
190
-				'client' => $clientName,
191
-				'clientIdentifier' => $clientIdentifier,
192
-				'instanceName' => $this->defaults->getName(),
193
-				'urlGenerator' => $this->urlGenerator,
194
-				'stateToken' => $stateToken,
195
-				'serverHost' => $this->request->getServerHost(),
196
-				'oauthState' => $this->session->get('oauth.state'),
197
-			],
198
-			'guest'
199
-		);
200
-	}
186
+        return new TemplateResponse(
187
+            $this->appName,
188
+            'loginflow/authpicker',
189
+            [
190
+                'client' => $clientName,
191
+                'clientIdentifier' => $clientIdentifier,
192
+                'instanceName' => $this->defaults->getName(),
193
+                'urlGenerator' => $this->urlGenerator,
194
+                'stateToken' => $stateToken,
195
+                'serverHost' => $this->request->getServerHost(),
196
+                'oauthState' => $this->session->get('oauth.state'),
197
+            ],
198
+            'guest'
199
+        );
200
+    }
201 201
 
202
-	/**
203
-	 * @NoAdminRequired
204
-	 * @NoCSRFRequired
205
-	 * @UseSession
206
-	 *
207
-	 * @param string $stateToken
208
-	 * @param string $clientIdentifier
209
-	 * @return TemplateResponse
210
-	 */
211
-	public function redirectPage($stateToken = '',
212
-								 $clientIdentifier = '') {
213
-		if(!$this->isValidToken($stateToken)) {
214
-			return $this->stateTokenForbiddenResponse();
215
-		}
202
+    /**
203
+     * @NoAdminRequired
204
+     * @NoCSRFRequired
205
+     * @UseSession
206
+     *
207
+     * @param string $stateToken
208
+     * @param string $clientIdentifier
209
+     * @return TemplateResponse
210
+     */
211
+    public function redirectPage($stateToken = '',
212
+                                    $clientIdentifier = '') {
213
+        if(!$this->isValidToken($stateToken)) {
214
+            return $this->stateTokenForbiddenResponse();
215
+        }
216 216
 
217
-		return new TemplateResponse(
218
-			$this->appName,
219
-			'loginflow/redirect',
220
-			[
221
-				'urlGenerator' => $this->urlGenerator,
222
-				'stateToken' => $stateToken,
223
-				'clientIdentifier' => $clientIdentifier,
224
-				'oauthState' => $this->session->get('oauth.state'),
225
-			],
226
-			'empty'
227
-		);
228
-	}
217
+        return new TemplateResponse(
218
+            $this->appName,
219
+            'loginflow/redirect',
220
+            [
221
+                'urlGenerator' => $this->urlGenerator,
222
+                'stateToken' => $stateToken,
223
+                'clientIdentifier' => $clientIdentifier,
224
+                'oauthState' => $this->session->get('oauth.state'),
225
+            ],
226
+            'empty'
227
+        );
228
+    }
229 229
 
230
-	/**
231
-	 * @NoAdminRequired
232
-	 * @UseSession
233
-	 *
234
-	 * @param string $stateToken
235
-	 * @param string $clientIdentifier
236
-	 * @return Http\RedirectResponse|Response
237
-	 */
238
-	public function generateAppPassword($stateToken,
239
-										$clientIdentifier = '') {
240
-		if(!$this->isValidToken($stateToken)) {
241
-			$this->session->remove(self::stateName);
242
-			return $this->stateTokenForbiddenResponse();
243
-		}
230
+    /**
231
+     * @NoAdminRequired
232
+     * @UseSession
233
+     *
234
+     * @param string $stateToken
235
+     * @param string $clientIdentifier
236
+     * @return Http\RedirectResponse|Response
237
+     */
238
+    public function generateAppPassword($stateToken,
239
+                                        $clientIdentifier = '') {
240
+        if(!$this->isValidToken($stateToken)) {
241
+            $this->session->remove(self::stateName);
242
+            return $this->stateTokenForbiddenResponse();
243
+        }
244 244
 
245
-		$this->session->remove(self::stateName);
245
+        $this->session->remove(self::stateName);
246 246
 
247
-		try {
248
-			$sessionId = $this->session->getId();
249
-		} catch (SessionNotAvailableException $ex) {
250
-			$response = new Response();
251
-			$response->setStatus(Http::STATUS_FORBIDDEN);
252
-			return $response;
253
-		}
247
+        try {
248
+            $sessionId = $this->session->getId();
249
+        } catch (SessionNotAvailableException $ex) {
250
+            $response = new Response();
251
+            $response->setStatus(Http::STATUS_FORBIDDEN);
252
+            return $response;
253
+        }
254 254
 
255
-		try {
256
-			$sessionToken = $this->tokenProvider->getToken($sessionId);
257
-			$loginName = $sessionToken->getLoginName();
258
-			try {
259
-				$password = $this->tokenProvider->getPassword($sessionToken, $sessionId);
260
-			} catch (PasswordlessTokenException $ex) {
261
-				$password = null;
262
-			}
263
-		} catch (InvalidTokenException $ex) {
264
-			$response = new Response();
265
-			$response->setStatus(Http::STATUS_FORBIDDEN);
266
-			return $response;
267
-		}
255
+        try {
256
+            $sessionToken = $this->tokenProvider->getToken($sessionId);
257
+            $loginName = $sessionToken->getLoginName();
258
+            try {
259
+                $password = $this->tokenProvider->getPassword($sessionToken, $sessionId);
260
+            } catch (PasswordlessTokenException $ex) {
261
+                $password = null;
262
+            }
263
+        } catch (InvalidTokenException $ex) {
264
+            $response = new Response();
265
+            $response->setStatus(Http::STATUS_FORBIDDEN);
266
+            return $response;
267
+        }
268 268
 
269
-		$clientName = $this->getClientName();
270
-		$client = false;
271
-		if($clientIdentifier !== '') {
272
-			$client = $this->clientMapper->getByIdentifier($clientIdentifier);
273
-			$clientName = $client->getName();
274
-		}
269
+        $clientName = $this->getClientName();
270
+        $client = false;
271
+        if($clientIdentifier !== '') {
272
+            $client = $this->clientMapper->getByIdentifier($clientIdentifier);
273
+            $clientName = $client->getName();
274
+        }
275 275
 
276
-		$token = $this->random->generate(72, ISecureRandom::CHAR_UPPER.ISecureRandom::CHAR_LOWER.ISecureRandom::CHAR_DIGITS);
277
-		$uid = $this->userSession->getUser()->getUID();
278
-		$generatedToken = $this->tokenProvider->generateToken(
279
-			$token,
280
-			$uid,
281
-			$loginName,
282
-			$password,
283
-			$clientName,
284
-			IToken::PERMANENT_TOKEN,
285
-			IToken::DO_NOT_REMEMBER
286
-		);
276
+        $token = $this->random->generate(72, ISecureRandom::CHAR_UPPER.ISecureRandom::CHAR_LOWER.ISecureRandom::CHAR_DIGITS);
277
+        $uid = $this->userSession->getUser()->getUID();
278
+        $generatedToken = $this->tokenProvider->generateToken(
279
+            $token,
280
+            $uid,
281
+            $loginName,
282
+            $password,
283
+            $clientName,
284
+            IToken::PERMANENT_TOKEN,
285
+            IToken::DO_NOT_REMEMBER
286
+        );
287 287
 
288
-		if($client) {
289
-			$code = $this->random->generate(128);
290
-			$accessToken = new AccessToken();
291
-			$accessToken->setClientId($client->getId());
292
-			$accessToken->setEncryptedToken($this->crypto->encrypt($token, $code));
293
-			$accessToken->setHashedCode(hash('sha512', $code));
294
-			$accessToken->setTokenId($generatedToken->getId());
295
-			$this->accessTokenMapper->insert($accessToken);
288
+        if($client) {
289
+            $code = $this->random->generate(128);
290
+            $accessToken = new AccessToken();
291
+            $accessToken->setClientId($client->getId());
292
+            $accessToken->setEncryptedToken($this->crypto->encrypt($token, $code));
293
+            $accessToken->setHashedCode(hash('sha512', $code));
294
+            $accessToken->setTokenId($generatedToken->getId());
295
+            $this->accessTokenMapper->insert($accessToken);
296 296
 
297
-			$redirectUri = sprintf(
298
-				'%s?state=%s&code=%s',
299
-				$client->getRedirectUri(),
300
-				urlencode($this->session->get('oauth.state')),
301
-				urlencode($code)
302
-			);
303
-			$this->session->remove('oauth.state');
304
-		} else {
305
-			$redirectUri = 'nc://login/server:' . $this->request->getServerHost() . '&user:' . urlencode($loginName) . '&password:' . urlencode($token);
306
-		}
297
+            $redirectUri = sprintf(
298
+                '%s?state=%s&code=%s',
299
+                $client->getRedirectUri(),
300
+                urlencode($this->session->get('oauth.state')),
301
+                urlencode($code)
302
+            );
303
+            $this->session->remove('oauth.state');
304
+        } else {
305
+            $redirectUri = 'nc://login/server:' . $this->request->getServerHost() . '&user:' . urlencode($loginName) . '&password:' . urlencode($token);
306
+        }
307 307
 
308
-		return new Http\RedirectResponse($redirectUri);
309
-	}
308
+        return new Http\RedirectResponse($redirectUri);
309
+    }
310 310
 }
Please login to merge, or discard this patch.