3.0.0
This commit is contained in:
parent
ac0a351064
commit
56d96b32cb
|
|
@ -15,13 +15,13 @@ final class WebdavAdapter
|
||||||
{
|
{
|
||||||
public function createAdapter(array $config): FilesystemAdapter
|
public function createAdapter(array $config): FilesystemAdapter
|
||||||
{
|
{
|
||||||
if (!isset($config['webdav']) || !is_array($config['webdav'])) {
|
if (! isset($config['webdav']) || ! is_array($config['webdav'])) {
|
||||||
throw new InvalidArgumentException('La configuración de WebDAV no está definida.');
|
throw new InvalidArgumentException('La configuración de WebDAV no está definida.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$webdav = $config['webdav'];
|
$webdav = $config['webdav'];
|
||||||
|
|
||||||
$endpoint = $this->requiredString($webdav, 'endpoint', 'webdav.endpoint');
|
$endpoint = $this->requiredString($webdav, 'endpoint', 'webdav.endpoint');
|
||||||
$credentials = $webdav['credentials'] ?? [];
|
$credentials = $webdav['credentials'] ?? [];
|
||||||
|
|
||||||
$username = $this->requiredString($credentials, 'username', 'webdav.credentials.username');
|
$username = $this->requiredString($credentials, 'username', 'webdav.credentials.username');
|
||||||
|
|
@ -38,39 +38,29 @@ final class WebdavAdapter
|
||||||
$clientConfig['authType'] = $authType;
|
$clientConfig['authType'] = $authType;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($webdav['default_headers']) && is_array($webdav['default_headers'])) {
|
if (! empty($webdav['default_headers']) && is_array($webdav['default_headers'])) {
|
||||||
$clientConfig['headers'] = $this->normaliseHeaders($webdav['default_headers']);
|
$clientConfig['headers'] = $this->normaliseHeaders($webdav['default_headers']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($webdav['timeout'])) {
|
if (! empty($webdav['timeout'])) {
|
||||||
$clientConfig['timeout'] = (int) $webdav['timeout'];
|
$clientConfig['timeout'] = (int) $webdav['timeout'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($webdav['curl_options']) && is_array($webdav['curl_options'])) {
|
if (! empty($webdav['curl_options']) && is_array($webdav['curl_options'])) {
|
||||||
$clientConfig['curl.options'] = $webdav['curl_options'];
|
$clientConfig['curl.options'] = $webdav['curl_options'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$client = new Client($clientConfig);
|
$client = new Client($clientConfig);
|
||||||
|
|
||||||
$prefix = '';
|
$prefix = '';
|
||||||
if (!empty($webdav['prefix'])) {
|
if (! empty($webdav['prefix'])) {
|
||||||
$prefix = trim((string) $webdav['prefix'], '/');
|
$prefix = trim((string) $webdav['prefix'], '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
$defaultVisibility = $webdav['default_visibility'] ?? ($config['visibility'] ?? Visibility::PRIVATE);
|
$defaultVisibility = $webdav['default_visibility'] ?? ($config['visibility'] ?? Visibility::PRIVATE);
|
||||||
$visibility = $this->normaliseVisibility($defaultVisibility);
|
$visibility = $this->normaliseVisibility($defaultVisibility);
|
||||||
|
|
||||||
// Permisos Unix por defecto (puedes exponerlos en config si lo necesitas)
|
$permissions = $this->normalisePermissions($webdav['permissions'] ?? []);
|
||||||
$permissions = $webdav['permissions'] ?? [
|
|
||||||
'file' => [
|
|
||||||
Visibility::PUBLIC => 0644,
|
|
||||||
Visibility::PRIVATE => 0600,
|
|
||||||
],
|
|
||||||
'dir' => [
|
|
||||||
Visibility::PUBLIC => 0755,
|
|
||||||
Visibility::PRIVATE => 0700,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
$directoryDefault = $visibility === Visibility::PUBLIC ? 0755 : 0700;
|
$directoryDefault = $visibility === Visibility::PUBLIC ? 0755 : 0700;
|
||||||
|
|
||||||
|
|
@ -86,7 +76,7 @@ final class WebdavAdapter
|
||||||
{
|
{
|
||||||
$value = $config[$key] ?? null;
|
$value = $config[$key] ?? null;
|
||||||
|
|
||||||
if (!is_string($value) || trim($value) === '') {
|
if (! is_string($value) || trim($value) === '') {
|
||||||
$path ??= $key;
|
$path ??= $key;
|
||||||
|
|
||||||
throw new InvalidArgumentException(sprintf(
|
throw new InvalidArgumentException(sprintf(
|
||||||
|
|
@ -108,7 +98,7 @@ final class WebdavAdapter
|
||||||
$normalised = [];
|
$normalised = [];
|
||||||
|
|
||||||
foreach ($headers as $header => $value) {
|
foreach ($headers as $header => $value) {
|
||||||
if (!is_string($header) || $header === '') {
|
if (! is_string($header) || $header === '') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -124,4 +114,48 @@ final class WebdavAdapter
|
||||||
? Visibility::PUBLIC
|
? Visibility::PUBLIC
|
||||||
: Visibility::PRIVATE;
|
: Visibility::PRIVATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function normalisePermissions(array $permissions): array
|
||||||
|
{
|
||||||
|
$defaults = [
|
||||||
|
'file' => [
|
||||||
|
Visibility::PUBLIC => 0644,
|
||||||
|
Visibility::PRIVATE => 0600,
|
||||||
|
],
|
||||||
|
'dir' => [
|
||||||
|
Visibility::PUBLIC => 0755,
|
||||||
|
Visibility::PRIVATE => 0700,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (['file', 'dir'] as $type) {
|
||||||
|
if (! isset($permissions[$type]) || ! is_array($permissions[$type])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($permissions[$type] as $visibility => $mode) {
|
||||||
|
$visibility = strtolower((string) $visibility);
|
||||||
|
|
||||||
|
if ($visibility !== Visibility::PUBLIC && $visibility !== Visibility::PRIVATE) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_string($mode)) {
|
||||||
|
$mode = trim($mode);
|
||||||
|
|
||||||
|
if ($mode === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mode = octdec($mode);
|
||||||
|
} elseif (! is_int($mode)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$defaults[$type][$visibility] = $mode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $defaults;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue