From 5daa9a5417b896246f9c67feca6d39ea9a96b551 Mon Sep 17 00:00:00 2001
From: Christoph Wurst <ChristophWurst@users.noreply.github.com>
Date: Mon, 13 Jun 2016 12:46:45 +0200
Subject: [PATCH] fail hard if 2fa provider can not be loaded (#25061)

---
 .../Authentication/TwoFactorAuth/Manager.php  |  4 ++-
 .../TwoFactorAuth/ManagerTest.php             | 27 ++++++++++++++++---
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/lib/private/Authentication/TwoFactorAuth/Manager.php b/lib/private/Authentication/TwoFactorAuth/Manager.php
index 2b2924e7f14..805735bd1b8 100644
--- a/lib/private/Authentication/TwoFactorAuth/Manager.php
+++ b/lib/private/Authentication/TwoFactorAuth/Manager.php
@@ -21,6 +21,7 @@
 
 namespace OC\Authentication\TwoFactorAuth;
 
+use Exception;
 use OC;
 use OC\App\AppManager;
 use OCP\AppFramework\QueryException;
@@ -112,7 +113,8 @@ class Manager {
 					$provider = OC::$server->query($class);
 					$providers[$provider->getId()] = $provider;
 				} catch (QueryException $exc) {
-					// Provider class can not be resolved, ignore it
+					// Provider class can not be resolved
+					throw new Exception("Could not load two-factor auth provider $class");
 				}
 			}
 		}
diff --git a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php
index 9a3426eda2d..363229b01bc 100644
--- a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php
+++ b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php
@@ -85,11 +85,32 @@ class ManagerTest extends TestCase {
 		]));
 	}
 
+	/**
+	 * @expectedException \Exception
+	 * @expectedExceptionMessage Could not load two-factor auth provider \OCA\MyFaulty2faApp\DoesNotExist
+	 */
+	public function testFailHardIfProviderCanNotBeLoaded() {
+		$this->appManager->expects($this->once())
+			->method('getEnabledAppsForUser')
+			->with($this->user)
+			->will($this->returnValue(['faulty2faapp']));
+
+		$this->appManager->expects($this->once())
+			->method('getAppInfo')
+			->with('faulty2faapp')
+			->will($this->returnValue([
+					'two-factor-providers' => [
+						'\OCA\MyFaulty2faApp\DoesNotExist',
+					],
+		]));
+
+		$this->manager->getProviders($this->user);
+	}
+
 	public function testIsTwoFactorAuthenticated() {
 		$this->prepareProviders();
 
-		$user = $this->getMock('\OCP\IUser');
-		$user->expects($this->once())
+		$this->user->expects($this->once())
 			->method('getUID')
 			->will($this->returnValue('user123'));
 		$this->config->expects($this->once())
@@ -97,7 +118,7 @@ class ManagerTest extends TestCase {
 			->with('user123', 'core', 'two_factor_auth_disabled', 0)
 			->will($this->returnValue(0));
 
-		$this->assertTrue($this->manager->isTwoFactorAuthenticated($user));
+		$this->assertTrue($this->manager->isTwoFactorAuthenticated($this->user));
 	}
 
 	public function testGetProvider() {
-- 
GitLab