Class: Hkp
- Inherits:
-
Object
- Object
- Hkp
- Defined in:
- lib/hkp.rb
Overview
simple HKP client for public key retrieval
Instance Method Summary collapse
-
#fetch(id) ⇒ Object
returns the key data as returned from the server as a string.
-
#fetch_and_import(id) ⇒ Object
fetches key data by id and imports the found key(s) into GPG, returning the full hex fingerprints of the imported key(s) as an array.
-
#initialize(options = {}) ⇒ Hkp
constructor
A new instance of Hkp.
- #raise_errors? ⇒ Boolean
-
#search(name) ⇒ Object
hkp.search ‘[email protected]’ will return an array of arrays, one for each matching key found, containing the key id as the first elment and any further info returned by the key server in the following elements.
Constructor Details
#initialize(options = {}) ⇒ Hkp
Returns a new instance of Hkp.
6 7 8 9 10 11 12 |
# File 'lib/hkp.rb', line 6 def initialize( = {}) if String === = { keyserver: } end @keyserver = .delete(:keyserver) || lookup_keyserver || 'http://pool.sks-keyservers.net:11371' @options = { raise_errors: true }.merge end |
Instance Method Details
#fetch(id) ⇒ Object
returns the key data as returned from the server as a string
39 40 41 42 43 44 45 46 |
# File 'lib/hkp.rb', line 39 def fetch(id) open("#{@keyserver}/pks/lookup?options=mr&op=get&search=0x#{URI.escape id}") do |f| return clean_key f.read end rescue Exception raise $! if raise_errors? nil end |
#fetch_and_import(id) ⇒ Object
fetches key data by id and imports the found key(s) into GPG, returning the full hex fingerprints of the imported key(s) as an array. Given there are no collisions with the id given / the server has returned exactly one key this will be a one element array.
51 52 53 54 55 56 57 |
# File 'lib/hkp.rb', line 51 def fetch_and_import(id) if key = fetch(id) GPGME::Key.import(key).imports.map(&:fpr) end rescue Exception raise $! if raise_errors? end |
#raise_errors? ⇒ Boolean
14 15 16 |
# File 'lib/hkp.rb', line 14 def raise_errors? !!@options[:raise_errors] end |
#search(name) ⇒ Object
hkp.search ‘[email protected]’ will return an array of arrays, one for each matching key found, containing the key id as the first elment and any further info returned by the key server in the following elements. see tools.ietf.org/html/draft-shaw-openpgp-hkp-00#section-5.2 for what that might be. unfortunately key servers seem to differ in how much and what info they return besides the key id
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/hkp.rb', line 25 def search(name) [].tap do |results| open("#{@keyserver}/pks/lookup?options=mr&search=#{URI.escape name}") do |f| f.each_line do |l| components = l.strip.split(':') if components.shift == 'pub' results << components end end end end end |