From 2ade2bef8c7c030258943b680401aec64bcdb9a2 Mon Sep 17 00:00:00 2001 From: Daniel Kesselberg Date: Sun, 17 Feb 2019 22:45:05 +0100 Subject: [PATCH 1/3] Publish activity for app token created by ocs api Signed-off-by: Daniel Kesselberg --- core/Controller/AppPasswordController.php | 33 +++++++++++++++++-- .../Controller/AppPasswordControllerTest.php | 25 +++++++++++++- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/core/Controller/AppPasswordController.php b/core/Controller/AppPasswordController.php index ce06730694e..b7cbc65e8c0 100644 --- a/core/Controller/AppPasswordController.php +++ b/core/Controller/AppPasswordController.php @@ -24,13 +24,17 @@ declare(strict_types=1); namespace OC\Core\Controller; +use BadMethodCallException; use OC\Authentication\Token\IProvider; use OC\Authentication\Token\IToken; +use OC\Settings\Activity\Provider; +use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\Authentication\Exceptions\CredentialsUnavailableException; use OCP\Authentication\Exceptions\PasswordUnavailableException; use OCP\Authentication\LoginCredentials\IStore; +use OCP\ILogger; use OCP\IRequest; use OCP\ISession; use OCP\Security\ISecureRandom; @@ -46,6 +50,12 @@ class AppPasswordController extends \OCP\AppFramework\OCSController { /** @var IProvider */ private $tokenProvider; + /** @var IActivityManager */ + private $activityManager; + + /** @var ILogger */ + private $logger; + /** @var IStore */ private $credentialStore; @@ -54,13 +64,17 @@ class AppPasswordController extends \OCP\AppFramework\OCSController { ISession $session, ISecureRandom $random, IProvider $tokenProvider, - IStore $credentialStore) { + IStore $credentialStore, + IActivityManager $activityManager, + ILogger $logger) { parent::__construct($appName, $request); $this->session = $session; $this->random = $random; $this->tokenProvider = $tokenProvider; $this->credentialStore = $credentialStore; + $this->activityManager = $activityManager; + $this->logger = $logger; } /** @@ -91,7 +105,7 @@ class AppPasswordController extends \OCP\AppFramework\OCSController { $token = $this->random->generate(72, ISecureRandom::CHAR_UPPER.ISecureRandom::CHAR_LOWER.ISecureRandom::CHAR_DIGITS); - $this->tokenProvider->generateToken( + $generatedToken = $this->tokenProvider->generateToken( $token, $credentials->getUID(), $credentials->getLoginName(), @@ -101,6 +115,21 @@ class AppPasswordController extends \OCP\AppFramework\OCSController { IToken::DO_NOT_REMEMBER ); + $event = $this->activityManager->generateEvent(); + $event->setApp('settings') + ->setType('security') + ->setAffectedUser($credentials->getUID()) + ->setAuthor($credentials->getUID()) + ->setSubject(Provider::APP_TOKEN_CREATED, ['name' => $generatedToken->getName()]) + ->setObject('app_token', $generatedToken->getId(), 'App Password'); + + try { + $this->activityManager->publish($event); + } catch (BadMethodCallException $e) { + $this->logger->warning('could not publish activity'); + $this->logger->logException($e); + } + return new DataResponse([ 'apppassword' => $token ]); diff --git a/tests/Core/Controller/AppPasswordControllerTest.php b/tests/Core/Controller/AppPasswordControllerTest.php index f0c223ccc1d..ace6170f984 100644 --- a/tests/Core/Controller/AppPasswordControllerTest.php +++ b/tests/Core/Controller/AppPasswordControllerTest.php @@ -27,11 +27,14 @@ namespace Tests\Core\Controller; use OC\Authentication\Token\IProvider; use OC\Authentication\Token\IToken; use OC\Core\Controller\AppPasswordController; +use OCP\Activity\IEvent; +use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\Authentication\Exceptions\CredentialsUnavailableException; use OCP\Authentication\Exceptions\PasswordUnavailableException; use OCP\Authentication\LoginCredentials\ICredentials; use OCP\Authentication\LoginCredentials\IStore; +use OCP\ILogger; use OCP\IRequest; use OCP\ISession; use OCP\Security\ISecureRandom; @@ -55,6 +58,9 @@ class AppPasswordControllerTest extends TestCase { /** @var IRequest|MockObject */ private $request; + /** @var IActivityManager|\PHPUnit_Framework_MockObject_MockObject */ + private $activityManager; + /** @var AppPasswordController */ private $controller; @@ -66,6 +72,9 @@ class AppPasswordControllerTest extends TestCase { $this->tokenProvider = $this->createMock(IProvider::class); $this->credentialStore = $this->createMock(IStore::class); $this->request = $this->createMock(IRequest::class); + $this->activityManager = $this->createMock(IActivityManager::class); + /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject $logger */ + $logger = $this->createMock(ILogger::class); $this->controller = new AppPasswordController( 'core', @@ -73,7 +82,9 @@ class AppPasswordControllerTest extends TestCase { $this->session, $this->random, $this->tokenProvider, - $this->credentialStore + $this->credentialStore, + $this->activityManager, + $logger ); } @@ -134,6 +145,12 @@ class AppPasswordControllerTest extends TestCase { IToken::DO_NOT_REMEMBER ); + $this->activityManager->expects($this->once()) + ->method('generateEvent') + ->willReturn($this->createMock(IEvent::class)); + $this->activityManager->expects($this->once()) + ->method('publish'); + $this->controller->getAppPassword(); } @@ -172,6 +189,12 @@ class AppPasswordControllerTest extends TestCase { IToken::DO_NOT_REMEMBER ); + $this->activityManager->expects($this->once()) + ->method('generateEvent') + ->willReturn($this->createMock(IEvent::class)); + $this->activityManager->expects($this->once()) + ->method('publish'); + $this->controller->getAppPassword(); } From 149a98edf69558ade2176467fd1d78919ee0b8c7 Mon Sep 17 00:00:00 2001 From: Daniel Kesselberg Date: Sun, 17 Feb 2019 23:49:54 +0100 Subject: [PATCH 2/3] Publish activity for app token created by client login flow Signed-off-by: Daniel Kesselberg --- core/Controller/ClientFlowLoginController.php | 31 +++++++++++++++- .../ClientFlowLoginControllerTest.php | 36 ++++++++++++++++++- 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/core/Controller/ClientFlowLoginController.php b/core/Controller/ClientFlowLoginController.php index f73e3f260a7..9ca530184af 100644 --- a/core/Controller/ClientFlowLoginController.php +++ b/core/Controller/ClientFlowLoginController.php @@ -26,19 +26,23 @@ namespace OC\Core\Controller; +use BadMethodCallException; use OC\Authentication\Exceptions\InvalidTokenException; use OC\Authentication\Exceptions\PasswordlessTokenException; use OC\Authentication\Token\IProvider; use OC\Authentication\Token\IToken; +use OC\Settings\Activity\Provider; use OCA\OAuth2\Db\AccessToken; use OCA\OAuth2\Db\AccessTokenMapper; use OCA\OAuth2\Db\ClientMapper; +use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Response; use OCP\AppFramework\Http\StandaloneTemplateResponse; use OCP\Defaults; use OCP\IL10N; +use OCP\ILogger; use OCP\IRequest; use OCP\ISession; use OCP\IURLGenerator; @@ -68,6 +72,10 @@ class ClientFlowLoginController extends Controller { private $accessTokenMapper; /** @var ICrypto */ private $crypto; + /** @var IActivityManager */ + private $activityManager; + /** @var ILogger */ + private $logger; const stateName = 'client.flow.state.token'; @@ -84,6 +92,8 @@ class ClientFlowLoginController extends Controller { * @param ClientMapper $clientMapper * @param AccessTokenMapper $accessTokenMapper * @param ICrypto $crypto + * @param IActivityManager $activityManager + * @param ILogger $logger */ public function __construct($appName, IRequest $request, @@ -96,7 +106,9 @@ class ClientFlowLoginController extends Controller { IURLGenerator $urlGenerator, ClientMapper $clientMapper, AccessTokenMapper $accessTokenMapper, - ICrypto $crypto) { + ICrypto $crypto, + IActivityManager $activityManager, + ILogger $logger) { parent::__construct($appName, $request); $this->userSession = $userSession; $this->l10n = $l10n; @@ -108,6 +120,8 @@ class ClientFlowLoginController extends Controller { $this->clientMapper = $clientMapper; $this->accessTokenMapper = $accessTokenMapper; $this->crypto = $crypto; + $this->activityManager = $activityManager; + $this->logger = $logger; } /** @@ -324,6 +338,21 @@ class ClientFlowLoginController extends Controller { $this->tokenProvider->invalidateToken($sessionId); } + $event = $this->activityManager->generateEvent(); + $event->setApp('settings') + ->setType('security') + ->setAffectedUser($uid) + ->setAuthor($uid) + ->setSubject(Provider::APP_TOKEN_CREATED, ['name' => $generatedToken->getName()]) + ->setObject('app_token', $generatedToken->getId(), 'App Password'); + + try { + $this->activityManager->publish($event); + } catch (BadMethodCallException $e) { + $this->logger->warning('could not publish activity'); + $this->logger->logException($e); + } + return new Http\RedirectResponse($redirectUri); } diff --git a/tests/Core/Controller/ClientFlowLoginControllerTest.php b/tests/Core/Controller/ClientFlowLoginControllerTest.php index eddcc1bbdb9..ed84d456de1 100644 --- a/tests/Core/Controller/ClientFlowLoginControllerTest.php +++ b/tests/Core/Controller/ClientFlowLoginControllerTest.php @@ -29,10 +29,13 @@ use OC\Core\Controller\ClientFlowLoginController; use OCA\OAuth2\Db\AccessTokenMapper; use OCA\OAuth2\Db\Client; use OCA\OAuth2\Db\ClientMapper; +use OCP\Activity\IEvent; +use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\Http; use OCP\AppFramework\Http\StandaloneTemplateResponse; use OCP\Defaults; use OCP\IL10N; +use OCP\ILogger; use OCP\IRequest; use OCP\ISession; use OCP\IURLGenerator; @@ -66,6 +69,8 @@ class ClientFlowLoginControllerTest extends TestCase { private $accessTokenMapper; /** @var ICrypto|\PHPUnit_Framework_MockObject_MockObject */ private $crypto; + /** @var IActivityManager|\PHPUnit_Framework_MockObject_MockObject */ + private $activityManager; /** @var ClientFlowLoginController */ private $clientFlowLoginController; @@ -90,6 +95,9 @@ class ClientFlowLoginControllerTest extends TestCase { $this->clientMapper = $this->createMock(ClientMapper::class); $this->accessTokenMapper = $this->createMock(AccessTokenMapper::class); $this->crypto = $this->createMock(ICrypto::class); + $this->activityManager = $this->createMock(IActivityManager::class); + /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject $logger */ + $logger = $this->createMock(ILogger::class); $this->clientFlowLoginController = new ClientFlowLoginController( 'core', @@ -103,7 +111,9 @@ class ClientFlowLoginControllerTest extends TestCase { $this->urlGenerator, $this->clientMapper, $this->accessTokenMapper, - $this->crypto + $this->crypto, + $this->activityManager, + $logger ); } @@ -378,6 +388,12 @@ class ClientFlowLoginControllerTest extends TestCase { ->method('getHeader') ->willReturn(''); + $this->activityManager->expects($this->once()) + ->method('generateEvent') + ->willReturn($this->createMock(IEvent::class)); + $this->activityManager->expects($this->once()) + ->method('publish'); + $expected = new Http\RedirectResponse('nc://login/server:http://example.com&user:MyLoginName&password:MyGeneratedToken'); $this->assertEquals($expected, $this->clientFlowLoginController->generateAppPassword('MyStateToken')); } @@ -462,6 +478,12 @@ class ClientFlowLoginControllerTest extends TestCase { ->with('MyClientIdentifier') ->willReturn($client); + $this->activityManager->expects($this->once()) + ->method('generateEvent') + ->willReturn($this->createMock(IEvent::class)); + $this->activityManager->expects($this->once()) + ->method('publish'); + $expected = new Http\RedirectResponse('https://example.com/redirect.php?state=MyOauthState&code=MyAccessCode'); $this->assertEquals($expected, $this->clientFlowLoginController->generateAppPassword('MyStateToken', 'MyClientIdentifier')); } @@ -534,6 +556,12 @@ class ClientFlowLoginControllerTest extends TestCase { ->method('getHeader') ->willReturn(''); + $this->activityManager->expects($this->once()) + ->method('generateEvent') + ->willReturn($this->createMock(IEvent::class)); + $this->activityManager->expects($this->once()) + ->method('publish'); + $expected = new Http\RedirectResponse('nc://login/server:http://example.com&user:MyLoginName&password:MyGeneratedToken'); $this->assertEquals($expected, $this->clientFlowLoginController->generateAppPassword('MyStateToken')); } @@ -662,6 +690,12 @@ class ClientFlowLoginControllerTest extends TestCase { ->method('getHeader') ->willReturnMap($headers); + $this->activityManager->expects($this->once()) + ->method('generateEvent') + ->willReturn($this->createMock(IEvent::class)); + $this->activityManager->expects($this->once()) + ->method('publish'); + $expected = new Http\RedirectResponse('nc://login/server:' . $expected . '://example.com&user:MyLoginName&password:MyGeneratedToken'); $this->assertEquals($expected, $this->clientFlowLoginController->generateAppPassword('MyStateToken')); } From c583c5e7e2608c3a5a1f5d15f750b7f3f57c6c93 Mon Sep 17 00:00:00 2001 From: Daniel Kesselberg Date: Mon, 18 Feb 2019 17:38:38 +0100 Subject: [PATCH 3/3] Emit event if app password created Signed-off-by: Daniel Kesselberg --- core/Controller/AppPasswordController.php | 37 ++++------------ core/Controller/ClientFlowLoginController.php | 37 ++++------------ settings/Application.php | 31 +++++++++++++ .../Controller/AppPasswordControllerTest.php | 29 ++++-------- .../ClientFlowLoginControllerTest.php | 44 ++++++------------- 5 files changed, 72 insertions(+), 106 deletions(-) diff --git a/core/Controller/AppPasswordController.php b/core/Controller/AppPasswordController.php index b7cbc65e8c0..a858bb025d9 100644 --- a/core/Controller/AppPasswordController.php +++ b/core/Controller/AppPasswordController.php @@ -24,20 +24,18 @@ declare(strict_types=1); namespace OC\Core\Controller; -use BadMethodCallException; use OC\Authentication\Token\IProvider; use OC\Authentication\Token\IToken; -use OC\Settings\Activity\Provider; -use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\Authentication\Exceptions\CredentialsUnavailableException; use OCP\Authentication\Exceptions\PasswordUnavailableException; use OCP\Authentication\LoginCredentials\IStore; -use OCP\ILogger; use OCP\IRequest; use OCP\ISession; use OCP\Security\ISecureRandom; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; class AppPasswordController extends \OCP\AppFramework\OCSController { @@ -50,31 +48,26 @@ class AppPasswordController extends \OCP\AppFramework\OCSController { /** @var IProvider */ private $tokenProvider; - /** @var IActivityManager */ - private $activityManager; - - /** @var ILogger */ - private $logger; - /** @var IStore */ private $credentialStore; + /** @var EventDispatcherInterface */ + private $eventDispatcher; + public function __construct(string $appName, IRequest $request, ISession $session, ISecureRandom $random, IProvider $tokenProvider, IStore $credentialStore, - IActivityManager $activityManager, - ILogger $logger) { + EventDispatcherInterface $eventDispatcher) { parent::__construct($appName, $request); $this->session = $session; $this->random = $random; $this->tokenProvider = $tokenProvider; $this->credentialStore = $credentialStore; - $this->activityManager = $activityManager; - $this->logger = $logger; + $this->eventDispatcher = $eventDispatcher; } /** @@ -115,20 +108,8 @@ class AppPasswordController extends \OCP\AppFramework\OCSController { IToken::DO_NOT_REMEMBER ); - $event = $this->activityManager->generateEvent(); - $event->setApp('settings') - ->setType('security') - ->setAffectedUser($credentials->getUID()) - ->setAuthor($credentials->getUID()) - ->setSubject(Provider::APP_TOKEN_CREATED, ['name' => $generatedToken->getName()]) - ->setObject('app_token', $generatedToken->getId(), 'App Password'); - - try { - $this->activityManager->publish($event); - } catch (BadMethodCallException $e) { - $this->logger->warning('could not publish activity'); - $this->logger->logException($e); - } + $event = new GenericEvent($generatedToken); + $this->eventDispatcher->dispatch('app_password_created', $event); return new DataResponse([ 'apppassword' => $token diff --git a/core/Controller/ClientFlowLoginController.php b/core/Controller/ClientFlowLoginController.php index 9ca530184af..748139fe832 100644 --- a/core/Controller/ClientFlowLoginController.php +++ b/core/Controller/ClientFlowLoginController.php @@ -26,23 +26,19 @@ namespace OC\Core\Controller; -use BadMethodCallException; use OC\Authentication\Exceptions\InvalidTokenException; use OC\Authentication\Exceptions\PasswordlessTokenException; use OC\Authentication\Token\IProvider; use OC\Authentication\Token\IToken; -use OC\Settings\Activity\Provider; use OCA\OAuth2\Db\AccessToken; use OCA\OAuth2\Db\AccessTokenMapper; use OCA\OAuth2\Db\ClientMapper; -use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Response; use OCP\AppFramework\Http\StandaloneTemplateResponse; use OCP\Defaults; use OCP\IL10N; -use OCP\ILogger; use OCP\IRequest; use OCP\ISession; use OCP\IURLGenerator; @@ -50,6 +46,8 @@ use OCP\IUserSession; use OCP\Security\ICrypto; use OCP\Security\ISecureRandom; use OCP\Session\Exceptions\SessionNotAvailableException; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; class ClientFlowLoginController extends Controller { /** @var IUserSession */ @@ -72,10 +70,8 @@ class ClientFlowLoginController extends Controller { private $accessTokenMapper; /** @var ICrypto */ private $crypto; - /** @var IActivityManager */ - private $activityManager; - /** @var ILogger */ - private $logger; + /** @var EventDispatcherInterface */ + private $eventDispatcher; const stateName = 'client.flow.state.token'; @@ -92,8 +88,7 @@ class ClientFlowLoginController extends Controller { * @param ClientMapper $clientMapper * @param AccessTokenMapper $accessTokenMapper * @param ICrypto $crypto - * @param IActivityManager $activityManager - * @param ILogger $logger + * @param EventDispatcherInterface $eventDispatcher */ public function __construct($appName, IRequest $request, @@ -107,8 +102,7 @@ class ClientFlowLoginController extends Controller { ClientMapper $clientMapper, AccessTokenMapper $accessTokenMapper, ICrypto $crypto, - IActivityManager $activityManager, - ILogger $logger) { + EventDispatcherInterface $eventDispatcher) { parent::__construct($appName, $request); $this->userSession = $userSession; $this->l10n = $l10n; @@ -120,8 +114,7 @@ class ClientFlowLoginController extends Controller { $this->clientMapper = $clientMapper; $this->accessTokenMapper = $accessTokenMapper; $this->crypto = $crypto; - $this->activityManager = $activityManager; - $this->logger = $logger; + $this->eventDispatcher = $eventDispatcher; } /** @@ -338,20 +331,8 @@ class ClientFlowLoginController extends Controller { $this->tokenProvider->invalidateToken($sessionId); } - $event = $this->activityManager->generateEvent(); - $event->setApp('settings') - ->setType('security') - ->setAffectedUser($uid) - ->setAuthor($uid) - ->setSubject(Provider::APP_TOKEN_CREATED, ['name' => $generatedToken->getName()]) - ->setObject('app_token', $generatedToken->getId(), 'App Password'); - - try { - $this->activityManager->publish($event); - } catch (BadMethodCallException $e) { - $this->logger->warning('could not publish activity'); - $this->logger->logException($e); - } + $event = new GenericEvent($generatedToken); + $this->eventDispatcher->dispatch('app_password_created', $event); return new Http\RedirectResponse($redirectUri); } diff --git a/settings/Application.php b/settings/Application.php index 4a144082427..111cb6a6e0b 100644 --- a/settings/Application.php +++ b/settings/Application.php @@ -28,8 +28,10 @@ namespace OC\Settings; +use BadMethodCallException; use OC\AppFramework\Utility\TimeFactory; use OC\Authentication\Token\IProvider; +use OC\Authentication\Token\IToken; use OC\Server; use OC\Settings\Activity\Provider; use OC\Settings\Activity\SecurityFilter; @@ -38,11 +40,15 @@ use OC\Settings\Activity\SecuritySetting; use OC\Settings\Activity\Setting; use OC\Settings\Mailer\NewUserMailHelper; use OC\Settings\Middleware\SubadminMiddleware; +use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\App; use OCP\Defaults; use OCP\IContainer; +use OCP\ILogger; use OCP\Settings\IManager; use OCP\Util; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; /** * @package OC\Settings @@ -109,6 +115,31 @@ class Application extends App { Util::getDefaultEmailAddress('no-reply') ); }); + + /** @var EventDispatcherInterface $eventDispatcher */ + $eventDispatcher = $container->getServer()->getEventDispatcher(); + $eventDispatcher->addListener('app_password_created', function (GenericEvent $event) use ($container) { + if (($token = $event->getSubject()) instanceof IToken) { + /** @var IActivityManager $activityManager */ + $activityManager = $container->query(IActivityManager::class); + /** @var ILogger $logger */ + $logger = $container->query(ILogger::class); + + $activity = $activityManager->generateEvent(); + $activity->setApp('settings') + ->setType('security') + ->setAffectedUser($token->getUID()) + ->setAuthor($token->getUID()) + ->setSubject(Provider::APP_TOKEN_CREATED, ['name' => $token->getName()]) + ->setObject('app_token', $token->getId()); + + try { + $activityManager->publish($activity); + } catch (BadMethodCallException $e) { + $logger->logException($e, ['message' => 'could not publish activity', 'level' => ILogger::WARN]); + } + } + }); } public function register() { diff --git a/tests/Core/Controller/AppPasswordControllerTest.php b/tests/Core/Controller/AppPasswordControllerTest.php index ace6170f984..a66bcb3fc26 100644 --- a/tests/Core/Controller/AppPasswordControllerTest.php +++ b/tests/Core/Controller/AppPasswordControllerTest.php @@ -27,18 +27,16 @@ namespace Tests\Core\Controller; use OC\Authentication\Token\IProvider; use OC\Authentication\Token\IToken; use OC\Core\Controller\AppPasswordController; -use OCP\Activity\IEvent; -use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\Authentication\Exceptions\CredentialsUnavailableException; use OCP\Authentication\Exceptions\PasswordUnavailableException; use OCP\Authentication\LoginCredentials\ICredentials; use OCP\Authentication\LoginCredentials\IStore; -use OCP\ILogger; use OCP\IRequest; use OCP\ISession; use OCP\Security\ISecureRandom; use PHPUnit\Framework\MockObject\MockObject; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Test\TestCase; class AppPasswordControllerTest extends TestCase { @@ -58,8 +56,8 @@ class AppPasswordControllerTest extends TestCase { /** @var IRequest|MockObject */ private $request; - /** @var IActivityManager|\PHPUnit_Framework_MockObject_MockObject */ - private $activityManager; + /** @var EventDispatcherInterface|\PHPUnit_Framework_MockObject_MockObject */ + private $eventDispatcher; /** @var AppPasswordController */ private $controller; @@ -72,9 +70,7 @@ class AppPasswordControllerTest extends TestCase { $this->tokenProvider = $this->createMock(IProvider::class); $this->credentialStore = $this->createMock(IStore::class); $this->request = $this->createMock(IRequest::class); - $this->activityManager = $this->createMock(IActivityManager::class); - /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject $logger */ - $logger = $this->createMock(ILogger::class); + $this->eventDispatcher = $this->createMock(EventDispatcherInterface::class); $this->controller = new AppPasswordController( 'core', @@ -83,8 +79,7 @@ class AppPasswordControllerTest extends TestCase { $this->random, $this->tokenProvider, $this->credentialStore, - $this->activityManager, - $logger + $this->eventDispatcher ); } @@ -145,11 +140,8 @@ class AppPasswordControllerTest extends TestCase { IToken::DO_NOT_REMEMBER ); - $this->activityManager->expects($this->once()) - ->method('generateEvent') - ->willReturn($this->createMock(IEvent::class)); - $this->activityManager->expects($this->once()) - ->method('publish'); + $this->eventDispatcher->expects($this->once()) + ->method('dispatch'); $this->controller->getAppPassword(); } @@ -189,11 +181,8 @@ class AppPasswordControllerTest extends TestCase { IToken::DO_NOT_REMEMBER ); - $this->activityManager->expects($this->once()) - ->method('generateEvent') - ->willReturn($this->createMock(IEvent::class)); - $this->activityManager->expects($this->once()) - ->method('publish'); + $this->eventDispatcher->expects($this->once()) + ->method('dispatch'); $this->controller->getAppPassword(); } diff --git a/tests/Core/Controller/ClientFlowLoginControllerTest.php b/tests/Core/Controller/ClientFlowLoginControllerTest.php index ed84d456de1..73b8118a876 100644 --- a/tests/Core/Controller/ClientFlowLoginControllerTest.php +++ b/tests/Core/Controller/ClientFlowLoginControllerTest.php @@ -29,13 +29,10 @@ use OC\Core\Controller\ClientFlowLoginController; use OCA\OAuth2\Db\AccessTokenMapper; use OCA\OAuth2\Db\Client; use OCA\OAuth2\Db\ClientMapper; -use OCP\Activity\IEvent; -use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\Http; use OCP\AppFramework\Http\StandaloneTemplateResponse; use OCP\Defaults; use OCP\IL10N; -use OCP\ILogger; use OCP\IRequest; use OCP\ISession; use OCP\IURLGenerator; @@ -44,6 +41,7 @@ use OCP\IUserSession; use OCP\Security\ICrypto; use OCP\Security\ISecureRandom; use OCP\Session\Exceptions\SessionNotAvailableException; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Test\TestCase; class ClientFlowLoginControllerTest extends TestCase { @@ -69,8 +67,9 @@ class ClientFlowLoginControllerTest extends TestCase { private $accessTokenMapper; /** @var ICrypto|\PHPUnit_Framework_MockObject_MockObject */ private $crypto; - /** @var IActivityManager|\PHPUnit_Framework_MockObject_MockObject */ - private $activityManager; + /** @var EventDispatcherInterface|\PHPUnit_Framework_MockObject_MockObject */ + private $eventDispatcher; + /** @var ClientFlowLoginController */ private $clientFlowLoginController; @@ -95,9 +94,7 @@ class ClientFlowLoginControllerTest extends TestCase { $this->clientMapper = $this->createMock(ClientMapper::class); $this->accessTokenMapper = $this->createMock(AccessTokenMapper::class); $this->crypto = $this->createMock(ICrypto::class); - $this->activityManager = $this->createMock(IActivityManager::class); - /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject $logger */ - $logger = $this->createMock(ILogger::class); + $this->eventDispatcher = $this->createMock(EventDispatcherInterface::class); $this->clientFlowLoginController = new ClientFlowLoginController( 'core', @@ -112,8 +109,7 @@ class ClientFlowLoginControllerTest extends TestCase { $this->clientMapper, $this->accessTokenMapper, $this->crypto, - $this->activityManager, - $logger + $this->eventDispatcher ); } @@ -388,11 +384,8 @@ class ClientFlowLoginControllerTest extends TestCase { ->method('getHeader') ->willReturn(''); - $this->activityManager->expects($this->once()) - ->method('generateEvent') - ->willReturn($this->createMock(IEvent::class)); - $this->activityManager->expects($this->once()) - ->method('publish'); + $this->eventDispatcher->expects($this->once()) + ->method('dispatch'); $expected = new Http\RedirectResponse('nc://login/server:http://example.com&user:MyLoginName&password:MyGeneratedToken'); $this->assertEquals($expected, $this->clientFlowLoginController->generateAppPassword('MyStateToken')); @@ -478,11 +471,8 @@ class ClientFlowLoginControllerTest extends TestCase { ->with('MyClientIdentifier') ->willReturn($client); - $this->activityManager->expects($this->once()) - ->method('generateEvent') - ->willReturn($this->createMock(IEvent::class)); - $this->activityManager->expects($this->once()) - ->method('publish'); + $this->eventDispatcher->expects($this->once()) + ->method('dispatch'); $expected = new Http\RedirectResponse('https://example.com/redirect.php?state=MyOauthState&code=MyAccessCode'); $this->assertEquals($expected, $this->clientFlowLoginController->generateAppPassword('MyStateToken', 'MyClientIdentifier')); @@ -556,11 +546,8 @@ class ClientFlowLoginControllerTest extends TestCase { ->method('getHeader') ->willReturn(''); - $this->activityManager->expects($this->once()) - ->method('generateEvent') - ->willReturn($this->createMock(IEvent::class)); - $this->activityManager->expects($this->once()) - ->method('publish'); + $this->eventDispatcher->expects($this->once()) + ->method('dispatch'); $expected = new Http\RedirectResponse('nc://login/server:http://example.com&user:MyLoginName&password:MyGeneratedToken'); $this->assertEquals($expected, $this->clientFlowLoginController->generateAppPassword('MyStateToken')); @@ -690,11 +677,8 @@ class ClientFlowLoginControllerTest extends TestCase { ->method('getHeader') ->willReturnMap($headers); - $this->activityManager->expects($this->once()) - ->method('generateEvent') - ->willReturn($this->createMock(IEvent::class)); - $this->activityManager->expects($this->once()) - ->method('publish'); + $this->eventDispatcher->expects($this->once()) + ->method('dispatch'); $expected = new Http\RedirectResponse('nc://login/server:' . $expected . '://example.com&user:MyLoginName&password:MyGeneratedToken'); $this->assertEquals($expected, $this->clientFlowLoginController->generateAppPassword('MyStateToken'));