diff --git a/config/flysystem-offload.php b/config/flysystem-offload.php index 9e8ab33..9f52af0 100644 --- a/config/flysystem-offload.php +++ b/config/flysystem-offload.php @@ -72,6 +72,6 @@ return [ 'Expires' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_EXPIRES') ?: 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', ], ]; diff --git a/src/Filesystem/Adapters/WebdavAdapter.php b/src/Filesystem/Adapters/WebdavAdapter.php index 945a870..72be272 100644 --- a/src/Filesystem/Adapters/WebdavAdapter.php +++ b/src/Filesystem/Adapters/WebdavAdapter.php @@ -7,7 +7,6 @@ namespace FlysystemOffload\Filesystem\Adapters; use FlysystemOffload\Filesystem\AdapterInterface; use League\Flysystem\FilesystemAdapter; use League\Flysystem\WebDAV\WebDAVAdapter as LeagueWebDAVAdapter; -use League\Flysystem\UnixVisibility\PortableVisibilityConverter; use Sabre\DAV\Client; use InvalidArgumentException; @@ -44,36 +43,21 @@ class WebdavAdapter implements AdapterInterface // Crear cliente $client = new Client($clientConfig); - // Configurar permisos usando PortableVisibilityConverter - $filePublic = $this->normalizePermission($config['file_public'] ?? '0644'); - $filePrivate = $this->normalizePermission($config['file_private'] ?? '0600'); - $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, - ], - ]); + // El tercer parámetro debe ser un string: 'public' o 'private' + // Por defecto usamos 'public' para compatibilidad + $visibilityHandling = $config['visibility'] ?? 'public'; error_log(sprintf( - '[WebDAV Adapter] Creating adapter with permissions - File: public=%o private=%o, Dir: public=%o private=%o', - $filePublic, - $filePrivate, - $dirPublic, - $dirPrivate + '[WebDAV Adapter] Creating adapter with prefix: %s, visibility: %s', + $config['prefix'] ?? '', + $visibilityHandling )); - // Crear adaptador con PortableVisibilityConverter + // Crear adaptador - el tercer parámetro DEBE ser string $adapter = new LeagueWebDAVAdapter( $client, $config['prefix'] ?? '', - $visibilityConverter + $visibilityHandling // ← DEBE SER STRING: 'public' o 'private' ); error_log('[WebDAV Adapter] Adapter created successfully'); @@ -99,10 +83,7 @@ class WebdavAdapter implements AdapterInterface 'password', 'auth_type', 'prefix', - 'file_public', - 'file_private', - 'dir_public', - 'dir_private', + 'visibility', // 'public' o 'private' ]; } @@ -123,35 +104,10 @@ class WebdavAdapter implements AdapterInterface if (!filter_var($config['base_uri'], FILTER_VALIDATE_URL)) { throw new InvalidArgumentException('WebDAV base_uri must be a valid URL'); } - } - /** - * Normaliza un permiso a entero octal - * - * @param string|int $permission - * @return int - */ - private function normalizePermission($permission): int - { - if (is_int($permission)) { - return $permission; + // Validar visibility si está presente + if (isset($config['visibility']) && !in_array($config['visibility'], ['public', 'private'], true)) { + throw new InvalidArgumentException("WebDAV visibility must be 'public' or 'private'"); } - - 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; } }