diff options
author | Azul <azul@riseup.net> | 2016-06-08 12:44:38 +0200 |
---|---|---|
committer | Azul <azul@riseup.net> | 2016-06-08 12:54:23 +0200 |
commit | a89e2ba55399e6bddd9e052cf2064ed0056c958a (patch) | |
tree | c28ec332f9763f395a88db991defcae59fa46806 /lib/nickserver/couch | |
parent | 712c1d062c08a58ca8772aafcdc39d0281959b4a (diff) |
refactor: use new couch_db classes from fetch_key
This moves all the em_http related stuff into a single adapter.
We're also not using callback and errback inside fetch_key or
server for couch requests anymore.
Changing the interface for hkp to do the same will follow.
Diffstat (limited to 'lib/nickserver/couch')
-rw-r--r-- | lib/nickserver/couch/fetch_key.rb | 56 |
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 |