Rename category -> directory

This commit is contained in:
galfert 2012-10-01 14:03:14 +02:00
parent a21bdab0fa
commit c0078e66e1

View File

@ -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