使用DAV4Rack身份验证动态构建机架应用程序

时间:2014-08-21 18:14:22

标签: ruby rack webdav

我正在尝试使用rack和dav4rack构建一个webdav实现,它将根据登录自动将用户带到他们自己的目录。所以,一个(不工作)的例子与config.ru:

map '/webdav' do

  use Rack::Auth::Basic do |username, password|
    Site.valid_login? username, password
    @site = Site[username: username]
  end

  run DAV4Rack::Handler.new(
    root: @site.files_path,
    root_uri_path: '/webdav'
  )

end

但是,我无法使@ site.files_path工作,因为它在启动时创建应用程序,在这里我需要为每个传入请求动态创建DAV4Rack :: Handler。

是否可以使用Rack执行此操作?

1 个答案:

答案 0 :(得分:1)

这就是诀窍:

map '/webdav' do

  use Rack::Auth::Basic do |username, password|
    Site.valid_login? username, password
  end

  run lambda { |env|
    handler = DAV4Rack::Handler.new(
      root: Site[username: env['REMOTE_USER']].files_path,
      root_uri_path: '/webdav'
    )
    handler.call(env)
  }

end