Fix state propagation to the server registry
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
This commit is contained in:
Родитель
9259ca5622
Коммит
24d2da94e4
|
@ -17,6 +17,7 @@ namespace OCA\TwoFactorU2F\AppInfo;
|
||||||
use OCA\TwoFactorU2F\Event\StateChanged;
|
use OCA\TwoFactorU2F\Event\StateChanged;
|
||||||
use OCA\TwoFactorU2F\Listener\IListener;
|
use OCA\TwoFactorU2F\Listener\IListener;
|
||||||
use OCA\TwoFactorU2F\Listener\StateChangeActivity;
|
use OCA\TwoFactorU2F\Listener\StateChangeActivity;
|
||||||
|
use OCA\TwoFactorU2F\Listener\StateChangeRegistryUpdater;
|
||||||
use OCP\AppFramework\App;
|
use OCP\AppFramework\App;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
|
|
||||||
|
@ -32,6 +33,7 @@ class Application extends App {
|
||||||
/** @var IListener[] $listeners */
|
/** @var IListener[] $listeners */
|
||||||
$listeners = [
|
$listeners = [
|
||||||
$container->query(StateChangeActivity::class),
|
$container->query(StateChangeActivity::class),
|
||||||
|
$container->query(StateChangeRegistryUpdater::class),
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($listeners as $listener) {
|
foreach ($listeners as $listener) {
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nextcloud - U2F 2FA
|
||||||
|
*
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later. See the COPYING file.
|
||||||
|
*
|
||||||
|
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||||
|
* @copyright Christoph Wurst 2018
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OCA\TwoFactorU2F\Listener;
|
||||||
|
|
||||||
|
use OCA\TwoFactorU2F\Event\StateChanged;
|
||||||
|
use OCA\TwoFactorU2F\Provider\U2FProvider;
|
||||||
|
use OCP\Authentication\TwoFactorAuth\IRegistry;
|
||||||
|
use Symfony\Component\EventDispatcher\Event;
|
||||||
|
|
||||||
|
class StateChangeRegistryUpdater implements IListener {
|
||||||
|
|
||||||
|
/** @var IRegistry */
|
||||||
|
private $providerRegistry;
|
||||||
|
|
||||||
|
/** @var U2FProvider */
|
||||||
|
private $provider;
|
||||||
|
|
||||||
|
public function __construct(IRegistry $providerRegistry, U2FProvider $provider) {
|
||||||
|
$this->providerRegistry = $providerRegistry;
|
||||||
|
$this->provider = $provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(Event $event) {
|
||||||
|
if ($event instanceof StateChanged) {
|
||||||
|
if ($event->isEnabled()) {
|
||||||
|
$this->providerRegistry->enableProviderFor($this->provider, $event->getUser());
|
||||||
|
} else {
|
||||||
|
$this->providerRegistry->disableProviderFor($this->provider, $event->getUser());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: christoph
|
||||||
|
* Date: 31.07.18
|
||||||
|
* Time: 08:11
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OCA\TwoFactorU2F\Tests\Unit\Listener;
|
||||||
|
|
||||||
|
use OCA\TwoFactorU2F\Event\StateChanged;
|
||||||
|
use OCA\TwoFactorU2F\Listener\StateChangeRegistryUpdater;
|
||||||
|
use OCA\TwoFactorU2F\Provider\U2FProvider;
|
||||||
|
use OCP\Authentication\TwoFactorAuth\IRegistry;
|
||||||
|
use OCP\IUser;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use PHPUnit_Framework_MockObject_MockObject;
|
||||||
|
use Symfony\Component\EventDispatcher\Event;
|
||||||
|
|
||||||
|
class StateChangeRegistryUpdaterTest extends TestCase {
|
||||||
|
|
||||||
|
/** @var IRegistry|PHPUnit_Framework_MockObject_MockObject */
|
||||||
|
private $providerRegistry;
|
||||||
|
|
||||||
|
/** @var U2FProvider|PHPUnit_Framework_MockObject_MockObjec */
|
||||||
|
private $provider;
|
||||||
|
|
||||||
|
/** @var StateChangeRegistryUpdater */
|
||||||
|
private $listener;
|
||||||
|
|
||||||
|
protected function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->providerRegistry = $this->createMock(IRegistry::class);
|
||||||
|
$this->provider = $this->createMock(U2FProvider::class);
|
||||||
|
|
||||||
|
$this->listener = new StateChangeRegistryUpdater($this->providerRegistry, $this->provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHandleGenericEvent() {
|
||||||
|
$event = $this->createMock(Event::class);
|
||||||
|
$this->providerRegistry->expects($this->never())
|
||||||
|
->method('enableProviderFor');
|
||||||
|
$this->providerRegistry->expects($this->never())
|
||||||
|
->method('disableProviderFor');
|
||||||
|
|
||||||
|
$this->listener->handle($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHandleEnableEvent() {
|
||||||
|
$user = $this->createMock(IUser::class);
|
||||||
|
$event = new StateChanged($user, true);
|
||||||
|
$this->providerRegistry->expects($this->once())
|
||||||
|
->method('enableProviderFor')
|
||||||
|
->with(
|
||||||
|
$this->provider,
|
||||||
|
$user
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->listener->handle($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHandleDisableEvent() {
|
||||||
|
$user = $this->createMock(IUser::class);
|
||||||
|
$event = new StateChanged($user, false);
|
||||||
|
$this->providerRegistry->expects($this->once())
|
||||||
|
->method('disableProviderFor')
|
||||||
|
->with(
|
||||||
|
$this->provider,
|
||||||
|
$user
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->listener->handle($event);
|
||||||
|
}
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче