summaryrefslogtreecommitdiff
path: root/lib/nickserver/wkd/source.rb
blob: da7abb83c32ba04e293d56a97a5b0a1a47e1a721 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
require 'nickserver/source'
require 'nickserver/response'
require 'nickserver/wkd/url'
require 'nickserver/key_response'

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,
                                 rescue: 'failed to connect: getaddrinfo'
      if status == 200
        Nickserver::KeyResponse.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