|
|
@@ -1,9 +1,22 @@ |
|
|
|
<?php |
|
|
|
/** |
|
|
|
* Copyright (c) 2014-2015 Lukas Reschke <lukas@owncloud.com> |
|
|
|
* This file is licensed under the Affero General Public License version 3 or |
|
|
|
* later. |
|
|
|
* See the COPYING-README file. |
|
|
|
* @author Lukas Reschke <lukas@owncloud.com> |
|
|
|
* |
|
|
|
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|
|
|
* @license AGPL-3.0 |
|
|
|
* |
|
|
|
* This code is free software: you can redistribute it and/or modify |
|
|
|
* it under the terms of the GNU Affero General Public License, version 3, |
|
|
|
* as published by the Free Software Foundation. |
|
|
|
* |
|
|
|
* 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, version 3, |
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|
|
|
* |
|
|
|
*/ |
|
|
|
|
|
|
|
namespace OC\Core\LostPassword\Controller; |
|
|
@@ -47,6 +60,8 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { |
|
|
|
->disableOriginalConstructor()->getMock(); |
|
|
|
$this->container['SecureRandom'] = $this->getMockBuilder('\OCP\Security\ISecureRandom') |
|
|
|
->disableOriginalConstructor()->getMock(); |
|
|
|
$this->container['TimeFactory'] = $this->getMockBuilder('\OCP\AppFramework\Utility\ITimeFactory') |
|
|
|
->disableOriginalConstructor()->getMock(); |
|
|
|
$this->container['IsEncryptionEnabled'] = true; |
|
|
|
$this->lostController = $this->container['LostController']; |
|
|
|
} |
|
|
@@ -116,6 +131,10 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { |
|
|
|
->method('userExists') |
|
|
|
->with('ExistingUser') |
|
|
|
->will($this->returnValue(true)); |
|
|
|
$this->container['TimeFactory'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('getTime') |
|
|
|
->will($this->returnValue(12348)); |
|
|
|
$this->container['Config'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('getUserValue') |
|
|
@@ -128,7 +147,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { |
|
|
|
$this->container['Config'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('setUserValue') |
|
|
|
->with('ExistingUser', 'owncloud', 'lostpassword', 'ThisIsMaybeANotSoSecretToken!'); |
|
|
|
->with('ExistingUser', 'owncloud', 'lostpassword', '12348:ThisIsMaybeANotSoSecretToken!'); |
|
|
|
$this->container['URLGenerator'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('linkToRouteAbsolute') |
|
|
@@ -190,7 +209,11 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { |
|
|
|
$this->container['Config'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('setUserValue') |
|
|
|
->with('ExistingUser', 'owncloud', 'lostpassword', 'ThisIsMaybeANotSoSecretToken!'); |
|
|
|
->with('ExistingUser', 'owncloud', 'lostpassword', '12348:ThisIsMaybeANotSoSecretToken!'); |
|
|
|
$this->container['TimeFactory'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('getTime') |
|
|
|
->will($this->returnValue(12348)); |
|
|
|
$this->container['URLGenerator'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('linkToRouteAbsolute') |
|
|
@@ -256,9 +279,13 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { |
|
|
|
->expects($this->once()) |
|
|
|
->method('getUserValue') |
|
|
|
->with('ValidTokenUser', 'owncloud', 'lostpassword', null) |
|
|
|
->will($this->returnValue('TheOnlyAndOnlyOneTokenToResetThePassword')); |
|
|
|
->will($this->returnValue('12345:TheOnlyAndOnlyOneTokenToResetThePassword')); |
|
|
|
$user = $this->getMockBuilder('\OCP\IUser') |
|
|
|
->disableOriginalConstructor()->getMock(); |
|
|
|
$user |
|
|
|
->expects($this->once()) |
|
|
|
->method('getLastLogin') |
|
|
|
->will($this->returnValue(12344)); |
|
|
|
$user->expects($this->once()) |
|
|
|
->method('setPassword') |
|
|
|
->with('NewPassword') |
|
|
@@ -272,12 +299,94 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { |
|
|
|
->expects($this->once()) |
|
|
|
->method('deleteUserValue') |
|
|
|
->with('ValidTokenUser', 'owncloud', 'lostpassword'); |
|
|
|
$this->container['TimeFactory'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('getTime') |
|
|
|
->will($this->returnValue(12348)); |
|
|
|
|
|
|
|
$response = $this->lostController->setPassword('TheOnlyAndOnlyOneTokenToResetThePassword', 'ValidTokenUser', 'NewPassword', true); |
|
|
|
$expectedResponse = array('status' => 'success'); |
|
|
|
$this->assertSame($expectedResponse, $response); |
|
|
|
} |
|
|
|
|
|
|
|
public function testSetPasswordExpiredToken() { |
|
|
|
$this->container['Config'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('getUserValue') |
|
|
|
->with('ValidTokenUser', 'owncloud', 'lostpassword', null) |
|
|
|
->will($this->returnValue('12345:TheOnlyAndOnlyOneTokenToResetThePassword')); |
|
|
|
$user = $this->getMockBuilder('\OCP\IUser') |
|
|
|
->disableOriginalConstructor()->getMock(); |
|
|
|
$this->container['UserManager'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('get') |
|
|
|
->with('ValidTokenUser') |
|
|
|
->will($this->returnValue($user)); |
|
|
|
$this->container['TimeFactory'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('getTime') |
|
|
|
->will($this->returnValue(55546)); |
|
|
|
|
|
|
|
$response = $this->lostController->setPassword('TheOnlyAndOnlyOneTokenToResetThePassword', 'ValidTokenUser', 'NewPassword', true); |
|
|
|
$expectedResponse = [ |
|
|
|
'status' => 'error', |
|
|
|
'msg' => 'Couldn\'t reset password because the token is expired', |
|
|
|
]; |
|
|
|
$this->assertSame($expectedResponse, $response); |
|
|
|
} |
|
|
|
|
|
|
|
public function testSetPasswordInvalidDataInDb() { |
|
|
|
$this->container['Config'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('getUserValue') |
|
|
|
->with('ValidTokenUser', 'owncloud', 'lostpassword', null) |
|
|
|
->will($this->returnValue('TheOnlyAndOnlyOneTokenToResetThePassword')); |
|
|
|
$user = $this->getMockBuilder('\OCP\IUser') |
|
|
|
->disableOriginalConstructor()->getMock(); |
|
|
|
$this->container['UserManager'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('get') |
|
|
|
->with('ValidTokenUser') |
|
|
|
->will($this->returnValue($user)); |
|
|
|
|
|
|
|
$response = $this->lostController->setPassword('TheOnlyAndOnlyOneTokenToResetThePassword', 'ValidTokenUser', 'NewPassword', true); |
|
|
|
$expectedResponse = [ |
|
|
|
'status' => 'error', |
|
|
|
'msg' => 'Couldn\'t reset password because the token is invalid', |
|
|
|
]; |
|
|
|
$this->assertSame($expectedResponse, $response); |
|
|
|
} |
|
|
|
|
|
|
|
public function testSetPasswordExpiredTokenDueToLogin() { |
|
|
|
$this->container['Config'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('getUserValue') |
|
|
|
->with('ValidTokenUser', 'owncloud', 'lostpassword', null) |
|
|
|
->will($this->returnValue('12345:TheOnlyAndOnlyOneTokenToResetThePassword')); |
|
|
|
$user = $this->getMockBuilder('\OCP\IUser') |
|
|
|
->disableOriginalConstructor()->getMock(); |
|
|
|
$user |
|
|
|
->expects($this->once()) |
|
|
|
->method('getLastLogin') |
|
|
|
->will($this->returnValue(12346)); |
|
|
|
$this->container['UserManager'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('get') |
|
|
|
->with('ValidTokenUser') |
|
|
|
->will($this->returnValue($user)); |
|
|
|
$this->container['TimeFactory'] |
|
|
|
->expects($this->once()) |
|
|
|
->method('getTime') |
|
|
|
->will($this->returnValue(12345)); |
|
|
|
|
|
|
|
$response = $this->lostController->setPassword('TheOnlyAndOnlyOneTokenToResetThePassword', 'ValidTokenUser', 'NewPassword', true); |
|
|
|
$expectedResponse = [ |
|
|
|
'status' => 'error', |
|
|
|
'msg' => 'Couldn\'t reset password because the token is expired', |
|
|
|
]; |
|
|
|
$this->assertSame($expectedResponse, $response); |
|
|
|
} |
|
|
|
|
|
|
|
public function testIsSetPasswordWithoutTokenFailing() { |
|
|
|
$this->container['Config'] |
|
|
|
->expects($this->once()) |