summaryrefslogtreecommitdiff
path: root/lib/nickserver/wkd/source.rb
diff options
context:
space:
mode:
authorazul <azul@riseup.net>2017-09-23 15:11:20 +0000
committerazul <azul@riseup.net>2017-09-23 15:11:20 +0000
commitfac140a8ff76e98c275194845125d4c97f4ba07b (patch)
tree08ffafb2c70935892e975704911080b9da84e391 /lib/nickserver/wkd/source.rb
parent787287318c54b019a12ef79525c9f5b10d93724d (diff)
parent8ac6bb8492c9a3b9ec5d7b5bf2b35907a1f8c332 (diff)
Merge branch 'rubocop' into 'master'
Style fixes based on Rubocop See merge request leap/nickserver!19
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