]> git.mxchange.org Git - friendica-addons.git/commitdiff
Add WebDavConfig
authorPhilipp <admin@philipp.info>
Mon, 4 Oct 2021 09:40:05 +0000 (11:40 +0200)
committerPhilipp <admin@philipp.info>
Mon, 4 Oct 2021 09:40:05 +0000 (11:40 +0200)
webdav_storage/src/WebDav.php
webdav_storage/src/WebDavConfig.php [new file with mode: 0644]
webdav_storage/webdav_storage.php

index fbe7413a36428f8c5e69a68b29a091ccb0486bb1..4502b935b249f01968ee812c7b7560bbabb3cc2e 100644 (file)
@@ -3,8 +3,6 @@
 namespace Friendica\Addon\webdav_storage\src;
 
 use Exception;
-use Friendica\Core\Config\IConfig;
-use Friendica\Core\L10n;
 use Friendica\Model\Storage\IWritableStorage;
 use Friendica\Model\Storage\ReferenceStorageException;
 use Friendica\Model\Storage\StorageException;
@@ -20,12 +18,6 @@ class WebDav implements IWritableStorage
 {
        const NAME = 'WebDav';
 
-       /** @var L10n */
-       private $l10n;
-
-       /** @var IConfig */
-       private $config;
-
        /** @var string */
        private $url;
 
@@ -38,27 +30,23 @@ class WebDav implements IWritableStorage
        /** @var array */
        private $authOptions;
 
-       public function __construct(L10n $l10n, IConfig $config, IHTTPClient $client, LoggerInterface $logger)
+       /**
+        * WebDav constructor
+        *
+        * @param string          $url         The full URL to the webdav endpoint (including the subdirectories)
+        * @param array           $authOptions The authentication options for the http calls ( ['username', 'password', 'auth_type'] )
+        * @param IHTTPClient     $client      The http client for communicating with the WebDav endpoint
+        * @param LoggerInterface $logger      The standard logging class
+        */
+       public function __construct(string $url, array $authOptions, IHTTPClient $client, LoggerInterface $logger)
        {
-               $this->l10n   = $l10n;
-               $this->config = $config;
                $this->client = $client;
                $this->logger = $logger;
 
-               $this->authOptions = null;
-
-               if (!empty($this->config->get('webdav', 'username'))) {
-                       $this->authOptions = [
-                               $this->config->get('webdav', 'username'),
-                               (string)$this->config->get('webdav', 'password', ''),
-                               $this->config->get('webdav', 'auth_type', 'basic')
-                       ];
-               }
-
-               $this->url = $this->config->get('webdav', 'url');
+               $this->authOptions = $authOptions;
+               $this->url         = $url;
        }
 
-
        /**
         * Split data ref and return file path
         *
@@ -262,95 +250,6 @@ class WebDav implements IWritableStorage
                $this->checkAndDeletePath($file[1]);
        }
 
-       /**
-        * @inheritDoc
-        */
-       public function getOptions(): array
-       {
-               $auths = [
-                       ''       => 'None',
-                       'basic'  => 'Basic',
-                       'digest' => 'Digest',
-               ];
-
-               return [
-                       'url' => [
-                               'input',
-                               $this->l10n->t('URL'),
-                               $this->url,
-                               $this->l10n->t('URL to the Webdav endpoint, where files can be saved'),
-                               true
-                       ],
-                       'username' => [
-                               'input',
-                               $this->l10n->t('Username'),
-                               $this->config->get('webdav', 'username', ''),
-                               $this->l10n->t('Username to authenticate to the Webdav endpoint')
-                       ],
-                       'password' => [
-                               'password',
-                               $this->l10n->t('Password'),
-                               $this->config->get('webdav', 'username', ''),
-                               $this->l10n->t('Password to authenticate to the Webdav endpoint')
-                       ],
-                       'auth_type' => [
-                               'select',
-                               $this->l10n->t('Authentication type'),
-                               $this->config->get('webdav', 'auth_type', ''),
-                               $this->l10n->t('authentication type to the Webdav endpoint'),
-                               $auths,
-                       ]
-               ];
-       }
-
-       /**
-        * @inheritDoc
-        */
-       public function saveOptions(array $data): array
-       {
-               $url      = $data['url']      ?? '';
-               $username = $data['username'] ?? '';
-               $password = $data['password'] ?? '';
-
-               $auths = [
-                       ''       => 'None',
-                       'basic'  => 'Basic',
-                       'digest' => 'Digest',
-               ];
-
-               $authType = $data['auth_type'] ?? '';
-               if (!key_exists($authType, $auths)) {
-                       return [
-                               'auth_type' => $this->l10n->t('Authentication type is invalid.'),
-                       ];
-               }
-
-               $options = null;
-
-               if (!empty($username)) {
-                       $options = [
-                               $username,
-                               $password,
-                               $authType
-                       ];
-               }
-
-               if (!$this->client->head($url, [HTTPClientOptions::AUTH => $options])->isSuccess()) {
-                       return [
-                               'url' => $this->l10n->t('url is either invalid or not reachable'),
-                       ];
-               }
-
-               $this->config->set('webdav', 'url', $url);
-               $this->config->set('webdav', 'username', $username);
-               $this->config->set('webdav', 'password', $password);
-               $this->config->set('webdav', 'auth_type', $authType);
-
-               $this->url = $url;
-
-               return [];
-       }
-
        /**
         * {@inheritDoc}
         */
diff --git a/webdav_storage/src/WebDavConfig.php b/webdav_storage/src/WebDavConfig.php
new file mode 100644 (file)
index 0000000..5e2bbaf
--- /dev/null
@@ -0,0 +1,156 @@
+<?php
+
+namespace Friendica\Addon\webdav_storage\src;
+
+use Friendica\Core\Config\IConfig;
+use Friendica\Core\L10n;
+use Friendica\Model\Storage\IStorageConfiguration;
+use Friendica\Network\HTTPClientOptions;
+use Friendica\Network\IHTTPClient;
+
+/**
+ * A WebDav Backend Storage class
+ */
+class WebDavConfig implements IStorageConfiguration
+{
+       const NAME = 'WebDav';
+
+       /** @var L10n */
+       private $l10n;
+
+       /** @var IConfig */
+       private $config;
+
+       /** @var string */
+       private $url;
+
+       /** @var IHTTPClient */
+       private $client;
+
+       /** @var array */
+       private $authOptions;
+
+       /**
+        * @return string
+        */
+       public function getUrl(): string
+       {
+               return $this->url;
+       }
+
+       /**
+        * @return array
+        */
+       public function getAuthOptions(): array
+       {
+               return $this->authOptions;
+       }
+
+       public function __construct(L10n $l10n, IConfig $config, IHTTPClient $client)
+       {
+               $this->l10n   = $l10n;
+               $this->config = $config;
+               $this->client = $client;
+
+               $this->authOptions = null;
+
+               if (!empty($this->config->get('webdav', 'username'))) {
+                       $this->authOptions = [
+                               $this->config->get('webdav', 'username'),
+                               (string)$this->config->get('webdav', 'password', ''),
+                               $this->config->get('webdav', 'auth_type', 'basic')
+                       ];
+               }
+
+               $this->url = $this->config->get('webdav', 'url');
+       }
+
+       /**
+        * @inheritDoc
+        */
+       public function getOptions(): array
+       {
+               $auths = [
+                       ''       => 'None',
+                       'basic'  => 'Basic',
+                       'digest' => 'Digest',
+               ];
+
+               return [
+                       'url' => [
+                               'input',
+                               $this->l10n->t('URL'),
+                               $this->url,
+                               $this->l10n->t('URL to the Webdav endpoint, where files can be saved'),
+                               true
+                       ],
+                       'username' => [
+                               'input',
+                               $this->l10n->t('Username'),
+                               $this->config->get('webdav', 'username', ''),
+                               $this->l10n->t('Username to authenticate to the Webdav endpoint')
+                       ],
+                       'password' => [
+                               'password',
+                               $this->l10n->t('Password'),
+                               $this->config->get('webdav', 'username', ''),
+                               $this->l10n->t('Password to authenticate to the Webdav endpoint')
+                       ],
+                       'auth_type' => [
+                               'select',
+                               $this->l10n->t('Authentication type'),
+                               $this->config->get('webdav', 'auth_type', ''),
+                               $this->l10n->t('authentication type to the Webdav endpoint'),
+                               $auths,
+                       ]
+               ];
+       }
+
+       /**
+        * @inheritDoc
+        */
+       public function saveOptions(array $data): array
+       {
+               $url      = $data['url']      ?? '';
+               $username = $data['username'] ?? '';
+               $password = $data['password'] ?? '';
+
+               $auths = [
+                       ''       => 'None',
+                       'basic'  => 'Basic',
+                       'digest' => 'Digest',
+               ];
+
+               $authType = $data['auth_type'] ?? '';
+               if (!key_exists($authType, $auths)) {
+                       return [
+                               'auth_type' => $this->l10n->t('Authentication type is invalid.'),
+                       ];
+               }
+
+               $options = null;
+
+               if (!empty($username)) {
+                       $options = [
+                               $username,
+                               $password,
+                               $authType
+                       ];
+               }
+
+               if (!$this->client->head($url, [HTTPClientOptions::AUTH => $options])->isSuccess()) {
+                       return [
+                               'url' => $this->l10n->t('url is either invalid or not reachable'),
+                       ];
+               }
+
+               $this->config->set('webdav', 'url', $url);
+               $this->config->set('webdav', 'username', $username);
+               $this->config->set('webdav', 'password', $password);
+               $this->config->set('webdav', 'auth_type', $authType);
+
+               $this->url = $url;
+
+               return [];
+       }
+}
index 422a504169f9062b7c9241d7c33d573f3fcd4381..7686ca9f960c3aedc860f54e7f7c1267196fbff5 100644 (file)
@@ -7,6 +7,7 @@
  */
 
 use Friendica\Addon\webdav_storage\src\WebDav;
+use Friendica\Addon\webdav_storage\src\WebDavConfig;
 use Friendica\App;
 use Friendica\Core\Hook;
 use Friendica\DI;
@@ -14,15 +15,22 @@ use Friendica\DI;
 function webdav_storage_install($a)
 {
        Hook::register('storage_instance' , __FILE__, 'webdav_storage_instance');
+       Hook::register('storage_config' , __FILE__, 'webdav_storage_config');
        DI::storageManager()->register(WebDav::class);
 }
 
 function webdav_storage_uninstall()
 {
-       DI::storageManager()->unregister(WebDav::getName());
+       DI::storageManager()->unregister(WebDav::class);
 }
 
 function webdav_storage_instance(App $a, array &$data)
 {
-       $data['storage'] = new WebDav(DI::l10n(), DI::config(), DI::httpClient(), DI::logger());
+       $config          = new WebDavConfig(DI::l10n(), DI::config(), DI::httpClient());
+       $data['storage'] = new WebDav($config->getUrl(), $config->getAuthOptions(), DI::httpClient(), DI::logger());
+}
+
+function webdav_storage_config(App $a, array &$data)
+{
+       $data['storage_config'] = new WebDavConfig(DI::l10n(), DI::config(), DI::httpClient());
 }