summaryrefslogtreecommitdiff
path: root/lib/nickserver/couch
diff options
context:
space:
mode:
authorAzul <azul@riseup.net>2016-06-08 12:44:38 +0200
committerAzul <azul@riseup.net>2016-06-08 12:54:23 +0200
commita89e2ba55399e6bddd9e052cf2064ed0056c958a (patch)
treec28ec332f9763f395a88db991defcae59fa46806 /lib/nickserver/couch
parent712c1d062c08a58ca8772aafcdc39d0281959b4a (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.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