mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2024-11-21 22:03:40 +00:00
Add WebDavConfig
This commit is contained in:
parent
52407530db
commit
2038eec6d7
3 changed files with 177 additions and 114 deletions
|
@ -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}
|
||||
*/
|
||||
|
|
156
webdav_storage/src/WebDavConfig.php
Normal file
156
webdav_storage/src/WebDavConfig.php
Normal file
|
@ -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 [];
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue