From 22c6c80310a8d3d3abbd1006598b4fbaec98ffd0 Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 22 Sep 2017 15:30:40 +0200 Subject: wkd: implement basic lookup of keys through wkd wkd is the web key directory. See the Readme.md in /lib/nickserver/wkd --- lib/nickserver/wkd/source.rb | 23 +++++++++++++++++++++-- lib/nickserver/wkd/url.rb | 3 +-- 2 files changed, 22 insertions(+), 4 deletions(-) (limited to 'lib/nickserver/wkd') diff --git a/lib/nickserver/wkd/source.rb b/lib/nickserver/wkd/source.rb index 01f376e..750d3fa 100644 --- a/lib/nickserver/wkd/source.rb +++ b/lib/nickserver/wkd/source.rb @@ -1,5 +1,7 @@ require 'nickserver/source' require 'nickserver/response' +require 'nickserver/wkd/url' +require 'nickserver/hkp/response' module Nickserver module Wkd @@ -7,10 +9,27 @@ module Nickserver def query(email) url = Url.new(email) - status, body = adapter.get url - return Nickserver::Response.new(status, body) + status, blob = adapter.get url + Hkp::Response.new(email.to_s, armor_key(blob)) if status == 200 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 end diff --git a/lib/nickserver/wkd/url.rb b/lib/nickserver/wkd/url.rb index 965e7ec..1670628 100644 --- a/lib/nickserver/wkd/url.rb +++ b/lib/nickserver/wkd/url.rb @@ -11,8 +11,7 @@ module Nickserver end def to_s - "https://#{domain}/.well-known/openpgpkey" + - "/hu/#{domain}/#{encoded_digest}" + "https://#{domain}/.well-known/openpgpkey/hu/#{encoded_digest}" end protected -- cgit v1.2.3 From 40916407517f4bdb75a295caf29e02d4f403349b Mon Sep 17 00:00:00 2001 From: Azul Date: Sat, 23 Sep 2017 11:07:32 +0200 Subject: style: rubocop mostly auto-correct --- lib/nickserver/wkd/source.rb | 42 ++++++++++++++++++++---------------------- lib/nickserver/wkd/url.rb | 1 - 2 files changed, 20 insertions(+), 23 deletions(-) (limited to 'lib/nickserver/wkd') diff --git a/lib/nickserver/wkd/source.rb b/lib/nickserver/wkd/source.rb index 750d3fa..b994c6c 100644 --- a/lib/nickserver/wkd/source.rb +++ b/lib/nickserver/wkd/source.rb @@ -3,33 +3,31 @@ 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, blob = adapter.get url - Hkp::Response.new(email.to_s, armor_key(blob)) if status == 200 - end +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 + Hkp::Response.new(email.to_s, armor_key(blob)) if status == 200 + end - protected + protected - def armor_key(blob) - header + encode(blob) + footer - end + def armor_key(blob) + header + encode(blob) + footer + end - def encode(blob) - Base64.strict_encode64(blob).scan(/.{1,64}/).join "\n" - 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 header + "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\n" + end - def footer - "\n-----END PGP PUBLIC KEY BLOCK-----\n" - end + def footer + "\n-----END PGP PUBLIC KEY BLOCK-----\n" end end end diff --git a/lib/nickserver/wkd/url.rb b/lib/nickserver/wkd/url.rb index 1670628..6530efc 100644 --- a/lib/nickserver/wkd/url.rb +++ b/lib/nickserver/wkd/url.rb @@ -4,7 +4,6 @@ require 'zbase32' module Nickserver module Wkd class Url - def initialize(email) @domain = email.domain.downcase @local_part = email.local_part.downcase -- cgit v1.2.3 From f40ef14010af08c49810c0a6a2349072948170e6 Mon Sep 17 00:00:00 2001 From: Azul Date: Sat, 23 Sep 2017 13:43:29 +0200 Subject: style: more rubocop fixes --- lib/nickserver/wkd/source.rb | 4 +++- lib/nickserver/wkd/url.rb | 35 +++++++++++++++++------------------ 2 files changed, 20 insertions(+), 19 deletions(-) (limited to 'lib/nickserver/wkd') diff --git a/lib/nickserver/wkd/source.rb b/lib/nickserver/wkd/source.rb index b994c6c..43f0b2e 100644 --- a/lib/nickserver/wkd/source.rb +++ b/lib/nickserver/wkd/source.rb @@ -9,7 +9,9 @@ module Nickserver::Wkd def query(email) url = Url.new(email) status, blob = adapter.get url - Hkp::Response.new(email.to_s, armor_key(blob)) if status == 200 + if status == 200 + Nickserver::Hkp::Response.new(email.to_s, armor_key(blob)) + end end protected diff --git a/lib/nickserver/wkd/url.rb b/lib/nickserver/wkd/url.rb index 6530efc..0ccff38 100644 --- a/lib/nickserver/wkd/url.rb +++ b/lib/nickserver/wkd/url.rb @@ -1,29 +1,28 @@ require 'digest/sha1' require 'zbase32' -module Nickserver - module Wkd - class Url - def initialize(email) - @domain = email.domain.downcase - @local_part = email.local_part.downcase - end +module Nickserver::Wkd + # The url to lookup the given email address in the web key directory. + class Url + def initialize(email) + @domain = email.domain.downcase + @local_part = email.local_part.downcase + end - def to_s - "https://#{domain}/.well-known/openpgpkey/hu/#{encoded_digest}" - end + def to_s + "https://#{domain}/.well-known/openpgpkey/hu/#{encoded_digest}" + end - protected + protected - attr_reader :domain, :local_part + attr_reader :domain, :local_part - def encoded_digest - ZBase32.encode32(digest.to_i(16).to_s(2)) - end + def encoded_digest + ZBase32.encode32(digest.to_i(16).to_s(2)) + end - def digest - Digest::SHA1.hexdigest local_part - end + def digest + Digest::SHA1.hexdigest local_part end end end -- cgit v1.2.3