Merge pull request #22641 from nextcloud/fix/credentials-store-upgrade-property-undefined
Fix undefined class property access after upgrade from 19 to 20
This commit is contained in:
commit
ac5f2914c7
|
@ -112,8 +112,13 @@ class Store implements IStore {
|
|||
}
|
||||
|
||||
if ($trySession && $this->session->exists('login_credentials')) {
|
||||
$creds = json_decode($this->session->get('login_credentials'));
|
||||
return new Credentials($creds->uid, $creds->loginName, $creds->password);
|
||||
/** @var array $creds */
|
||||
$creds = json_decode($this->session->get('login_credentials'), true);
|
||||
return new Credentials(
|
||||
$creds['uid'],
|
||||
$creds['loginName'] ?? $this->session->get('loginname') ?? $creds['uid'], // Pre 20 didn't have a loginName property, hence fall back to the session value and then to the UID
|
||||
$creds['password']
|
||||
);
|
||||
}
|
||||
|
||||
// If we reach this line, an exception was thrown.
|
||||
|
|
|
@ -35,6 +35,7 @@ use OCP\ILogger;
|
|||
use OCP\ISession;
|
||||
use OCP\Session\Exceptions\SessionNotAvailableException;
|
||||
use Test\TestCase;
|
||||
use function json_encode;
|
||||
|
||||
class StoreTest extends TestCase {
|
||||
|
||||
|
@ -140,6 +141,81 @@ class StoreTest extends TestCase {
|
|||
$this->store->getLoginCredentials();
|
||||
}
|
||||
|
||||
public function testGetLoginCredentialsPartialCredentialsAndSessionName() {
|
||||
$uid = 'id987';
|
||||
$user = 'user987';
|
||||
$password = '7389374';
|
||||
|
||||
$this->session->expects($this->once())
|
||||
->method('getId')
|
||||
->willReturn('sess2233');
|
||||
$this->tokenProvider->expects($this->once())
|
||||
->method('getToken')
|
||||
->with('sess2233')
|
||||
->will($this->throwException(new InvalidTokenException()));
|
||||
$this->session->expects($this->once())
|
||||
->method('exists')
|
||||
->with($this->equalTo('login_credentials'))
|
||||
->willReturn(true);
|
||||
$this->session->expects($this->exactly(2))
|
||||
->method('get')
|
||||
->willReturnMap([
|
||||
[
|
||||
'login_credentials',
|
||||
json_encode([
|
||||
'uid' => $uid,
|
||||
'password' => $password,
|
||||
])
|
||||
],
|
||||
[
|
||||
'loginname',
|
||||
$user,
|
||||
],
|
||||
]);
|
||||
$expected = new Credentials($uid, $user, $password);
|
||||
|
||||
$actual = $this->store->getLoginCredentials();
|
||||
|
||||
$this->assertEquals($expected, $actual);
|
||||
}
|
||||
|
||||
public function testGetLoginCredentialsPartialCredentials() {
|
||||
$uid = 'id987';
|
||||
$password = '7389374';
|
||||
|
||||
$this->session->expects($this->once())
|
||||
->method('getId')
|
||||
->willReturn('sess2233');
|
||||
$this->tokenProvider->expects($this->once())
|
||||
->method('getToken')
|
||||
->with('sess2233')
|
||||
->will($this->throwException(new InvalidTokenException()));
|
||||
$this->session->expects($this->once())
|
||||
->method('exists')
|
||||
->with($this->equalTo('login_credentials'))
|
||||
->willReturn(true);
|
||||
$this->session->expects($this->exactly(2))
|
||||
->method('get')
|
||||
->willReturnMap([
|
||||
[
|
||||
'login_credentials',
|
||||
json_encode([
|
||||
'uid' => $uid,
|
||||
'password' => $password,
|
||||
])
|
||||
],
|
||||
[
|
||||
'loginname',
|
||||
null,
|
||||
],
|
||||
]);
|
||||
$expected = new Credentials($uid, $uid, $password);
|
||||
|
||||
$actual = $this->store->getLoginCredentials();
|
||||
|
||||
$this->assertEquals($expected, $actual);
|
||||
}
|
||||
|
||||
public function testGetLoginCredentialsInvalidTokenLoginCredentials() {
|
||||
$uid = 'id987';
|
||||
$user = 'user987';
|
||||
|
|
Loading…
Reference in New Issue