Skip to content

Commit a9c1ba6

Browse files
committed
Only return display name as editable when the user backend allows it
Signed-off-by: Joas Schilling <[email protected]>
1 parent 3ab659c commit a9c1ba6

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

apps/provisioning_api/appinfo/routes.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
['root' => '/cloud', 'name' => 'Users#getUser', 'url' => '/users/{userId}', 'verb' => 'GET'],
5454
['root' => '/cloud', 'name' => 'Users#getCurrentUser', 'url' => '/user', 'verb' => 'GET'],
5555
['root' => '/cloud', 'name' => 'Users#getEditableFields', 'url' => '/user/fields', 'verb' => 'GET'],
56+
['root' => '/cloud', 'name' => 'Users#getEditableFields', 'url' => '/user/fields/{userId}', 'verb' => 'GET'],
5657
['root' => '/cloud', 'name' => 'Users#editUser', 'url' => '/users/{userId}', 'verb' => 'PUT'],
5758
['root' => '/cloud', 'name' => 'Users#wipeUserDevices', 'url' => '/users/{userId}/wipe', 'verb' => 'POST'],
5859
['root' => '/cloud', 'name' => 'Users#deleteUser', 'url' => '/users/{userId}', 'verb' => 'DELETE'],

apps/provisioning_api/lib/Controller/UsersController.php

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
use OCP\Security\ISecureRandom;
7171
use OCP\Security\Events\GenerateSecurePasswordEvent;
7272
use OCP\EventDispatcher\IEventDispatcher;
73+
use OCP\User\Backend\ISetDisplayNameBackend;
7374
use Psr\Log\LoggerInterface;
7475

7576
class UsersController extends AUserData {
@@ -538,13 +539,38 @@ public function getCurrentUser(): DataResponse {
538539
/**
539540
* @NoAdminRequired
540541
* @NoSubAdminRequired
542+
*
543+
* @return DataResponse
544+
* @throws OCSException
541545
*/
542-
public function getEditableFields(): DataResponse {
546+
public function getEditableFields(?string $userId = null): DataResponse {
547+
$currentLoggedInUser = $this->userSession->getUser();
548+
if (!$currentLoggedInUser instanceof IUser) {
549+
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
550+
}
551+
543552
$permittedFields = [];
544553

554+
if ($userId !== $currentLoggedInUser->getUID()) {
555+
$targetUser = $this->userManager->get($userId);
556+
if (!$targetUser instanceof IUser) {
557+
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
558+
}
559+
560+
$subAdminManager = $this->groupManager->getSubAdmin();
561+
if (!$this->groupManager->isAdmin($currentLoggedInUser->getUID())
562+
&& !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) {
563+
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
564+
}
565+
} else {
566+
$targetUser = $currentLoggedInUser->getUID();
567+
}
568+
545569
// Editing self (display, email)
546570
if ($this->config->getSystemValue('allow_user_to_change_display_name', true) !== false) {
547-
$permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
571+
if ($targetUser->getBackend() instanceof ISetDisplayNameBackend) {
572+
$permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
573+
}
548574
$permittedFields[] = IAccountManager::PROPERTY_EMAIL;
549575
}
550576

@@ -581,8 +607,10 @@ public function editUser(string $userId, string $key, string $value): DataRespon
581607
if ($targetUser->getUID() === $currentLoggedInUser->getUID()) {
582608
// Editing self (display, email)
583609
if ($this->config->getSystemValue('allow_user_to_change_display_name', true) !== false) {
584-
$permittedFields[] = 'display';
585-
$permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
610+
if ($targetUser->getBackend() instanceof ISetDisplayNameBackend) {
611+
$permittedFields[] = 'display';
612+
$permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
613+
}
586614
$permittedFields[] = IAccountManager::PROPERTY_EMAIL;
587615
}
588616

@@ -621,8 +649,10 @@ public function editUser(string $userId, string $key, string $value): DataRespon
621649
if ($this->groupManager->isAdmin($currentLoggedInUser->getUID())
622650
|| $subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) {
623651
// They have permissions over the user
624-
$permittedFields[] = 'display';
625-
$permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
652+
if ($targetUser->getBackend() instanceof ISetDisplayNameBackend) {
653+
$permittedFields[] = 'display';
654+
$permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
655+
}
626656
$permittedFields[] = IAccountManager::PROPERTY_EMAIL;
627657
$permittedFields[] = 'password';
628658
$permittedFields[] = 'language';

0 commit comments

Comments
 (0)