Rename category -> directory
This commit is contained in:
parent
a21bdab0fa
commit
c0078e66e1
@ -17,12 +17,12 @@ module RemoteStorage
|
|||||||
@directory_bucket ||= client.bucket("rs_directories")
|
@directory_bucket ||= client.bucket("rs_directories")
|
||||||
end
|
end
|
||||||
|
|
||||||
def authorize_request(user, category, token)
|
def authorize_request(user, directory, token)
|
||||||
request_method = env["REQUEST_METHOD"]
|
request_method = env["REQUEST_METHOD"]
|
||||||
return true if category.split("/").first == "public" && request_method == "GET"
|
return true if directory.split("/").first == "public" && request_method == "GET"
|
||||||
|
|
||||||
authorizations = client.bucket("authorizations").get("#{user}:#{token}").data
|
authorizations = client.bucket("authorizations").get("#{user}:#{token}").data
|
||||||
permission = category_permission(authorizations, category)
|
permission = directory_permission(authorizations, directory)
|
||||||
|
|
||||||
halt 403 unless permission
|
halt 403 unless permission
|
||||||
if ["PUT", "DELETE"].include? request_method
|
if ["PUT", "DELETE"].include? request_method
|
||||||
@ -32,8 +32,8 @@ module RemoteStorage
|
|||||||
halt 403
|
halt 403
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_data(user, category, key)
|
def get_data(user, directory, key)
|
||||||
object = data_bucket.get("#{user}:#{category}:#{key}")
|
object = data_bucket.get("#{user}:#{directory}:#{key}")
|
||||||
headers["Content-Type"] = object.content_type
|
headers["Content-Type"] = object.content_type
|
||||||
headers["Last-Modified"] = object.last_modified.to_s(:rfc822)
|
headers["Last-Modified"] = object.last_modified.to_s(:rfc822)
|
||||||
case object.content_type[/^[^;\s]+/]
|
case object.content_type[/^[^;\s]+/]
|
||||||
@ -59,8 +59,8 @@ module RemoteStorage
|
|||||||
return "{}"
|
return "{}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def put_data(user, category, key, data, content_type=nil)
|
def put_data(user, directory, key, data, content_type=nil)
|
||||||
object = data_bucket.new("#{user}:#{category}:#{key}")
|
object = data_bucket.new("#{user}:#{directory}:#{key}")
|
||||||
object.content_type = content_type || "text/plain; charset=utf-8"
|
object.content_type = content_type || "text/plain; charset=utf-8"
|
||||||
data = JSON.parse(data) if content_type[/^[^;\s]+/] == "application/json"
|
data = JSON.parse(data) if content_type[/^[^;\s]+/] == "application/json"
|
||||||
if serializer_for(object.content_type)
|
if serializer_for(object.content_type)
|
||||||
@ -68,21 +68,21 @@ module RemoteStorage
|
|||||||
else
|
else
|
||||||
object.raw_data = data
|
object.raw_data = data
|
||||||
end
|
end
|
||||||
directory_index = category == "" ? "/" : category
|
directory_index = directory == "" ? "/" : directory
|
||||||
object.indexes.merge!({:user_id_bin => [user],
|
object.indexes.merge!({:user_id_bin => [user],
|
||||||
:directory_bin => [directory_index]})
|
:directory_bin => [directory_index]})
|
||||||
object.store
|
object.store
|
||||||
|
|
||||||
create_missing_directory_objects(user, category)
|
create_missing_directory_objects(user, directory)
|
||||||
update_directory_object(user, category)
|
update_directory_object(user, directory)
|
||||||
rescue ::Riak::HTTPFailedRequest
|
rescue ::Riak::HTTPFailedRequest
|
||||||
halt 422
|
halt 422
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_data(user, category, key)
|
def delete_data(user, directory, key)
|
||||||
riak_response = data_bucket.delete("#{user}:#{category}:#{key}")
|
riak_response = data_bucket.delete("#{user}:#{directory}:#{key}")
|
||||||
if directory_entries(user, category).empty?
|
if directory_entries(user, directory).empty?
|
||||||
directory_bucket.delete "#{user}:#{category}"
|
directory_bucket.delete "#{user}:#{directory}"
|
||||||
end
|
end
|
||||||
halt riak_response[:code]
|
halt riak_response[:code]
|
||||||
rescue ::Riak::HTTPFailedRequest
|
rescue ::Riak::HTTPFailedRequest
|
||||||
@ -95,7 +95,7 @@ module RemoteStorage
|
|||||||
::Riak::Serializers[content_type[/^[^;\s]+/]]
|
::Riak::Serializers[content_type[/^[^;\s]+/]]
|
||||||
end
|
end
|
||||||
|
|
||||||
def category_permission(authorizations, category)
|
def directory_permission(authorizations, directory)
|
||||||
authorizations = authorizations.map do |auth|
|
authorizations = authorizations.map do |auth|
|
||||||
auth.index(":") ? auth.split(":") : [auth, "rw"]
|
auth.index(":") ? auth.split(":") : [auth, "rw"]
|
||||||
end
|
end
|
||||||
@ -104,7 +104,7 @@ module RemoteStorage
|
|||||||
permission = authorizations[""]
|
permission = authorizations[""]
|
||||||
|
|
||||||
authorizations.each do |key, value|
|
authorizations.each do |key, value|
|
||||||
if category.match key
|
if directory.match key
|
||||||
if permission.nil? || permission == "r"
|
if permission.nil? || permission == "r"
|
||||||
permission = value
|
permission = value
|
||||||
end
|
end
|
||||||
@ -171,13 +171,13 @@ module RemoteStorage
|
|||||||
run
|
run
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_missing_directory_objects(user, category)
|
def create_missing_directory_objects(user, directory)
|
||||||
parent_directories = category.split("/")
|
parent_directories = directory.split("/")
|
||||||
parent_directories.pop
|
parent_directories.pop
|
||||||
while parent_directories.any?
|
while parent_directories.any?
|
||||||
directory = parent_directories.join("/")
|
parent_directory = parent_directories.join("/")
|
||||||
unless directory_bucket.exist?("#{user}:#{directory}")
|
unless directory_bucket.exist?("#{user}:#{parent_directory}")
|
||||||
update_directory_object(user, directory)
|
update_directory_object(user, parent_directory)
|
||||||
end
|
end
|
||||||
parent_directories.pop
|
parent_directories.pop
|
||||||
end
|
end
|
||||||
@ -187,19 +187,20 @@ module RemoteStorage
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_directory_object(user, category)
|
def update_directory_object(user, directory)
|
||||||
if category.match /\//
|
if directory.match /\//
|
||||||
parent_directory = category[0..category.rindex("/")-1]
|
parent_directory = directory[0..directory.rindex("/")-1]
|
||||||
elsif category != ""
|
elsif directory != ""
|
||||||
parent_directory = "/"
|
parent_directory = "/"
|
||||||
end
|
end
|
||||||
directory = directory_bucket.new("#{user}:#{category}")
|
|
||||||
directory.raw_data = ""
|
directory_object = directory_bucket.new("#{user}:#{directory}")
|
||||||
directory.indexes.merge!({:user_id_bin => [user]})
|
directory_object.raw_data = ""
|
||||||
|
directory_object.indexes.merge!({:user_id_bin => [user]})
|
||||||
if parent_directory
|
if parent_directory
|
||||||
directory.indexes.merge!({:directory_bin => [parent_directory]})
|
directory_object.indexes.merge!({:directory_bin => [parent_directory]})
|
||||||
end
|
end
|
||||||
directory.store
|
directory_object.store
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user