Browse Source
Add CSRF token controller to retrieve the current CSRF token
Add CSRF token controller to retrieve the current CSRF token
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>pull/8648/head
5 changed files with 157 additions and 32 deletions
-
63core/Controller/CSRFTokenController.php
-
37core/js/js.js
-
12core/js/tests/specs/coreSpec.js
-
6core/routes.php
-
71tests/Core/Controller/CSRFTokenControllerTest.php
@ -0,0 +1,63 @@ |
|||
<?php |
|||
declare(strict_types=1); |
|||
|
|||
/** |
|||
* @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at> |
|||
* |
|||
* @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OC\Core\Controller; |
|||
|
|||
use OC\Security\CSRF\CsrfTokenManager; |
|||
use OCP\AppFramework\Controller; |
|||
use OCP\AppFramework\Http\JSONResponse; |
|||
use OCP\IRequest; |
|||
|
|||
class CSRFTokenController extends Controller { |
|||
|
|||
/** @var CsrfTokenManager */ |
|||
private $tokenManager; |
|||
|
|||
/** |
|||
* @param string $appName |
|||
* @param IRequest $request |
|||
* @param CsrfTokenManager $tokenManager |
|||
*/ |
|||
public function __construct(string $appName, IRequest $request, |
|||
CsrfTokenManager $tokenManager) { |
|||
parent::__construct($appName, $request); |
|||
$this->tokenManager = $tokenManager; |
|||
} |
|||
|
|||
/** |
|||
* @NoAdminRequired |
|||
* @NoCSRFRequired |
|||
* @PublicPage |
|||
* @return JSONResponse |
|||
*/ |
|||
public function index(): JSONResponse { |
|||
$requestToken = $this->tokenManager->getToken(); |
|||
|
|||
return new JSONResponse([ |
|||
'token' => $requestToken->getEncryptedValue(), |
|||
]); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,71 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at> |
|||
* |
|||
* @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace Tests\Core\Controller; |
|||
|
|||
use OC\Core\Controller\CSRFTokenController; |
|||
use OC\Security\CSRF\CsrfToken; |
|||
use OC\Security\CSRF\CsrfTokenManager; |
|||
use OCP\AppFramework\Http; |
|||
use OCP\AppFramework\Http\JSONResponse; |
|||
use OCP\IRequest; |
|||
use PHPUnit_Framework_MockObject_MockObject; |
|||
use Test\TestCase; |
|||
|
|||
class CSRFTokenControllerTest extends TestCase { |
|||
|
|||
/** @var CSRFTokenController */ |
|||
private $controller; |
|||
|
|||
/** @var IRequest|PHPUnit_Framework_MockObject_MockObject */ |
|||
private $request; |
|||
|
|||
/** @var CsrfTokenManager|PHPUnit_Framework_MockObject_MockObject */ |
|||
private $tokenManager; |
|||
|
|||
protected function setUp() { |
|||
parent::setUp(); |
|||
|
|||
$this->request = $this->createMock(IRequest::class); |
|||
$this->tokenManager = $this->createMock(CsrfTokenManager::class); |
|||
|
|||
$this->controller = new CSRFTokenController('core', $this->request, |
|||
$this->tokenManager); |
|||
} |
|||
|
|||
public function testGetToken() { |
|||
$token = $this->createMock(CsrfToken::class); |
|||
$this->tokenManager->method('getToken')->willReturn($token); |
|||
$token->method('getEncryptedValue')->willReturn('toktok123'); |
|||
|
|||
$response = $this->controller->index(); |
|||
|
|||
$this->assertInstanceOf(JSONResponse::class, $response); |
|||
$this->assertSame(Http::STATUS_OK, $response->getStatus()); |
|||
$this->assertEquals([ |
|||
'token' => 'toktok123' |
|||
], $response->getData()); |
|||
} |
|||
|
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue