summaryrefslogtreecommitdiff
path: root/lib/nickserver/wkd/source.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nickserver/wkd/source.rb')
-rw-r--r--lib/nickserver/wkd/source.rb35
1 files changed, 27 insertions, 8 deletions
diff --git a/lib/nickserver/wkd/source.rb b/lib/nickserver/wkd/source.rb
index 01f376e..43f0b2e 100644
--- a/lib/nickserver/wkd/source.rb
+++ b/lib/nickserver/wkd/source.rb
@@ -1,16 +1,35 @@
require 'nickserver/source'
require 'nickserver/response'
+require 'nickserver/wkd/url'
+require 'nickserver/hkp/response'
-module Nickserver
- module Wkd
- class Source < Nickserver::Source
-
- def query(email)
- url = Url.new(email)
- status, body = adapter.get url
- return Nickserver::Response.new(status, body)
+module Nickserver::Wkd
+ # Query the web key directory for a given email address
+ class Source < Nickserver::Source
+ def query(email)
+ url = Url.new(email)
+ status, blob = adapter.get url
+ if status == 200
+ Nickserver::Hkp::Response.new(email.to_s, armor_key(blob))
end
+ end
+
+ protected
+
+ def armor_key(blob)
+ header + encode(blob) + footer
+ end
+
+ def encode(blob)
+ Base64.strict_encode64(blob).scan(/.{1,64}/).join "\n"
+ end
+
+ def header
+ "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\n"
+ end
+ def footer
+ "\n-----END PGP PUBLIC KEY BLOCK-----\n"
end
end
end