From 2b0b5c9b0d7454087d19b31221299e18c30f60ef Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 15 Jan 2024 19:38:32 +0100 Subject: [PATCH] add command to list mounts for user Signed-off-by: Robin Appelman --- core/Command/Info/UserMounts.php | 69 +++++++++++++++++++++ core/register_command.php | 1 + lib/composer/composer/LICENSE | 2 - lib/composer/composer/autoload_classmap.php | 1 + lib/composer/composer/autoload_static.php | 1 + 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 core/Command/Info/UserMounts.php diff --git a/core/Command/Info/UserMounts.php b/core/Command/Info/UserMounts.php new file mode 100644 index 0000000000000..e762e3c71c99a --- /dev/null +++ b/core/Command/Info/UserMounts.php @@ -0,0 +1,69 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OC\Core\Command\Info; + +use OCP\Files\IRootFolder; +use OCP\Files\Mount\IMountPoint; +use OCP\IUserManager; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class UserMounts extends Command { + public function __construct( + private FileUtils $fileUtils, + private IUserManager $userManager, + private IRootFolder $rootFolder, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('info:user:mounts') + ->setDescription('list mounted storages available for a user') + ->addArgument('user', InputArgument::REQUIRED, "User id to get mounted storages for"); + } + + public function execute(InputInterface $input, OutputInterface $output): int { + $userId = $input->getArgument('user'); + $user = $this->userManager->get($userId); + if (!$user) { + $output->writeln("user $userId not found"); + return 1; + } + + $userFolder = $this->rootFolder->getUserFolder($userId); + $mounts = $this->rootFolder->getMountsIn($userFolder->getPath()); + $mounts[] = $userFolder->getMountPoint(); + usort($mounts, fn (IMountPoint $a, IMountPoint $b) => $a->getMountPoint() <=> $b->getMountPoint()); + + foreach ($mounts as $mount) { + $mountInfo = $this->fileUtils->formatMountType($mount); + $output->writeln("{$mount->getMountPoint()}: $mountInfo"); + } + return 0; + } +} diff --git a/core/register_command.php b/core/register_command.php index 5a6e00c8a2263..5cbaad8dd69b5 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -107,6 +107,7 @@ $application->add(\OC::$server->get(OC\Core\Command\Info\File::class)); $application->add(\OC::$server->get(OC\Core\Command\Info\Space::class)); + $application->add(\OC::$server->get(OC\Core\Command\Info\UserMounts::class)); $application->add(new OC\Core\Command\Db\ConvertType(\OC::$server->getConfig(), new \OC\DB\ConnectionFactory(\OC::$server->getSystemConfig()))); $application->add(new OC\Core\Command\Db\ConvertMysqlToMB4(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection(), \OC::$server->getURLGenerator(), \OC::$server->get(LoggerInterface::class))); diff --git a/lib/composer/composer/LICENSE b/lib/composer/composer/LICENSE index f27399a042d95..62ecfd8d0046b 100644 --- a/lib/composer/composer/LICENSE +++ b/lib/composer/composer/LICENSE @@ -1,4 +1,3 @@ - Copyright (c) Nils Adermann, Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,4 +17,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 61fd3193fa2fa..f0e449ec8833e 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -1071,6 +1071,7 @@ 'OC\\Core\\Command\\Info\\File' => $baseDir . '/core/Command/Info/File.php', 'OC\\Core\\Command\\Info\\FileUtils' => $baseDir . '/core/Command/Info/FileUtils.php', 'OC\\Core\\Command\\Info\\Space' => $baseDir . '/core/Command/Info/Space.php', + 'OC\\Core\\Command\\Info\\UserMounts' => $baseDir . '/core/Command/Info/UserMounts.php', 'OC\\Core\\Command\\Integrity\\CheckApp' => $baseDir . '/core/Command/Integrity/CheckApp.php', 'OC\\Core\\Command\\Integrity\\CheckCore' => $baseDir . '/core/Command/Integrity/CheckCore.php', 'OC\\Core\\Command\\Integrity\\SignApp' => $baseDir . '/core/Command/Integrity/SignApp.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index eaacd3939c468..14ed7f984b458 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -1104,6 +1104,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OC\\Core\\Command\\Info\\File' => __DIR__ . '/../../..' . '/core/Command/Info/File.php', 'OC\\Core\\Command\\Info\\FileUtils' => __DIR__ . '/../../..' . '/core/Command/Info/FileUtils.php', 'OC\\Core\\Command\\Info\\Space' => __DIR__ . '/../../..' . '/core/Command/Info/Space.php', + 'OC\\Core\\Command\\Info\\UserMounts' => __DIR__ . '/../../..' . '/core/Command/Info/UserMounts.php', 'OC\\Core\\Command\\Integrity\\CheckApp' => __DIR__ . '/../../..' . '/core/Command/Integrity/CheckApp.php', 'OC\\Core\\Command\\Integrity\\CheckCore' => __DIR__ . '/../../..' . '/core/Command/Integrity/CheckCore.php', 'OC\\Core\\Command\\Integrity\\SignApp' => __DIR__ . '/../../..' . '/core/Command/Integrity/SignApp.php',