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\Listener\IListener;
|
||||
use OCA\TwoFactorU2F\Listener\StateChangeActivity;
|
||||
use OCA\TwoFactorU2F\Listener\StateChangeRegistryUpdater;
|
||||
use OCP\AppFramework\App;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
|
||||
|
@ -32,6 +33,7 @@ class Application extends App {
|
|||
/** @var IListener[] $listeners */
|
||||
$listeners = [
|
||||
$container->query(StateChangeActivity::class),
|
||||
$container->query(StateChangeRegistryUpdater::class),
|
||||
];
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче