* @NoSameSiteCookieRequired
*/
#[UseSession]
- public function grantPage(string $stateToken): StandaloneTemplateResponse {
+ public function grantPage(?string $stateToken): StandaloneTemplateResponse {
+ if ($stateToken === null) {
+ return $this->stateTokenMissingResponse();
+ }
if (!$this->isValidStateToken($stateToken)) {
return $this->stateTokenForbiddenResponse();
}
/**
* @PublicPage
*/
- public function apptokenRedirect(string $stateToken, string $user, string $password) {
+ public function apptokenRedirect(?string $stateToken, string $user, string $password) {
+ if ($stateToken === null) {
+ return $this->loginTokenForbiddenResponse();
+ }
+
if (!$this->isValidStateToken($stateToken)) {
return $this->stateTokenForbiddenResponse();
}
* @NoAdminRequired
*/
#[UseSession]
- public function generateAppPassword(string $stateToken): Response {
+ public function generateAppPassword(?string $stateToken): Response {
+ if ($stateToken === null) {
+ return $this->stateTokenMissingResponse();
+ }
if (!$this->isValidStateToken($stateToken)) {
return $this->stateTokenForbiddenResponse();
}
return hash_equals($currentToken, $stateToken);
}
+ private function stateTokenMissingResponse(): StandaloneTemplateResponse {
+ $response = new StandaloneTemplateResponse(
+ $this->appName,
+ '403',
+ [
+ 'message' => $this->l10n->t('State token missing'),
+ ],
+ 'guest'
+ );
+ $response->setStatus(Http::STATUS_FORBIDDEN);
+ return $response;
+ }
+
private function stateTokenForbiddenResponse(): StandaloneTemplateResponse {
$response = new StandaloneTemplateResponse(
$this->appName,
$this->controller->showAuthPickerPage();
}
+ public function testGrantPageNoStateToken(): void {
+ $result = $this->controller->grantPage(null);
+
+ $this->assertSame(Http::STATUS_FORBIDDEN, $result->getStatus());
+ }
+
public function testGrantPageInvalidStateToken() {
$this->session->method('get')
->willReturnCallback(function ($name) {