|
|
|
@ -27,11 +27,12 @@ |
|
|
|
|
|
|
|
|
|
namespace OCA\DAV\Tests\unit\Connector\Sabre; |
|
|
|
|
|
|
|
|
|
use OC\Authentication\TwoFactorAuth\Manager; |
|
|
|
|
use OC\User\Session; |
|
|
|
|
use OCP\IRequest; |
|
|
|
|
use OCP\ISession; |
|
|
|
|
use OCP\IUser; |
|
|
|
|
use Test\TestCase; |
|
|
|
|
use OCP\ISession; |
|
|
|
|
use OC\User\Session; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Class AuthTest |
|
|
|
@ -48,6 +49,8 @@ class AuthTest extends TestCase { |
|
|
|
|
private $userSession; |
|
|
|
|
/** @var IRequest */ |
|
|
|
|
private $request; |
|
|
|
|
/** @var Manager */ |
|
|
|
|
private $twoFactorManager; |
|
|
|
|
|
|
|
|
|
public function setUp() { |
|
|
|
|
parent::setUp(); |
|
|
|
@ -57,10 +60,14 @@ class AuthTest extends TestCase { |
|
|
|
|
->disableOriginalConstructor()->getMock(); |
|
|
|
|
$this->request = $this->getMockBuilder('\OCP\IRequest') |
|
|
|
|
->disableOriginalConstructor()->getMock(); |
|
|
|
|
$this->twoFactorManager = $this->getMockBuilder('\OC\Authentication\TwoFactorAuth\Manager') |
|
|
|
|
->disableOriginalConstructor() |
|
|
|
|
->getMock(); |
|
|
|
|
$this->auth = new \OCA\DAV\Connector\Sabre\Auth( |
|
|
|
|
$this->session, |
|
|
|
|
$this->userSession, |
|
|
|
|
$this->request |
|
|
|
|
$this->request, |
|
|
|
|
$this->twoFactorManager |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -295,6 +302,59 @@ class AuthTest extends TestCase { |
|
|
|
|
$this->auth->check($request, $response); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @expectedException \Sabre\DAV\Exception\NotAuthenticated |
|
|
|
|
* @expectedExceptionMessage 2FA challenge not passed. |
|
|
|
|
*/ |
|
|
|
|
public function testAuthenticateAlreadyLoggedInWithoutTwoFactorChallengePassed() { |
|
|
|
|
$request = $this->getMockBuilder('Sabre\HTTP\RequestInterface') |
|
|
|
|
->disableOriginalConstructor() |
|
|
|
|
->getMock(); |
|
|
|
|
$response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface') |
|
|
|
|
->disableOriginalConstructor() |
|
|
|
|
->getMock(); |
|
|
|
|
$this->userSession |
|
|
|
|
->expects($this->any()) |
|
|
|
|
->method('isLoggedIn') |
|
|
|
|
->willReturn(true); |
|
|
|
|
$this->request |
|
|
|
|
->expects($this->any()) |
|
|
|
|
->method('getMethod') |
|
|
|
|
->willReturn('PROPFIND'); |
|
|
|
|
$this->request |
|
|
|
|
->expects($this->any()) |
|
|
|
|
->method('isUserAgent') |
|
|
|
|
->with([ |
|
|
|
|
'/^Mozilla\/5\.0 \([A-Za-z ]+\) (mirall|csyncoC)\/.*$/', |
|
|
|
|
'/^Mozilla\/5\.0 \(Android\) ownCloud\-android.*$/', |
|
|
|
|
'/^Mozilla\/5\.0 \(iOS\) ownCloud\-iOS.*$/', |
|
|
|
|
]) |
|
|
|
|
->willReturn(false); |
|
|
|
|
$this->session |
|
|
|
|
->expects($this->any()) |
|
|
|
|
->method('get') |
|
|
|
|
->with('AUTHENTICATED_TO_DAV_BACKEND') |
|
|
|
|
->will($this->returnValue('LoggedInUser')); |
|
|
|
|
$user = $this->getMockBuilder('\OCP\IUser') |
|
|
|
|
->disableOriginalConstructor() |
|
|
|
|
->getMock(); |
|
|
|
|
$user->expects($this->any()) |
|
|
|
|
->method('getUID') |
|
|
|
|
->will($this->returnValue('LoggedInUser')); |
|
|
|
|
$this->userSession |
|
|
|
|
->expects($this->any()) |
|
|
|
|
->method('getUser') |
|
|
|
|
->will($this->returnValue($user)); |
|
|
|
|
$this->request |
|
|
|
|
->expects($this->once()) |
|
|
|
|
->method('passesCSRFCheck') |
|
|
|
|
->willReturn(true); |
|
|
|
|
$this->twoFactorManager->expects($this->once()) |
|
|
|
|
->method('needsSecondFactor') |
|
|
|
|
->will($this->returnValue(true)); |
|
|
|
|
$this->auth->check($request, $response); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @expectedException \Sabre\DAV\Exception\NotAuthenticated |
|
|
|
|
* @expectedExceptionMessage CSRF check not passed. |
|
|
|
|