diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2016-12-13 10:47:48 +0100 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2016-12-19 11:59:47 +0100 |
commit | 93003120461648140ee244b345cfcb6690071faa (patch) | |
tree | 6f6abee9824742b4c45517137bf6f3881d761c26 /apps/twofactor_backupcodes | |
parent | 7ae9442f3d4cdb2a98ae680979d6fcb33350cc02 (diff) | |
download | nextcloud-server-93003120461648140ee244b345cfcb6690071faa.tar.gz nextcloud-server-93003120461648140ee244b345cfcb6690071faa.zip |
push activity when backup codes are generated
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'apps/twofactor_backupcodes')
5 files changed, 123 insertions, 4 deletions
diff --git a/apps/twofactor_backupcodes/appinfo/info.xml b/apps/twofactor_backupcodes/appinfo/info.xml index 72e5e967366..42985d15481 100644 --- a/apps/twofactor_backupcodes/appinfo/info.xml +++ b/apps/twofactor_backupcodes/appinfo/info.xml @@ -26,6 +26,7 @@ </settings> <providers> <provider>OCA\TwoFactorBackupCodes\Activity\GenericProvider</provider> + <provider>OCA\TwoFactorBackupCodes\Activity\Provider</provider> </providers> </activity> </info> diff --git a/apps/twofactor_backupcodes/lib/Activity/GenericProvider.php b/apps/twofactor_backupcodes/lib/Activity/GenericProvider.php index e7eebb12838..70942cf72bd 100644 --- a/apps/twofactor_backupcodes/lib/Activity/GenericProvider.php +++ b/apps/twofactor_backupcodes/lib/Activity/GenericProvider.php @@ -56,7 +56,6 @@ class GenericProvider implements IProvider { switch ($event->getSubject()) { case 'twofactor_success': $params = $event->getSubjectParameters(); - error_log(json_encode($params['provider'])); $event->setParsedSubject($l->t('You successfully logged in using two-factor authentication (%1$s)', [ $params['provider'], ])); diff --git a/apps/twofactor_backupcodes/lib/Activity/Provider.php b/apps/twofactor_backupcodes/lib/Activity/Provider.php new file mode 100644 index 00000000000..db139a0e674 --- /dev/null +++ b/apps/twofactor_backupcodes/lib/Activity/Provider.php @@ -0,0 +1,67 @@ +<?php + +/** + * @author Christoph Wurst <christoph@winzerhof-wurst.at> + * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at> + * + * Two-factor backup codes + * + * 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 OCA\TwoFactorBackupCodes\Activity; + +use InvalidArgumentException; +use OCP\Activity\IEvent; +use OCP\Activity\IProvider; +use OCP\ILogger; +use OCP\IURLGenerator; +use OCP\L10N\IFactory as L10nFactory; + +class Provider implements IProvider { + + /** @var L10nFactory */ + private $l10n; + + /** @var IURLGenerator */ + private $urlGenerator; + + /** @var ILogger */ + private $logger; + + public function __construct(L10nFactory $l10n, IURLGenerator $urlGenerator, ILogger $logger) { + $this->logger = $logger; + $this->urlGenerator = $urlGenerator; + $this->l10n = $l10n; + } + + public function parse($language, IEvent $event, IEvent $previousEvent = null) { + if ($event->getApp() !== 'twofactor_backupcodes') { + throw new InvalidArgumentException(); + } + + $l = $this->l10n->get('twofactor_backupcodes', $language); + + switch ($event->getSubject()) { + case 'codes_generated': + $event->setParsedSubject($l->t('You created backup codes for your account')); + $event->setIcon($this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'actions/password.svg'))); + break; + default: + throw new InvalidArgumentException(); + } + return $event; + } + +} diff --git a/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php b/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php index bb10081bb54..d7bcfe01475 100644 --- a/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php +++ b/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php @@ -24,6 +24,7 @@ namespace OCA\TwoFactorBackupCodes\Service; use OCA\TwoFactorBackupCodes\Db\BackupCode; use OCA\TwoFactorBackupCodes\Db\BackupCodeMapper; +use OCP\Activity\IManager; use OCP\IUser; use OCP\Security\IHasher; use OCP\Security\ISecureRandom; @@ -39,10 +40,14 @@ class BackupCodeStorage { /** @var ISecureRandom */ private $random; - public function __construct(BackupCodeMapper $mapper, ISecureRandom $random, IHasher $hasher) { + /** @var IManager */ + private $activityManager; + + public function __construct(BackupCodeMapper $mapper, ISecureRandom $random, IHasher $hasher, IManager $activityManager) { $this->mapper = $mapper; $this->hasher = $hasher; $this->random = $random; + $this->activityManager = $activityManager; } /** @@ -68,10 +73,28 @@ class BackupCodeStorage { array_push($result, $code); } + $this->publishEvent($user, 'codes_generated'); + return $result; } /** + * Push an event the user's activity stream + * + * @param IUser $user + * @param string $event + */ + private function publishEvent(IUser $user, $event) { + $activity = $this->activityManager->generateEvent(); + $activity->setApp('twofactor_backupcodes') + ->setType('twofactor') + ->setAuthor($user->getUID()) + ->setAffectedUser($user->getUID()); + $activity->setSubject($event); + $this->activityManager->publish($activity); + } + + /** * @param IUser $user * @return bool */ diff --git a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php index 7a1132b064b..fbaac0220aa 100644 --- a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php +++ b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php @@ -25,6 +25,8 @@ namespace OCA\TwoFactorBackupCodes\Tests\Unit\Service; use OCA\TwoFactorBackupCodes\Db\BackupCode; use OCA\TwoFactorBackupCodes\Db\BackupCodeMapper; use OCA\TwoFactorBackupCodes\Service\BackupCodeStorage; +use OCP\Activity\IEvent; +use OCP\Activity\IManager; use OCP\IUser; use OCP\Security\IHasher; use OCP\Security\ISecureRandom; @@ -41,6 +43,9 @@ class BackupCodeStorageTest extends TestCase { /** @var IHasher|\PHPUnit_Framework_MockObject_MockObject */ private $hasher; + /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */ + private $activityManager; + /** @var BackupCodeStorage */ private $storage; @@ -52,14 +57,16 @@ class BackupCodeStorageTest extends TestCase { ->getMock(); $this->random = $this->getMockBuilder(ISecureRandom::class)->getMock(); $this->hasher = $this->getMockBuilder(IHasher::class)->getMock(); - $this->storage = new BackupCodeStorage($this->mapper, $this->random, $this->hasher); + $this->activityManager = $this->createMock(IManager::class); + $this->storage = new BackupCodeStorage($this->mapper, $this->random, $this->hasher, $this->activityManager); } public function testCreateCodes() { $user = $this->getMockBuilder(IUser::class)->getMock(); $number = 5; + $event = $this->createMock(IEvent::class); - $user->expects($this->once()) + $user->expects($this->any()) ->method('getUID') ->will($this->returnValue('fritz')); $this->random->expects($this->exactly($number)) @@ -77,6 +84,28 @@ class BackupCodeStorageTest extends TestCase { $this->mapper->expects($this->exactly($number)) ->method('insert') ->with($this->equalTo($row)); + $this->activityManager->expects($this->once()) + ->method('generateEvent') + ->will($this->returnValue($event)); + $event->expects($this->once()) + ->method('setApp') + ->with('twofactor_backupcodes') + ->will($this->returnSelf()); + $event->expects($this->once()) + ->method('setType') + ->with('twofactor') + ->will($this->returnSelf()); + $event->expects($this->once()) + ->method('setAuthor') + ->with('fritz') + ->will($this->returnSelf()); + $event->expects($this->once()) + ->method('setAffectedUser') + ->with('fritz') + ->will($this->returnSelf()); + $this->activityManager->expects($this->once()) + ->method('publish') + ->will($this->returnValue($event)); $codes = $this->storage->createCodes($user, $number); $this->assertCount($number, $codes); |