summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files_external/lib/Command/Notify.php70
1 files changed, 56 insertions, 14 deletions
diff --git a/apps/files_external/lib/Command/Notify.php b/apps/files_external/lib/Command/Notify.php
index 6537e94832c..31919ba2d2a 100644
--- a/apps/files_external/lib/Command/Notify.php
+++ b/apps/files_external/lib/Command/Notify.php
@@ -41,6 +41,7 @@ use OCP\Files\Storage\IStorage;
use OCP\Files\StorageNotAvailableException;
use OCP\IDBConnection;
use OCP\ILogger;
+use OCP\IUserManager;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
@@ -53,12 +54,20 @@ class Notify extends Base {
private $connection;
/** @var ILogger */
private $logger;
+ /** @var IUserManager */
+ private $userManager;
- public function __construct(GlobalStoragesService $globalService, IDBConnection $connection, ILogger $logger) {
+ public function __construct(
+ GlobalStoragesService $globalService,
+ IDBConnection $connection,
+ ILogger $logger,
+ IUserManager $userManager
+ ) {
parent::__construct();
$this->globalService = $globalService;
$this->connection = $connection;
$this->logger = $logger;
+ $this->userManager = $userManager;
}
protected function configure() {
@@ -94,6 +103,30 @@ class Notify extends Base {
parent::configure();
}
+ private function getUserOption(InputInterface $input): ?string {
+ if ($input->getOption('user')) {
+ return (string)$input->getOption('user');
+ } elseif (isset($_ENV['NOTIFY_USER'])) {
+ return (string)$_ENV['NOTIFY_USER'];
+ } elseif (isset($_SERVER['NOTIFY_USER'])) {
+ return (string)$_SERVER['NOTIFY_USER'];
+ } else {
+ return null;
+ }
+ }
+
+ private function getPasswordOption(InputInterface $input): ?string {
+ if ($input->getOption('password')) {
+ return (string)$input->getOption('password');
+ } elseif (isset($_ENV['NOTIFY_PASSWORD'])) {
+ return (string)$_ENV['NOTIFY_PASSWORD'];
+ } elseif (isset($_SERVER['NOTIFY_PASSWORD'])) {
+ return (string)$_SERVER['NOTIFY_PASSWORD'];
+ } else {
+ return null;
+ }
+ }
+
protected function execute(InputInterface $input, OutputInterface $output): int {
$mount = $this->globalService->getStorage($input->getArgument('mount_id'));
if (is_null($mount)) {
@@ -101,28 +134,37 @@ class Notify extends Base {
return 1;
}
$noAuth = false;
+
+ $userOption = $this->getUserOption($input);
+ $passwordOption = $this->getPasswordOption($input);
+
+ // if only the user is provided, we get the user object to pass along to the auth backend
+ // this allows using saved user credentials
+ $user = ($userOption && !$passwordOption) ? $this->userManager->get($userOption) : null;
+
try {
$authBackend = $mount->getAuthMechanism();
- $authBackend->manipulateStorageConfig($mount);
+ $authBackend->manipulateStorageConfig($mount, $user);
} catch (InsufficientDataForMeaningfulAnswerException $e) {
$noAuth = true;
} catch (StorageNotAvailableException $e) {
$noAuth = true;
}
- if ($input->getOption('user')) {
- $mount->setBackendOption('user', $input->getOption('user'));
- } elseif (isset($_ENV['NOTIFY_USER'])) {
- $mount->setBackendOption('user', $_ENV['NOTIFY_USER']);
- } elseif (isset($_SERVER['NOTIFY_USER'])) {
- $mount->setBackendOption('user', $_SERVER['NOTIFY_USER']);
+ if ($userOption) {
+ $mount->setBackendOption('user', $userOption);
}
- if ($input->getOption('password')) {
- $mount->setBackendOption('password', $input->getOption('password'));
- } elseif (isset($_ENV['NOTIFY_PASSWORD'])) {
- $mount->setBackendOption('password', $_ENV['NOTIFY_PASSWORD']);
- } elseif (isset($_SERVER['NOTIFY_PASSWORD'])) {
- $mount->setBackendOption('password', $_SERVER['NOTIFY_PASSWORD']);
+ if ($passwordOption) {
+ $mount->setBackendOption('password', $passwordOption);
+ }
+
+ try {
+ $backend = $mount->getBackend();
+ $backend->manipulateStorageConfig($mount, $user);
+ } catch (InsufficientDataForMeaningfulAnswerException $e) {
+ $noAuth = true;
+ } catch (StorageNotAvailableException $e) {
+ $noAuth = true;
}
try {