3.0.0
This commit is contained in:
parent
510a40a350
commit
5a11f3e2b9
|
|
@ -72,6 +72,6 @@ return [
|
||||||
'Expires' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_EXPIRES')
|
'Expires' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_EXPIRES')
|
||||||
?: gmdate('D, d M Y H:i:s \G\M\T', strtotime('+1 year')),
|
?: gmdate('D, d M Y H:i:s \G\M\T', strtotime('+1 year')),
|
||||||
],
|
],
|
||||||
'default_visibility' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_VISIBILITY') ?: 'private',
|
'default_visibility' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_VISIBILITY') ?: 'public',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ namespace FlysystemOffload\Filesystem\Adapters;
|
||||||
use FlysystemOffload\Filesystem\AdapterInterface;
|
use FlysystemOffload\Filesystem\AdapterInterface;
|
||||||
use League\Flysystem\FilesystemAdapter;
|
use League\Flysystem\FilesystemAdapter;
|
||||||
use League\Flysystem\WebDAV\WebDAVAdapter as LeagueWebDAVAdapter;
|
use League\Flysystem\WebDAV\WebDAVAdapter as LeagueWebDAVAdapter;
|
||||||
use League\Flysystem\UnixVisibility\PortableVisibilityConverter;
|
|
||||||
use Sabre\DAV\Client;
|
use Sabre\DAV\Client;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
|
|
||||||
|
|
@ -44,36 +43,21 @@ class WebdavAdapter implements AdapterInterface
|
||||||
// Crear cliente
|
// Crear cliente
|
||||||
$client = new Client($clientConfig);
|
$client = new Client($clientConfig);
|
||||||
|
|
||||||
// Configurar permisos usando PortableVisibilityConverter
|
// El tercer parámetro debe ser un string: 'public' o 'private'
|
||||||
$filePublic = $this->normalizePermission($config['file_public'] ?? '0644');
|
// Por defecto usamos 'public' para compatibilidad
|
||||||
$filePrivate = $this->normalizePermission($config['file_private'] ?? '0600');
|
$visibilityHandling = $config['visibility'] ?? 'public';
|
||||||
$dirPublic = $this->normalizePermission($config['dir_public'] ?? '0755');
|
|
||||||
$dirPrivate = $this->normalizePermission($config['dir_private'] ?? '0700');
|
|
||||||
|
|
||||||
$visibilityConverter = PortableVisibilityConverter::fromArray([
|
|
||||||
'file' => [
|
|
||||||
'public' => $filePublic,
|
|
||||||
'private' => $filePrivate,
|
|
||||||
],
|
|
||||||
'dir' => [
|
|
||||||
'public' => $dirPublic,
|
|
||||||
'private' => $dirPrivate,
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
|
|
||||||
error_log(sprintf(
|
error_log(sprintf(
|
||||||
'[WebDAV Adapter] Creating adapter with permissions - File: public=%o private=%o, Dir: public=%o private=%o',
|
'[WebDAV Adapter] Creating adapter with prefix: %s, visibility: %s',
|
||||||
$filePublic,
|
$config['prefix'] ?? '',
|
||||||
$filePrivate,
|
$visibilityHandling
|
||||||
$dirPublic,
|
|
||||||
$dirPrivate
|
|
||||||
));
|
));
|
||||||
|
|
||||||
// Crear adaptador con PortableVisibilityConverter
|
// Crear adaptador - el tercer parámetro DEBE ser string
|
||||||
$adapter = new LeagueWebDAVAdapter(
|
$adapter = new LeagueWebDAVAdapter(
|
||||||
$client,
|
$client,
|
||||||
$config['prefix'] ?? '',
|
$config['prefix'] ?? '',
|
||||||
$visibilityConverter
|
$visibilityHandling // ← DEBE SER STRING: 'public' o 'private'
|
||||||
);
|
);
|
||||||
|
|
||||||
error_log('[WebDAV Adapter] Adapter created successfully');
|
error_log('[WebDAV Adapter] Adapter created successfully');
|
||||||
|
|
@ -99,10 +83,7 @@ class WebdavAdapter implements AdapterInterface
|
||||||
'password',
|
'password',
|
||||||
'auth_type',
|
'auth_type',
|
||||||
'prefix',
|
'prefix',
|
||||||
'file_public',
|
'visibility', // 'public' o 'private'
|
||||||
'file_private',
|
|
||||||
'dir_public',
|
|
||||||
'dir_private',
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -123,35 +104,10 @@ class WebdavAdapter implements AdapterInterface
|
||||||
if (!filter_var($config['base_uri'], FILTER_VALIDATE_URL)) {
|
if (!filter_var($config['base_uri'], FILTER_VALIDATE_URL)) {
|
||||||
throw new InvalidArgumentException('WebDAV base_uri must be a valid URL');
|
throw new InvalidArgumentException('WebDAV base_uri must be a valid URL');
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
// Validar visibility si está presente
|
||||||
* Normaliza un permiso a entero octal
|
if (isset($config['visibility']) && !in_array($config['visibility'], ['public', 'private'], true)) {
|
||||||
*
|
throw new InvalidArgumentException("WebDAV visibility must be 'public' or 'private'");
|
||||||
* @param string|int $permission
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
private function normalizePermission($permission): int
|
|
||||||
{
|
|
||||||
if (is_int($permission)) {
|
|
||||||
return $permission;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_string($permission)) {
|
|
||||||
$permission = trim($permission);
|
|
||||||
|
|
||||||
// Si es octal string (ej: "0644")
|
|
||||||
if (preg_match('/^0[0-7]{3}$/', $permission)) {
|
|
||||||
return intval($permission, 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Si es decimal string sin el 0 (ej: "644")
|
|
||||||
if (preg_match('/^[0-7]{3}$/', $permission)) {
|
|
||||||
return intval('0' . $permission, 8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default
|
|
||||||
return 0644;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue