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 00000000000..e762e3c71c9 --- /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 5a6e00c8a22..5cbaad8dd69 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -107,6 +107,7 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { $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 f27399a042d..62ecfd8d004 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 61fd3193fa2..f0e449ec883 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -1071,6 +1071,7 @@ return array( '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 eaacd3939c4..14ed7f984b4 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', -- 2.39.5