eltharin/webdav

symfony的WebDav包

安装: 2

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

V1.0.1 2024-05-12 08:27 UTC

This package is auto-updated.

Last update: 2024-09-12 09:09:00 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

什么是WebDav包?

此包允许在symfony应用程序中创建一个WebDav服务器,您可以使用相同的凭据并具有相同的ACL逻辑。

安装

  • 使用composer要求此包
composer require eltharin/webdav

然后添加一个文件以添加路由加载器

eltharin_webdav:
    resource: Eltharin\WebdavBundle\Routing\Loader
    type: service

此文件位于/vendor/eltharin/webdav/config/routes,并将其放入/config/routes

如果您想至少为您的配置之一启用基本验证器,您必须在security.yaml中添加一个防火墙

webdav:
    request_matcher: Eltharin\WebdavBundle\Security\WebdavRequestMatcher
    custom_authenticator: Eltharin\WebdavBundle\Security\WebdavAuthenticator
    entry_point: Eltharin\WebdavBundle\Security\WebdavAuthenticationEntryPoint

配置

  • 创建一个配置,对于WebDav空间,您可以有任意多的配置,每个配置必须以一个启动命令开始

开始创建扩展Eltharin\WebdavBundle\Interface\AbstractWebDavConfiguration的PHP类,您有两个stub来实现,getRouteData和getFileManager

class WebDavConfiguration extends AbstractWebDavConfiguration
{
    public function getRouteData(): RouteData
    {
        // TODO: Implement getRouteData() method.
    }

    public function getFileManager(): FileManagerInterface
    {
        // TODO: Implement getFileManager() method.
    }
}

RouteData是一个表示获取此WebDav端点的路由的对象。它看起来像是基本的symfony路由配置,您必须设置访问此端点的路径,并且可以设置要求。

WebDav文件路径将设置在这个字符串的末尾,不要调用您的变量路径。

    public function getRouteData(): RouteData
    {
        return new RouteData('/webdav');
    }

或者

    public function getRouteData(): RouteData
    {
        return new RouteData('/webdav/{uuid}', ['uuid' => '\d+']);
    }

生成的路由将是/webdav/{path}和/webdav/{uuid}/path,其中path将是.*,path可以包含/字符以表示子文件夹。

有一个用于在磁盘上存储文件的fileManager,根文件夹可配置。例如:%root%/var/data/,创建此目录并添加fileManager配置

    public function getFileManager(): FileManagerInterface
    {
        $fileManager = new WebDavFileManager();
        $fileManager->setConfig($this->appKernel->getProjectDir() . DIRECTORY_SEPARATOR . 'var' . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR,
            $this->requestStack->getMainRequest()?->getSchemeAndHttpHost() ?? '' ,
            '/' . $this->getRouteData()->getPath());
        return $fileManager;
    }

然后我们有我们的配置

use Eltharin\WebdavBundle\FileManager\WebDavFileManager;
use Eltharin\WebdavBundle\Interface\AbstractWebDavConfiguration;
use Eltharin\WebdavBundle\Interface\FileManagerInterface;
use Eltharin\WebdavBundle\Routing\RouteData;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\KernelInterface;

class WebDavConfiguration extends AbstractWebDavConfiguration
{
    public function __construct(private KernelInterface $appKernel, private RequestStack $requestStack)
    {
    }
    
    public function getRouteData(): RouteData
    {
        return new RouteData('/webdav');
    }

    public function getFileManager(): FileManagerInterface
    {
        $fileManager = new WebDavFileManager();
        $fileManager->setConfig($this->appKernel->getProjectDir() . DIRECTORY_SEPARATOR . 'var' . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR,
            $this->requestStack->getMainRequest()?->getSchemeAndHttpHost() ?? '' ,
            $this->getRouteData()->getPath()
        );
        return $fileManager;
    }
}

添加更多安全

为了添加安全,WebDAV包包括用于基本认证的验证器和入口点,验证您是否已如安装部分所述添加了防火墙。

在您想要添加安全的配置中,您必须在构造函数中添加安全管理器以填充$securityManager变量

public function __construct(private KernelInterface $appKernel, private RequestStack $requestStack, BasicAuthManager $authManager)
{
    $this->securityManager = $authManager;
}

并在您的security.yaml文件中添加一个access_control项

access_control:
    - { path: ^/webdav, roles: ROLE_USER }

现在您必须连接到ROLE_USER才能访问您的文件。

如果您想要更多的安全级别,您可以扩展WebDavFileManager类并实现checkAutorization函数或编写自己的类。

待办事项

  • 数据库文件管理器
  • CalDav CardDav