45 lines
1.2 KiB
Ruby
45 lines
1.2 KiB
Ruby
require "riak"
|
|
|
|
module RemoteStorage
|
|
module Riak
|
|
|
|
def client
|
|
@client ||= ::Riak::Client.new(LiquorCabinet.config['riak'].symbolize_keys)
|
|
end
|
|
|
|
def authorize_request(user, category, token)
|
|
return true if category == "public" && env["REQUEST_METHOD"] == "GET"
|
|
|
|
categories = client.bucket("authorizations").get("#{user}:#{token}").data
|
|
|
|
halt 403 unless categories.include?(category)
|
|
rescue ::Riak::HTTPFailedRequest
|
|
halt 403
|
|
end
|
|
|
|
def get_data(user, category, key)
|
|
client.bucket("user_data").get("#{user}:#{category}:#{key}").data
|
|
rescue ::Riak::HTTPFailedRequest
|
|
halt 404
|
|
end
|
|
|
|
def put_data(user, category, key, data)
|
|
object = client.bucket("user_data").new("#{user}:#{category}:#{key}")
|
|
object.content_type = "text/plain; charset=utf-8"
|
|
object.data = data
|
|
object.indexes.merge!({:user_id_bin => [user]})
|
|
object.store
|
|
rescue ::Riak::HTTPFailedRequest
|
|
halt 422
|
|
end
|
|
|
|
def delete_data(user, category, key)
|
|
riak_response = client.bucket("user_data").delete("#{user}:#{category}:#{key}")
|
|
halt riak_response[:code]
|
|
rescue ::Riak::HTTPFailedRequest
|
|
halt 404
|
|
end
|
|
|
|
end
|
|
end
|