diff --git a/lib/private/Authentication/LoginCredentials/Store.php b/lib/private/Authentication/LoginCredentials/Store.php index c50b7246f6..e44c88c7ae 100644 --- a/lib/private/Authentication/LoginCredentials/Store.php +++ b/lib/private/Authentication/LoginCredentials/Store.php @@ -40,21 +40,21 @@ class Store implements IStore { /** @var ISession */ private $session; - /** @var IProvider */ - private $tokenProvider; - /** @var ILogger */ private $logger; + /** @var IProvider|null */ + private $tokenProvider; + /** * @param ISession $session - * @param IProvider $tokenProvider * @param ILogger $logger + * @param IProvider $tokenProvider */ - public function __construct(ISession $session, IProvider $tokenProvider, ILogger $logger) { + public function __construct(ISession $session, ILogger $logger, IProvider $tokenProvider = null) { $this->session = $session; - $this->tokenProvider = $tokenProvider; $this->logger = $logger; + $this->tokenProvider = $tokenProvider; Util::connectHook('OC_User', 'post_login', $this, 'authenticate'); } @@ -84,6 +84,10 @@ class Store implements IStore { * @throws CredentialsUnavailableException */ public function getLoginCredentials() { + if (is_null($this->tokenProvider)) { + throw new CredentialsUnavailableException(); + } + $trySession = false; try { $sessionId = $this->session->getId(); diff --git a/lib/private/Server.php b/lib/private/Server.php index 45ed9d5e3b..903e05925e 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -250,9 +250,13 @@ class Server extends ServerContainer implements IServerContainer { }); $this->registerService(Store::class, function(Server $c) { $session = $c->getSession(); - $tokenProvider = $c->query('OC\Authentication\Token\DefaultTokenProvider'); + if (\OC::$server->getSystemConfig()->getValue('installed', false)) { + $tokenProvider = $c->query('OC\Authentication\Token\IProvider'); + } else { + $tokenProvider = null; + } $logger = $c->getLogger(); - return new Store($session, $tokenProvider, $logger); + return new Store($session, $logger, $tokenProvider); }); $this->registerAlias(IStore::class, Store::class); $this->registerService('OC\Authentication\Token\DefaultTokenMapper', function (Server $c) { diff --git a/tests/lib/Authentication/LoginCredentials/StoreTest.php b/tests/lib/Authentication/LoginCredentials/StoreTest.php index 56277fd0f3..9a719339b4 100644 --- a/tests/lib/Authentication/LoginCredentials/StoreTest.php +++ b/tests/lib/Authentication/LoginCredentials/StoreTest.php @@ -58,7 +58,7 @@ class StoreTest extends TestCase { $this->tokenProvider = $this->createMock(IProvider::class); $this->logger = $this->createMock(ILogger::class); - $this->store = new Store($this->session, $this->tokenProvider, $this->logger); + $this->store = new Store($this->session, $this->logger, $this->tokenProvider); } public function testAuthenticate() { @@ -81,6 +81,14 @@ class StoreTest extends TestCase { $this->store->setSession($session); } + public function testGetLoginCredentialsNoTokenProvider() { + $this->store = new Store($this->session, $this->logger, null); + + $this->expectException(CredentialsUnavailableException::class); + + $this->store->getLoginCredentials(); + } + public function testGetLoginCredentials() { $uid = 'uid'; $user = 'user123';