summaryrefslogtreecommitdiff
path: root/lib/nickserver/couch/fetch_key.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nickserver/couch/fetch_key.rb')
-rw-r--r--lib/nickserver/couch/fetch_key.rb56
1 files changed, 9 insertions, 47 deletions
diff --git a/lib/nickserver/couch/fetch_key.rb b/lib/nickserver/couch/fetch_key.rb
index 3fe2a63..2013bca 100644
--- a/lib/nickserver/couch/fetch_key.rb
+++ b/lib/nickserver/couch/fetch_key.rb
@@ -1,63 +1,25 @@
-require 'em-http'
-require 'json'
+require 'nickserver/couch_db/source'
+require 'nickserver/adapters/em_http'
module Nickserver; module Couch
class FetchKey
- include EM::Deferrable
-
- VIEW = "_design/Identity/_view/pgp_key_by_email"
def initialize(options={})
- @timeout = 5
+ @source = Nickserver::CouchDB::Source.new(adapter)
end
- def get(uid)
- couch_request(uid)
- self
+ def get(uid, &block)
+ source.query(uid, &block)
end
protected
- #
- # For example:
- # curl "$COUCH/identities/_design/Identity/_view/pgp_key_by_email?key=\"test1@bitmask.net\""
- #
- def couch_request(uid)
- query = {"reduce" => "false", "key" => "\"#{uid}\""}
- request = EventMachine::HttpRequest.new(FetchKey.couch_url).get(timeout: @timeout, query: query)
- request.callback {|http|
- if http.response_header.status != 200
- self.fail http.response_header.status, 'Unknown Error'
- else
- self.succeed parse_key_from_response(uid, http.response)
- end
- }.errback {|http|
- self.fail 0, http.error
- }
- end
+ attr_reader :source
- def parse_key_from_response(uid, response)
- json = JSON.load(response)
- if json["rows"].empty?
- self.fail 404, "Not Found"
- else
- return json["rows"].first["value"]
- end
- rescue Exception
- self.fail 0, "Error parsing CouchDB reply"
+ def adapter
+ @adapter ||= Nickserver::Adapters::EmHttp.new
end
- def self.couch_url
- @couch_url ||= begin
- url = ['http://']
- if Config.couch_user
- url.push Config.couch_user, ':', Config.couch_password, '@'
- end
- url.push Config.couch_host, ':', Config.couch_port, '/', Config.couch_database
- url.push '/', VIEW
- url.join
- end
- end
end
-end; end \ No newline at end of file
+end; end