31 lines
890 B
Ruby
31 lines
890 B
Ruby
# frozen_string_literal: true
|
|
|
|
require "#{File.dirname(__FILE__)}/interceptor_resource"
|
|
|
|
module Dav4rack
|
|
# Interceptor
|
|
class Interceptor
|
|
def initialize(app, args = {})
|
|
@roots = args[:mappings].keys
|
|
@args = args
|
|
@app = app
|
|
@intercept_methods = %w[OPTIONS PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK]
|
|
@intercept_methods -= args[:ignore_methods] if args[:ignore_methods]
|
|
end
|
|
|
|
def call(env)
|
|
path = env['PATH_INFO'].downcase
|
|
method = env['REQUEST_METHOD'].upcase
|
|
app = nil
|
|
if @roots.detect { |x| path =~ %r{^#{Regexp.escape(x.downcase)}/?} }.nil? && @intercept_methods.include?(method)
|
|
app = Dav4rack::Handler.new(
|
|
resource_class: InterceptorResource,
|
|
mappings: @args[:mappings],
|
|
log_to: @args[:log_to]
|
|
)
|
|
end
|
|
app ? app.call(env) : @app.call(env)
|
|
end
|
|
end
|
|
end
|