119 lines
2.5 KiB
Ruby
119 lines
2.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Dav4rack
|
|
# Interceptor resource
|
|
class InterceptorResource < Resource
|
|
attr_reader :path, :options
|
|
|
|
def initialize(*args)
|
|
super
|
|
@root_paths = @options[:mappings].keys
|
|
@mappings = @options[:mappings]
|
|
end
|
|
|
|
def children
|
|
childs = @root_paths.grep(/^#{Regexp.escape(@path)}/)
|
|
childs.map { |a| child a.gsub(/^#{Regexp.escape(@path)}/, '').split('/').delete_if(&:empty?).first }.flatten
|
|
end
|
|
|
|
def collection?
|
|
true if exist?
|
|
end
|
|
|
|
def exist?
|
|
!@root_paths.grep(/^#{Regexp.escape(@path)}/).empty?
|
|
end
|
|
|
|
def creation_date
|
|
Time.current
|
|
end
|
|
|
|
def last_modified
|
|
Time.current
|
|
end
|
|
|
|
def last_modified=(time)
|
|
# Nothing to do
|
|
end
|
|
|
|
def etag
|
|
Digest::SHA1.hexdigest @path
|
|
end
|
|
|
|
def content_type
|
|
'text/html'
|
|
end
|
|
|
|
def content_length
|
|
0
|
|
end
|
|
|
|
def get(_request, _response)
|
|
raise Forbidden
|
|
end
|
|
|
|
def put(_request)
|
|
raise Forbidden
|
|
end
|
|
|
|
def post(_request, _response)
|
|
raise Forbidden
|
|
end
|
|
|
|
def delete
|
|
raise Forbidden
|
|
end
|
|
|
|
def copy(_dest)
|
|
raise Forbidden
|
|
end
|
|
|
|
def move(_dest)
|
|
raise Forbidden
|
|
end
|
|
|
|
def make_collection
|
|
raise Forbidden
|
|
end
|
|
|
|
def ==(other)
|
|
path == other.path
|
|
end
|
|
|
|
def name
|
|
::File.basename path
|
|
end
|
|
|
|
def display_name
|
|
::File.basename path.to_s
|
|
end
|
|
|
|
def child(name, options = {})
|
|
new_path = path.dup
|
|
new_path = +"/#{new_path}" unless new_path[0, 1] == '/'
|
|
new_path.slice!(-1) if new_path[-1, 1] == '/'
|
|
name = "/#{name}" unless name[-1, 1] == '/'
|
|
new_path = "#{new_path}#{name}"
|
|
new_public = public_path.dup
|
|
new_public = +"/#{new_public}" unless new_public[0, 1] == '/'
|
|
new_public.slice!(-1) if new_public[-1, 1] == '/'
|
|
new_public = "#{new_public}#{name}"
|
|
if (key = @root_paths.find { |x| new_path =~ %r{^#{Regexp.escape(x.downcase)}/?} })
|
|
@mappings[key][:resource_class].new(new_public, new_path.gsub(key, ''), request, response,
|
|
{ root_uri_path: key, user: @user }.merge(options).merge(@mappings[key]))
|
|
else
|
|
self.class.new new_public, new_path, request, response, { user: @user }.merge(options)
|
|
end
|
|
end
|
|
|
|
def descendants
|
|
list = []
|
|
children.each do |child|
|
|
list << child
|
|
list.concat(child.descendants)
|
|
end
|
|
list
|
|
end
|
|
end
|
|
end
|