2015-10-23 15:26:54 +00:00
< ? php
/**
2016-07-21 14:49:16 +00:00
* @ copyright Copyright ( c ) 2016 , ownCloud , Inc .
*
2016-05-26 17:56:05 +00:00
* @ author Arthur Schiwon < blizzz @ arthur - schiwon . de >
* @ author Christoph Wurst < christoph @ owncloud . com >
2016-07-21 14:49:16 +00:00
* @ author Joas Schilling < coding @ schilljs . com >
2016-05-26 17:56:05 +00:00
* @ author Lukas Reschke < lukas @ statuscode . ch >
2016-07-21 14:49:16 +00:00
* @ author Roeland Jago Douma < roeland @ famdouma . nl >
2016-01-12 14:02:16 +00:00
* @ author Thomas Müller < thomas . mueller @ tmit . eu >
* @ author Vincent Petry < pvince81 @ owncloud . com >
2015-10-23 15:26:54 +00:00
*
* @ 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 />
*
*/
2015-10-30 15:05:25 +00:00
2016-05-25 14:04:15 +00:00
namespace OCA\DAV\Tests\unit\Connector\Sabre ;
2015-10-23 15:26:54 +00:00
2016-06-01 08:42:38 +00:00
use OC\Authentication\TwoFactorAuth\Manager ;
2016-07-20 16:36:15 +00:00
use OC\Security\Bruteforce\Throttler ;
2016-06-01 08:42:38 +00:00
use OC\User\Session ;
2016-02-16 12:16:52 +00:00
use OCP\IRequest ;
2016-06-01 08:42:38 +00:00
use OCP\ISession ;
2016-01-06 19:48:33 +00:00
use OCP\IUser ;
2015-10-23 15:26:54 +00:00
use Test\TestCase ;
/**
2016-05-25 14:04:15 +00:00
* Class AuthTest
2015-10-23 15:26:54 +00:00
*
2016-05-25 14:04:15 +00:00
* @ package OCA\DAV\Tests\unit\Connector\Sabre
2016-01-06 19:48:33 +00:00
* @ group DB
2015-10-23 15:26:54 +00:00
*/
2016-05-25 14:04:15 +00:00
class AuthTest extends TestCase {
2015-10-23 15:26:54 +00:00
/** @var ISession */
private $session ;
/** @var \OCA\DAV\Connector\Sabre\Auth */
private $auth ;
2016-05-09 13:33:56 +00:00
/** @var Session */
2015-10-23 15:26:54 +00:00
private $userSession ;
2016-02-16 12:16:52 +00:00
/** @var IRequest */
private $request ;
2016-06-01 08:42:38 +00:00
/** @var Manager */
private $twoFactorManager ;
2016-07-20 16:36:15 +00:00
/** @var Throttler */
private $throttler ;
2015-10-23 15:26:54 +00:00
public function setUp () {
parent :: setUp ();
$this -> session = $this -> getMockBuilder ( '\OCP\ISession' )
-> disableOriginalConstructor () -> getMock ();
2016-05-09 13:33:56 +00:00
$this -> userSession = $this -> getMockBuilder ( '\OC\User\Session' )
2015-10-23 15:26:54 +00:00
-> disableOriginalConstructor () -> getMock ();
2016-02-16 12:16:52 +00:00
$this -> request = $this -> getMockBuilder ( '\OCP\IRequest' )
-> disableOriginalConstructor () -> getMock ();
2016-06-01 08:42:38 +00:00
$this -> twoFactorManager = $this -> getMockBuilder ( '\OC\Authentication\TwoFactorAuth\Manager' )
-> disableOriginalConstructor ()
-> getMock ();
2016-07-20 16:36:15 +00:00
$this -> throttler = $this -> getMockBuilder ( '\OC\Security\Bruteforce\Throttler' )
-> disableOriginalConstructor ()
-> getMock ();
2016-02-16 12:16:52 +00:00
$this -> auth = new \OCA\DAV\Connector\Sabre\Auth (
$this -> session ,
$this -> userSession ,
2016-06-01 08:42:38 +00:00
$this -> request ,
2016-07-20 16:36:15 +00:00
$this -> twoFactorManager ,
$this -> throttler
2016-02-16 12:16:52 +00:00
);
2015-10-23 15:26:54 +00:00
}
public function testIsDavAuthenticatedWithoutDavSession () {
$this -> session
-> expects ( $this -> once ())
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( null ));
$this -> assertFalse ( $this -> invokePrivate ( $this -> auth , 'isDavAuthenticated' , [ 'MyTestUser' ]));
}
public function testIsDavAuthenticatedWithWrongDavSession () {
$this -> session
-> expects ( $this -> exactly ( 2 ))
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( 'AnotherUser' ));
$this -> assertFalse ( $this -> invokePrivate ( $this -> auth , 'isDavAuthenticated' , [ 'MyTestUser' ]));
}
public function testIsDavAuthenticatedWithCorrectDavSession () {
$this -> session
-> expects ( $this -> exactly ( 2 ))
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( 'MyTestUser' ));
$this -> assertTrue ( $this -> invokePrivate ( $this -> auth , 'isDavAuthenticated' , [ 'MyTestUser' ]));
}
public function testValidateUserPassOfAlreadyDAVAuthenticatedUser () {
$user = $this -> getMockBuilder ( '\OCP\IUser' )
-> disableOriginalConstructor ()
-> getMock ();
$user -> expects ( $this -> exactly ( 2 ))
-> method ( 'getUID' )
-> will ( $this -> returnValue ( 'MyTestUser' ));
$this -> userSession
-> expects ( $this -> once ())
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( true ));
$this -> userSession
-> expects ( $this -> exactly ( 2 ))
-> method ( 'getUser' )
-> will ( $this -> returnValue ( $user ));
$this -> session
-> expects ( $this -> exactly ( 2 ))
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( 'MyTestUser' ));
$this -> session
-> expects ( $this -> once ())
-> method ( 'close' );
$this -> assertTrue ( $this -> invokePrivate ( $this -> auth , 'validateUserPass' , [ 'MyTestUser' , 'MyTestPassword' ]));
}
public function testValidateUserPassOfInvalidDAVAuthenticatedUser () {
$user = $this -> getMockBuilder ( '\OCP\IUser' )
-> disableOriginalConstructor ()
-> getMock ();
$user -> expects ( $this -> once ())
-> method ( 'getUID' )
-> will ( $this -> returnValue ( 'MyTestUser' ));
$this -> userSession
-> expects ( $this -> once ())
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( true ));
$this -> userSession
-> expects ( $this -> once ())
-> method ( 'getUser' )
-> will ( $this -> returnValue ( $user ));
$this -> session
-> expects ( $this -> exactly ( 2 ))
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( 'AnotherUser' ));
$this -> session
-> expects ( $this -> once ())
-> method ( 'close' );
$this -> assertFalse ( $this -> invokePrivate ( $this -> auth , 'validateUserPass' , [ 'MyTestUser' , 'MyTestPassword' ]));
}
public function testValidateUserPassOfInvalidDAVAuthenticatedUserWithValidPassword () {
$user = $this -> getMockBuilder ( '\OCP\IUser' )
-> disableOriginalConstructor ()
-> getMock ();
2016-06-13 14:00:49 +00:00
$user -> expects ( $this -> exactly ( 3 ))
2015-10-23 15:26:54 +00:00
-> method ( 'getUID' )
-> will ( $this -> returnValue ( 'MyTestUser' ));
$this -> userSession
-> expects ( $this -> once ())
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( true ));
$this -> userSession
2016-06-13 14:00:49 +00:00
-> expects ( $this -> exactly ( 3 ))
2015-10-23 15:26:54 +00:00
-> method ( 'getUser' )
-> will ( $this -> returnValue ( $user ));
$this -> session
-> expects ( $this -> exactly ( 2 ))
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( 'AnotherUser' ));
$this -> userSession
-> expects ( $this -> once ())
2016-05-24 12:08:42 +00:00
-> method ( 'logClientIn' )
2016-06-13 14:00:49 +00:00
-> with ( 'MyTestUser' , 'MyTestPassword' , $this -> request )
2015-10-23 15:26:54 +00:00
-> will ( $this -> returnValue ( true ));
$this -> session
-> expects ( $this -> once ())
-> method ( 'set' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' , 'MyTestUser' );
$this -> session
-> expects ( $this -> once ())
-> method ( 'close' );
$this -> assertTrue ( $this -> invokePrivate ( $this -> auth , 'validateUserPass' , [ 'MyTestUser' , 'MyTestPassword' ]));
}
public function testValidateUserPassWithInvalidPassword () {
$this -> userSession
-> expects ( $this -> once ())
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( false ));
$this -> userSession
-> expects ( $this -> once ())
2016-05-24 12:08:42 +00:00
-> method ( 'logClientIn' )
2015-10-23 15:26:54 +00:00
-> with ( 'MyTestUser' , 'MyTestPassword' )
-> will ( $this -> returnValue ( false ));
$this -> session
-> expects ( $this -> once ())
-> method ( 'close' );
$this -> assertFalse ( $this -> invokePrivate ( $this -> auth , 'validateUserPass' , [ 'MyTestUser' , 'MyTestPassword' ]));
}
2016-06-17 09:18:27 +00:00
/**
* @ expectedException \OCA\DAV\Connector\Sabre\Exception\PasswordLoginForbidden
*/
2016-06-17 09:01:35 +00:00
public function testValidateUserPassWithPasswordLoginForbidden () {
$this -> userSession
-> expects ( $this -> once ())
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( false ));
$this -> userSession
-> expects ( $this -> once ())
-> method ( 'logClientIn' )
-> with ( 'MyTestUser' , 'MyTestPassword' )
-> will ( $this -> throwException ( new \OC\Authentication\Exceptions\PasswordLoginForbiddenException ()));
$this -> session
-> expects ( $this -> once ())
-> method ( 'close' );
2016-06-17 09:18:27 +00:00
$this -> invokePrivate ( $this -> auth , 'validateUserPass' , [ 'MyTestUser' , 'MyTestPassword' ]);
2016-06-17 09:01:35 +00:00
}
2016-03-23 18:31:17 +00:00
2016-02-16 12:16:52 +00:00
public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForNonGet () {
$request = $this -> getMockBuilder ( 'Sabre\HTTP\RequestInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$response = $this -> getMockBuilder ( 'Sabre\HTTP\ResponseInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$this -> userSession
2016-03-23 18:31:17 +00:00
-> expects ( $this -> any ())
2016-02-16 12:16:52 +00:00
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( true ));
2016-03-23 18:31:17 +00:00
$this -> request
-> expects ( $this -> any ())
-> method ( 'getMethod' )
-> willReturn ( 'POST' );
2016-02-16 12:16:52 +00:00
$this -> session
2016-03-23 18:31:17 +00:00
-> expects ( $this -> any ())
2016-02-16 12:16:52 +00:00
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( null ));
2015-10-23 15:26:54 +00:00
$user = $this -> getMockBuilder ( '\OCP\IUser' )
-> disableOriginalConstructor ()
-> getMock ();
2016-03-23 18:31:17 +00:00
$user -> expects ( $this -> any ())
2015-10-23 15:26:54 +00:00
-> method ( 'getUID' )
2016-02-16 12:16:52 +00:00
-> will ( $this -> returnValue ( 'MyWrongDavUser' ));
2015-10-23 15:26:54 +00:00
$this -> userSession
2016-03-23 18:31:17 +00:00
-> expects ( $this -> any ())
2015-10-23 15:26:54 +00:00
-> method ( 'getUser' )
-> will ( $this -> returnValue ( $user ));
2016-03-23 18:31:17 +00:00
$this -> request
-> expects ( $this -> once ())
-> method ( 'passesCSRFCheck' )
-> willReturn ( false );
2015-10-23 15:26:54 +00:00
2016-03-23 18:31:17 +00:00
$expectedResponse = [
false ,
" No 'Authorization: Basic' header found. Either the client didn't send one, or the server is mis-configured " ,
];
2016-02-16 12:16:52 +00:00
$response = $this -> auth -> check ( $request , $response );
2016-03-23 18:31:17 +00:00
$this -> assertSame ( $expectedResponse , $response );
2015-10-23 15:26:54 +00:00
}
2016-03-23 18:31:17 +00:00
public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenAndCorrectlyDavAuthenticated () {
2016-02-16 12:16:52 +00:00
$request = $this -> getMockBuilder ( 'Sabre\HTTP\RequestInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$response = $this -> getMockBuilder ( 'Sabre\HTTP\ResponseInterface' )
2015-10-23 15:26:54 +00:00
-> disableOriginalConstructor ()
-> getMock ();
$this -> userSession
2016-03-23 18:31:17 +00:00
-> expects ( $this -> any ())
2016-02-16 12:16:52 +00:00
-> method ( 'isLoggedIn' )
2016-03-23 18:31:17 +00:00
-> 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 );
2015-10-23 15:26:54 +00:00
$this -> session
2016-03-23 18:31:17 +00:00
-> 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
2016-02-16 12:16:52 +00:00
-> expects ( $this -> once ())
2016-03-23 18:31:17 +00:00
-> method ( 'passesCSRFCheck' )
-> willReturn ( false );
$this -> auth -> check ( $request , $response );
}
2016-06-01 08:42:38 +00:00
/**
* @ expectedException \Sabre\DAV\Exception\NotAuthenticated
* @ expectedExceptionMessage 2 FA 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 );
}
2016-03-23 18:31:17 +00:00
/**
* @ expectedException \Sabre\DAV\Exception\NotAuthenticated
* @ expectedExceptionMessage CSRF check not passed .
*/
public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenAndIncorrectlyDavAuthenticated () {
$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 ( 'AnotherUser' ));
$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 ( false );
$this -> auth -> check ( $request , $response );
}
public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForNonGetAndDesktopClient () {
$request = $this -> getMockBuilder ( 'Sabre\HTTP\RequestInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$response = $this -> getMockBuilder ( 'Sabre\HTTP\ResponseInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$this -> userSession
-> expects ( $this -> any ())
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( true ));
$this -> request
-> expects ( $this -> any ())
-> method ( 'getMethod' )
-> willReturn ( 'POST' );
$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 ( true );
$this -> session
-> expects ( $this -> any ())
2015-10-23 15:26:54 +00:00
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( null ));
$user = $this -> getMockBuilder ( '\OCP\IUser' )
-> disableOriginalConstructor ()
-> getMock ();
2016-03-23 18:31:17 +00:00
$user -> expects ( $this -> any ())
2015-10-23 15:26:54 +00:00
-> method ( 'getUID' )
-> will ( $this -> returnValue ( 'MyWrongDavUser' ));
$this -> userSession
2016-03-23 18:31:17 +00:00
-> expects ( $this -> any ())
2015-10-23 15:26:54 +00:00
-> method ( 'getUser' )
-> will ( $this -> returnValue ( $user ));
2016-02-16 12:16:52 +00:00
$this -> request
-> expects ( $this -> once ())
2016-03-23 18:31:17 +00:00
-> method ( 'passesCSRFCheck' )
-> willReturn ( false );
$this -> auth -> check ( $request , $response );
}
public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForGet () {
$request = $this -> getMockBuilder ( 'Sabre\HTTP\RequestInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$response = $this -> getMockBuilder ( 'Sabre\HTTP\ResponseInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$this -> userSession
-> expects ( $this -> any ())
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( true ));
$this -> session
-> expects ( $this -> any ())
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( null ));
$user = $this -> getMockBuilder ( '\OCP\IUser' )
-> disableOriginalConstructor ()
-> getMock ();
$user -> expects ( $this -> any ())
-> method ( 'getUID' )
-> will ( $this -> returnValue ( 'MyWrongDavUser' ));
$this -> userSession
-> expects ( $this -> any ())
-> method ( 'getUser' )
-> will ( $this -> returnValue ( $user ));
$this -> request
-> expects ( $this -> any ())
2016-02-16 12:16:52 +00:00
-> method ( 'getMethod' )
-> willReturn ( 'GET' );
2015-10-23 15:26:54 +00:00
2016-02-16 12:16:52 +00:00
$response = $this -> auth -> check ( $request , $response );
$this -> assertEquals ([ true , 'principals/users/MyWrongDavUser' ], $response );
2015-10-23 15:26:54 +00:00
}
2016-02-16 12:16:52 +00:00
public function testAuthenticateAlreadyLoggedInWithCsrfTokenForGet () {
2015-11-20 12:35:23 +00:00
$request = $this -> getMockBuilder ( 'Sabre\HTTP\RequestInterface' )
2016-02-16 12:16:52 +00:00
-> disableOriginalConstructor ()
-> getMock ();
2015-11-20 12:35:23 +00:00
$response = $this -> getMockBuilder ( 'Sabre\HTTP\ResponseInterface' )
2016-02-16 12:16:52 +00:00
-> disableOriginalConstructor ()
-> getMock ();
2015-10-23 15:26:54 +00:00
$this -> userSession
2016-03-23 18:31:17 +00:00
-> expects ( $this -> any ())
2015-10-23 15:26:54 +00:00
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( true ));
$this -> session
2016-03-23 18:31:17 +00:00
-> expects ( $this -> any ())
2015-10-23 15:26:54 +00:00
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( null ));
$user = $this -> getMockBuilder ( '\OCP\IUser' )
-> disableOriginalConstructor ()
-> getMock ();
2016-03-23 18:31:17 +00:00
$user -> expects ( $this -> any ())
2015-10-23 15:26:54 +00:00
-> method ( 'getUID' )
-> will ( $this -> returnValue ( 'MyWrongDavUser' ));
$this -> userSession
2016-03-23 18:31:17 +00:00
-> expects ( $this -> any ())
2015-10-23 15:26:54 +00:00
-> method ( 'getUser' )
-> will ( $this -> returnValue ( $user ));
2016-02-16 12:16:52 +00:00
$this -> request
2015-10-23 15:26:54 +00:00
-> expects ( $this -> once ())
2016-02-16 12:16:52 +00:00
-> method ( 'passesCSRFCheck' )
-> willReturn ( true );
2015-10-23 15:26:54 +00:00
2015-11-20 12:35:23 +00:00
$response = $this -> auth -> check ( $request , $response );
2015-11-24 10:15:31 +00:00
$this -> assertEquals ([ true , 'principals/users/MyWrongDavUser' ], $response );
2015-10-23 15:26:54 +00:00
}
public function testAuthenticateNoBasicAuthenticateHeadersProvided () {
$server = $this -> getMockBuilder ( '\Sabre\DAV\Server' )
-> disableOriginalConstructor ()
-> getMock ();
$server -> httpRequest = $this -> getMockBuilder ( '\Sabre\HTTP\RequestInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$server -> httpResponse = $this -> getMockBuilder ( '\Sabre\HTTP\ResponseInterface' )
-> disableOriginalConstructor ()
-> getMock ();
2015-11-20 12:35:23 +00:00
$response = $this -> auth -> check ( $server -> httpRequest , $server -> httpResponse );
$this -> assertEquals ([ false , 'No \'Authorization: Basic\' header found. Either the client didn\'t send one, or the server is mis-configured' ], $response );
2015-10-23 15:26:54 +00:00
}
2015-11-19 13:18:27 +00:00
/**
* @ expectedException \Sabre\DAV\Exception\NotAuthenticated
* @ expectedExceptionMessage Cannot authenticate over ajax calls
*/
public function testAuthenticateNoBasicAuthenticateHeadersProvidedWithAjax () {
2015-11-20 12:35:23 +00:00
/** @var \Sabre\HTTP\RequestInterface $httpRequest */
$httpRequest = $this -> getMockBuilder ( '\Sabre\HTTP\RequestInterface' )
2015-10-23 15:26:54 +00:00
-> disableOriginalConstructor ()
-> getMock ();
2015-11-20 12:35:23 +00:00
/** @var \Sabre\HTTP\ResponseInterface $httpResponse */
$httpResponse = $this -> getMockBuilder ( '\Sabre\HTTP\ResponseInterface' )
2015-10-23 15:26:54 +00:00
-> disableOriginalConstructor ()
-> getMock ();
2015-11-26 15:14:49 +00:00
$this -> userSession
-> expects ( $this -> any ())
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( false ));
2015-11-20 12:35:23 +00:00
$httpRequest
2015-10-23 15:26:54 +00:00
-> expects ( $this -> once ())
-> method ( 'getHeader' )
2015-11-19 13:18:27 +00:00
-> with ( 'X-Requested-With' )
-> will ( $this -> returnValue ( 'XMLHttpRequest' ));
2015-11-20 12:35:23 +00:00
$this -> auth -> check ( $httpRequest , $httpResponse );
2015-11-19 13:18:27 +00:00
}
2015-11-26 15:14:49 +00:00
public function testAuthenticateNoBasicAuthenticateHeadersProvidedWithAjaxButUserIsStillLoggedIn () {
/** @var \Sabre\HTTP\RequestInterface $httpRequest */
$httpRequest = $this -> getMockBuilder ( '\Sabre\HTTP\RequestInterface' )
-> disableOriginalConstructor ()
-> getMock ();
/** @var \Sabre\HTTP\ResponseInterface $httpResponse */
$httpResponse = $this -> getMockBuilder ( '\Sabre\HTTP\ResponseInterface' )
-> disableOriginalConstructor ()
-> getMock ();
2016-01-06 19:48:33 +00:00
/** @var IUser */
2016-07-15 07:52:46 +00:00
$user = $this -> getMockBuilder ( 'OCP\IUser' )
-> disableOriginalConstructor ()
-> getMock ();
2016-01-06 19:48:33 +00:00
$user -> method ( 'getUID' ) -> willReturn ( 'MyTestUser' );
2015-11-26 15:14:49 +00:00
$this -> userSession
-> expects ( $this -> any ())
-> method ( 'isLoggedIn' )
-> will ( $this -> returnValue ( true ));
2016-01-06 19:48:33 +00:00
$this -> userSession
-> expects ( $this -> any ())
-> method ( 'getUser' )
-> willReturn ( $user );
2015-11-26 15:14:49 +00:00
$this -> session
2016-01-06 19:48:33 +00:00
-> expects ( $this -> atLeastOnce ())
2015-11-26 15:14:49 +00:00
-> method ( 'get' )
-> with ( 'AUTHENTICATED_TO_DAV_BACKEND' )
-> will ( $this -> returnValue ( 'MyTestUser' ));
2016-03-23 18:31:17 +00:00
$this -> request
-> expects ( $this -> once ())
-> method ( 'getMethod' )
-> willReturn ( 'GET' );
2015-11-26 15:14:49 +00:00
$httpRequest
2016-01-06 19:48:33 +00:00
-> expects ( $this -> atLeastOnce ())
2015-11-26 15:14:49 +00:00
-> method ( 'getHeader' )
-> with ( 'Authorization' )
-> will ( $this -> returnValue ( null ));
2016-01-06 19:48:33 +00:00
$this -> assertEquals (
[ true , 'principals/users/MyTestUser' ],
$this -> auth -> check ( $httpRequest , $httpResponse )
);
2015-11-26 15:14:49 +00:00
}
2015-11-19 13:18:27 +00:00
public function testAuthenticateValidCredentials () {
$server = $this -> getMockBuilder ( '\Sabre\DAV\Server' )
-> disableOriginalConstructor ()
-> getMock ();
$server -> httpRequest = $this -> getMockBuilder ( '\Sabre\HTTP\RequestInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$server -> httpRequest
-> expects ( $this -> at ( 0 ))
-> method ( 'getHeader' )
-> with ( 'X-Requested-With' )
-> will ( $this -> returnValue ( null ));
$server -> httpRequest
-> expects ( $this -> at ( 1 ))
-> method ( 'getHeader' )
2015-10-23 15:26:54 +00:00
-> with ( 'Authorization' )
-> will ( $this -> returnValue ( 'basic dXNlcm5hbWU6cGFzc3dvcmQ=' ));
$server -> httpResponse = $this -> getMockBuilder ( '\Sabre\HTTP\ResponseInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$this -> userSession
-> expects ( $this -> once ())
2016-05-24 12:08:42 +00:00
-> method ( 'logClientIn' )
2015-10-23 15:26:54 +00:00
-> with ( 'username' , 'password' )
-> will ( $this -> returnValue ( true ));
$user = $this -> getMockBuilder ( '\OCP\IUser' )
-> disableOriginalConstructor ()
-> getMock ();
2016-06-13 14:00:49 +00:00
$user -> expects ( $this -> exactly ( 3 ))
2015-10-23 15:26:54 +00:00
-> method ( 'getUID' )
-> will ( $this -> returnValue ( 'MyTestUser' ));
$this -> userSession
2016-06-13 14:00:49 +00:00
-> expects ( $this -> exactly ( 3 ))
2015-10-23 15:26:54 +00:00
-> method ( 'getUser' )
-> will ( $this -> returnValue ( $user ));
2015-11-20 12:35:23 +00:00
$response = $this -> auth -> check ( $server -> httpRequest , $server -> httpResponse );
2016-03-21 20:53:16 +00:00
$this -> assertEquals ([ true , 'principals/users/MyTestUser' ], $response );
2015-10-23 15:26:54 +00:00
}
public function testAuthenticateInvalidCredentials () {
$server = $this -> getMockBuilder ( '\Sabre\DAV\Server' )
-> disableOriginalConstructor ()
-> getMock ();
$server -> httpRequest = $this -> getMockBuilder ( '\Sabre\HTTP\RequestInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$server -> httpRequest
2015-11-19 13:18:27 +00:00
-> expects ( $this -> at ( 0 ))
-> method ( 'getHeader' )
-> with ( 'X-Requested-With' )
-> will ( $this -> returnValue ( null ));
$server -> httpRequest
-> expects ( $this -> at ( 1 ))
2015-10-23 15:26:54 +00:00
-> method ( 'getHeader' )
-> with ( 'Authorization' )
-> will ( $this -> returnValue ( 'basic dXNlcm5hbWU6cGFzc3dvcmQ=' ));
$server -> httpResponse = $this -> getMockBuilder ( '\Sabre\HTTP\ResponseInterface' )
-> disableOriginalConstructor ()
-> getMock ();
$this -> userSession
-> expects ( $this -> once ())
2016-05-24 12:08:42 +00:00
-> method ( 'logClientIn' )
2015-10-23 15:26:54 +00:00
-> with ( 'username' , 'password' )
-> will ( $this -> returnValue ( false ));
2015-11-20 12:35:23 +00:00
$response = $this -> auth -> check ( $server -> httpRequest , $server -> httpResponse );
$this -> assertEquals ([ false , 'Username or password was incorrect' ], $response );
2015-10-23 15:26:54 +00:00
}
}