diff options
author | Joas Schilling <coding@schilljs.com> | 2022-06-09 22:07:46 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2022-06-09 22:07:46 +0200 |
commit | 3235785c245d8d366cc01c0ae179a173cf973633 (patch) | |
tree | e97fa9e47455766c60eb5727c491663c2bfe95d3 | |
parent | 0523626b98ea356842b0c49e63808b300bb2096d (diff) | |
download | nextcloud-server-3235785c245d8d366cc01c0ae179a173cf973633.tar.gz nextcloud-server-3235785c245d8d366cc01c0ae179a173cf973633.zip |
Fix exception handling when profile data is too long
Signed-off-by: Joas Schilling <coding@schilljs.com>
-rw-r--r-- | apps/provisioning_api/lib/Controller/UsersController.php | 6 | ||||
-rw-r--r-- | apps/provisioning_api/tests/Controller/UsersControllerTest.php | 54 | ||||
-rw-r--r-- | lib/private/Accounts/AccountManager.php | 2 |
3 files changed, 34 insertions, 28 deletions
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php index 38d51857ffc..a26479ba0a8 100644 --- a/apps/provisioning_api/lib/Controller/UsersController.php +++ b/apps/provisioning_api/lib/Controller/UsersController.php @@ -958,7 +958,11 @@ class UsersController extends AUserData { } catch (PropertyDoesNotExistException $e) { $userAccount->setProperty($key, $value, IAccountManager::SCOPE_PRIVATE, IAccountManager::NOT_VERIFIED); } - $this->accountManager->updateAccount($userAccount); + try { + $this->accountManager->updateAccount($userAccount); + } catch (InvalidArgumentException $e) { + throw new OCSException('Invalid ' . $e->getMessage(), 102); + } break; case IAccountManager::PROPERTY_PROFILE_ENABLED: $userAccount = $this->accountManager->getAccount($targetUser); diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index 2ce5cadb57d..6162be54a04 100644 --- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -939,9 +939,10 @@ class UsersControllerTest extends TestCase { } public function testGetUserDataAsAdmin() { - $group = $this->getMockBuilder(IGroup::class) - ->disableOriginalConstructor() - ->getMock(); + $group0 = $this->createMock(IGroup::class); + $group1 = $this->createMock(IGroup::class); + $group2 = $this->createMock(IGroup::class); + $group3 = $this->createMock(IGroup::class); $loggedInUser = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); @@ -975,7 +976,7 @@ class UsersControllerTest extends TestCase { $this->groupManager ->expects($this->any()) ->method('getUserGroups') - ->willReturn([$group, $group, $group]); + ->willReturn([$group0, $group1, $group2]); $this->groupManager ->expects($this->once()) ->method('getSubAdmin') @@ -983,17 +984,17 @@ class UsersControllerTest extends TestCase { $subAdminManager ->expects($this->once()) ->method('getSubAdminsGroups') - ->willReturn([$group]); - $group->expects($this->at(0)) + ->willReturn([$group3]); + $group0->expects($this->once()) ->method('getGID') ->willReturn('group0'); - $group->expects($this->at(1)) + $group1->expects($this->once()) ->method('getGID') ->willReturn('group1'); - $group->expects($this->at(2)) + $group2->expects($this->once()) ->method('getGID') ->willReturn('group2'); - $group->expects($this->at(3)) + $group3->expects($this->once()) ->method('getGID') ->willReturn('group3'); @@ -1009,10 +1010,10 @@ class UsersControllerTest extends TestCase { IAccountManager::PROPERTY_PROFILE_ENABLED => ['value' => '1'], ]); $this->config - ->expects($this->at(0)) ->method('getUserValue') - ->with('UID', 'core', 'enabled', 'true') - ->willReturn('true'); + ->willReturnMap([ + ['UID', 'core', 'enabled', 'true', 'true'], + ]); $this->api ->expects($this->once()) ->method('fillStorageInfo') @@ -1136,10 +1137,10 @@ class UsersControllerTest extends TestCase { ->method('getSubAdmin') ->willReturn($subAdminManager); $this->config - ->expects($this->at(0)) ->method('getUserValue') - ->with('UID', 'core', 'enabled', 'true') - ->willReturn('true'); + ->willReturnMap([ + ['UID', 'core', 'enabled', 'true', 'true'], + ]); $this->api ->expects($this->once()) ->method('fillStorageInfo') @@ -3622,11 +3623,12 @@ class UsersControllerTest extends TestCase { 'profile_enabled' => '1' ]; - $api->expects($this->at(0))->method('getUserData') - ->with('uid', false) - ->willReturn($expected); - $api->expects($this->at(1))->method('getUserData') - ->with('currentuser', true) + $api->expects($this->exactly(2)) + ->method('getUserData') + ->withConsecutive( + ['uid', false], + ['currentuser', true], + ) ->willReturn($expected); $this->assertSame($expected, $api->getUser('uid')->getData()); @@ -3812,11 +3814,11 @@ class UsersControllerTest extends TestCase { ->willReturn('abc@example.org'); $emailTemplate = $this->createMock(IEMailTemplate::class); $this->newUserMailHelper - ->expects($this->at(0)) + ->expects($this->once()) ->method('generateTemplate') ->willReturn($emailTemplate); $this->newUserMailHelper - ->expects($this->at(1)) + ->expects($this->once()) ->method('sendMail') ->with($targetUser, $emailTemplate); @@ -3863,11 +3865,11 @@ class UsersControllerTest extends TestCase { ->getMock(); $emailTemplate = $this->createMock(IEMailTemplate::class); $this->newUserMailHelper - ->expects($this->at(0)) + ->expects($this->once()) ->method('generateTemplate') ->willReturn($emailTemplate); $this->newUserMailHelper - ->expects($this->at(1)) + ->expects($this->once()) ->method('sendMail') ->with($targetUser, $emailTemplate); @@ -3916,11 +3918,11 @@ class UsersControllerTest extends TestCase { ->willReturn('abc@example.org'); $emailTemplate = $this->createMock(IEMailTemplate::class); $this->newUserMailHelper - ->expects($this->at(0)) + ->expects($this->once()) ->method('generateTemplate') ->willReturn($emailTemplate); $this->newUserMailHelper - ->expects($this->at(1)) + ->expects($this->once()) ->method('sendMail') ->with($targetUser, $emailTemplate) ->willThrowException(new \Exception()); diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php index b80c7887591..bdf33d73c29 100644 --- a/lib/private/Accounts/AccountManager.php +++ b/lib/private/Accounts/AccountManager.php @@ -220,7 +220,7 @@ class AccountManager implements IAccountManager { foreach ($properties as $property) { if (strlen($property->getValue()) > 2048) { if ($throwOnData) { - throw new InvalidArgumentException(); + throw new InvalidArgumentException($property->getName()); } else { $property->setValue(''); } |