Fix user filtering for directory listings
This commit is contained in:
@@ -5,6 +5,8 @@ require "cgi"
|
||||
module RemoteStorage
|
||||
module Riak
|
||||
|
||||
::Riak.url_decoding = true
|
||||
|
||||
def client
|
||||
@client ||= ::Riak::Client.new(LiquorCabinet.config['riak'].symbolize_keys)
|
||||
end
|
||||
@@ -134,6 +136,13 @@ module RemoteStorage
|
||||
|
||||
def directory_entries(user, directory)
|
||||
directory = "/" if directory == ""
|
||||
|
||||
user_keys = data_bucket.get_index("user_id_bin", user)
|
||||
directory_keys = data_bucket.get_index("directory_bin", directory)
|
||||
|
||||
all_keys = user_keys & directory_keys
|
||||
return [] if all_keys.empty?
|
||||
|
||||
map_query = <<-EOH
|
||||
function(v){
|
||||
keys = v.key.split(':');
|
||||
@@ -145,15 +154,26 @@ module RemoteStorage
|
||||
}];
|
||||
}
|
||||
EOH
|
||||
objects = ::Riak::MapReduce.new(client).
|
||||
index("user_data", "user_id_bin", user).
|
||||
index("user_data", "directory_bin", directory).
|
||||
|
||||
map_reduce = ::Riak::MapReduce.new(client)
|
||||
all_keys.each do |key|
|
||||
map_reduce.add("user_data", key)
|
||||
end
|
||||
|
||||
map_reduce.
|
||||
map(map_query, :keep => true).
|
||||
run
|
||||
end
|
||||
|
||||
def sub_directories(user, directory)
|
||||
directory = "/" if directory == ""
|
||||
|
||||
user_keys = directory_bucket.get_index("user_id_bin", user)
|
||||
directory_keys = directory_bucket.get_index("directory_bin", directory)
|
||||
|
||||
all_keys = user_keys & directory_keys
|
||||
return [] if all_keys.empty?
|
||||
|
||||
map_query = <<-EOH
|
||||
function(v){
|
||||
keys = v.key.split(':');
|
||||
@@ -165,9 +185,13 @@ module RemoteStorage
|
||||
}];
|
||||
}
|
||||
EOH
|
||||
objects = ::Riak::MapReduce.new(client).
|
||||
index("rs_directories", "user_id_bin", user).
|
||||
index("rs_directories", "directory_bin", directory).
|
||||
|
||||
map_reduce = ::Riak::MapReduce.new(client)
|
||||
all_keys.each do |key|
|
||||
map_reduce.add("rs_directories", key)
|
||||
end
|
||||
|
||||
map_reduce.
|
||||
map(map_query, :keep => true).
|
||||
run
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user