]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat(LDAP): warn about demoting a group while promoting another 41650/head
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Tue, 28 Nov 2023 21:07:29 +0000 (22:07 +0100)
committerArthur Schiwon <blizzz@arthur-schiwon.de>
Fri, 1 Dec 2023 11:48:24 +0000 (12:48 +0100)
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
apps/user_ldap/lib/Command/PromoteGroup.php

index 5fc3905414f5ca70a44c0ad0f3a952670aab63db..7ec180643326920a80b238f66eb80e7d604083f4 100644 (file)
@@ -61,21 +61,36 @@ class PromoteGroup extends Command {
                        );
        }
 
+       protected function formatGroupName(IGroup $group): string {
+               $idLabel = '';
+               if ($group->getGID() !== $group->getDisplayName()) {
+                       $idLabel = sprintf(' (Group ID: %s)', $group->getGID());
+               }
+               return sprintf('%s%s', $group->getDisplayName(), $idLabel);
+       }
+
        protected function promoteGroup(IGroup $group, InputInterface $input, OutputInterface $output): void {
-               if ($input->getOption('yes') === false) {
-                       /** @var QuestionHelper $helper */
-                       $helper = $this->getHelper('question');
+               $access = $this->backend->getLDAPAccess($group->getGID());
+               $currentlyPromotedGroupId = $access->connection->ldapAdminGroup;
+               if ($currentlyPromotedGroupId === $group->getGID()) {
+                       $output->writeln('<info>The specified group is already promoted</info>');
+                       return;
+               }
 
-                       $idLabel = '';
-                       if ($group->getGID() !== $group->getDisplayName()) {
-                               $idLabel = sprintf(' (Group ID: %s)', $group->getGID());
+               if ($input->getOption('yes') === false) {
+                       $currentlyPromotedGroup = $this->groupManager->get($currentlyPromotedGroupId);
+                       $demoteLabel = '';
+                       if ($currentlyPromotedGroup instanceof IGroup && $this->backend->groupExists($currentlyPromotedGroup->getGID())) {
+                               $groupNameLabel = $this->formatGroupName($currentlyPromotedGroup);
+                               $demoteLabel = sprintf('and demote %s ', $groupNameLabel);
                        }
 
-                       $q = new Question(sprintf('Promote %s%s to the admin group (y|N)? ', $group->getDisplayName(), $idLabel));
+                       /** @var QuestionHelper $helper */
+                       $helper = $this->getHelper('question');
+                       $q = new Question(sprintf('Promote %s to the admin group %s(y|N)? ', $this->formatGroupName($group), $demoteLabel));
                        $input->setOption('yes', $helper->ask($input, $output, $q) === 'y');
                }
                if ($input->getOption('yes') === true) {
-                       $access = $this->backend->getLDAPAccess($group->getGID());
                        $access->connection->setConfiguration(['ldapAdminGroup' => $group->getGID()]);
                        $access->connection->saveConfiguration();
                        $output->writeln(sprintf('<info>Group %s was promoted</info>', $group->getDisplayName()));