This commit is contained in:
Brasdrive 2025-11-09 21:33:24 -04:00
parent 0dcd0dbf00
commit 510a40a350
1 changed files with 25 additions and 13 deletions

View File

@ -4,9 +4,10 @@ declare(strict_types=1);
namespace FlysystemOffload\Filesystem\Adapters; namespace FlysystemOffload\Filesystem\Adapters;
use FlysystemOffload\Filesystem\AdapterInterface; // ← CORRECTO (sin Adapters) 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;
@ -43,25 +44,36 @@ class WebdavAdapter implements AdapterInterface
// Crear cliente // Crear cliente
$client = new Client($clientConfig); $client = new Client($clientConfig);
// Configurar permisos // Configurar permisos usando PortableVisibilityConverter
$permissions = [ $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' => [ 'file' => [
'public' => $this->normalizePermission($config['file_public'] ?? '0644'), 'public' => $filePublic,
'private' => $this->normalizePermission($config['file_private'] ?? '0600'), 'private' => $filePrivate,
], ],
'dir' => [ 'dir' => [
'public' => $this->normalizePermission($config['dir_public'] ?? '0755'), 'public' => $dirPublic,
'private' => $this->normalizePermission($config['dir_private'] ?? '0700'), 'private' => $dirPrivate,
], ],
]; ]);
error_log('[WebDAV Adapter] Creating adapter with permissions: ' . print_r($permissions, true)); error_log(sprintf(
'[WebDAV Adapter] Creating adapter with permissions - File: public=%o private=%o, Dir: public=%o private=%o',
$filePublic,
$filePrivate,
$dirPublic,
$dirPrivate
));
// Crear adaptador // Crear adaptador con PortableVisibilityConverter
$adapter = new LeagueWebDAVAdapter( $adapter = new LeagueWebDAVAdapter(
$client, $client,
$config['prefix'] ?? '', $config['prefix'] ?? '',
$permissions $visibilityConverter
); );
error_log('[WebDAV Adapter] Adapter created successfully'); error_log('[WebDAV Adapter] Adapter created successfully');
@ -127,12 +139,12 @@ class WebdavAdapter implements AdapterInterface
if (is_string($permission)) { if (is_string($permission)) {
$permission = trim($permission); $permission = trim($permission);
// Si es octal string (ej: "0644") // Si es octal string (ej: "0644")
if (preg_match('/^0[0-7]{3}$/', $permission)) { if (preg_match('/^0[0-7]{3}$/', $permission)) {
return intval($permission, 8); return intval($permission, 8);
} }
// Si es decimal string sin el 0 (ej: "644") // Si es decimal string sin el 0 (ej: "644")
if (preg_match('/^[0-7]{3}$/', $permission)) { if (preg_match('/^[0-7]{3}$/', $permission)) {
return intval('0' . $permission, 8); return intval('0' . $permission, 8);