diff options
Diffstat (limited to 'lib/nickserver/wkd/source.rb')
-rw-r--r-- | lib/nickserver/wkd/source.rb | 35 |
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 |