summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2016-06-16 17:04:19 +0200
committerGitHub <noreply@github.com>2016-06-16 17:04:19 +0200
commit82beee57e45fd9c9df0f5730e51258240479b956 (patch)
tree71126fbe40ff964c6c115f500559e94765e31027
parent3917969728177d2978bb93be4d9a1271e2040d5a (diff)
parent3521f974db2cf7bebac66ab4c987bb3c67d5d02f (diff)
downloadnextcloud-server-82beee57e45fd9c9df0f5730e51258240479b956.tar.gz
nextcloud-server-82beee57e45fd9c9df0f5730e51258240479b956.zip
Merge pull request #25132 from owncloud/2fa-load-apps-before-query
load 2FA provider apps before querying classes
-rw-r--r--lib/private/Authentication/TwoFactorAuth/Manager.php13
-rw-r--r--tests/lib/Authentication/TwoFactorAuth/ManagerTest.php12
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/private/Authentication/TwoFactorAuth/Manager.php b/lib/private/Authentication/TwoFactorAuth/Manager.php
index 805735bd1b8..6ca4fd065a6 100644
--- a/lib/private/Authentication/TwoFactorAuth/Manager.php
+++ b/lib/private/Authentication/TwoFactorAuth/Manager.php
@@ -24,6 +24,7 @@ namespace OC\Authentication\TwoFactorAuth;
use Exception;
use OC;
use OC\App\AppManager;
+use OC_App;
use OCP\AppFramework\QueryException;
use OCP\Authentication\TwoFactorAuth\IProvider;
use OCP\IConfig;
@@ -110,6 +111,7 @@ class Manager {
$providerClasses = $info['two-factor-providers'];
foreach ($providerClasses as $class) {
try {
+ $this->loadTwoFactorApp($appId);
$provider = OC::$server->query($class);
$providers[$provider->getId()] = $provider;
} catch (QueryException $exc) {
@@ -126,6 +128,17 @@ class Manager {
}
/**
+ * Load an app by ID if it has not been loaded yet
+ *
+ * @param string $appId
+ */
+ protected function loadTwoFactorApp($appId) {
+ if (!OC_App::isAppLoaded($appId)) {
+ OC_App::loadApp($appId);
+ }
+ }
+
+ /**
* Verify the given challenge
*
* @param string $providerId
diff --git a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php
index 363229b01bc..586fd3aaa2e 100644
--- a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php
+++ b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php
@@ -55,7 +55,10 @@ class ManagerTest extends TestCase {
$this->session = $this->getMock('\OCP\ISession');
$this->config = $this->getMock('\OCP\IConfig');
- $this->manager = new Manager($this->appManager, $this->session, $this->config);
+ $this->manager = $this->getMockBuilder('\OC\Authentication\TwoFactorAuth\Manager')
+ ->setConstructorArgs([$this->appManager, $this->session, $this->config])
+ ->setMethods(['loadTwoFactorApp']) // Do not actually load the apps
+ ->getMock();
$this->fakeProvider = $this->getMock('\OCP\Authentication\TwoFactorAuth\IProvider');
$this->fakeProvider->expects($this->any())
@@ -83,6 +86,10 @@ class ManagerTest extends TestCase {
'\OCA\MyCustom2faApp\FakeProvider',
],
]));
+
+ $this->manager->expects($this->once())
+ ->method('loadTwoFactorApp')
+ ->with('mycustom2faapp');
}
/**
@@ -94,6 +101,9 @@ class ManagerTest extends TestCase {
->method('getEnabledAppsForUser')
->with($this->user)
->will($this->returnValue(['faulty2faapp']));
+ $this->manager->expects($this->once())
+ ->method('loadTwoFactorApp')
+ ->with('faulty2faapp');
$this->appManager->expects($this->once())
->method('getAppInfo')