class Schleuder::KeyFetcher

Public Class Methods

new(list) click to toggle source
# File lib/schleuder/key_fetcher.rb, line 3
def initialize(list)
  @list = list
end

Public Instance Methods

fetch(input, locale_key='key_fetched') click to toggle source
# File lib/schleuder/key_fetcher.rb, line 7
def fetch(input, locale_key='key_fetched')
  result = case input
           when /^http/
             fetch_key_by_url(input)
           when Conf::EMAIL_REGEXP
             fetch_key_from_keyserver('email', input)
           when Conf::FINGERPRINT_REGEXP
             fetch_key_from_keyserver('fingerprint', input)
           else
             return I18n.t('key_fetcher.invalid_input')
           end
  interpret_fetch_result(result, locale_key)
end
fetch_key_by_url(url) click to toggle source
# File lib/schleuder/key_fetcher.rb, line 21
def fetch_key_by_url(url)
  case result = Schleuder::Http.get(url)
  when NotFoundError
    NotFoundError.new(I18n.t('key_fetcher.url_not_found', url: url))
  else
    result
  end
end
fetch_key_from_keyserver(type, input) click to toggle source
# File lib/schleuder/key_fetcher.rb, line 30
def fetch_key_from_keyserver(type, input)
  if Conf.vks_keyserver.present?
    result = Schleuder::VksClient.get(type, input)
  end
  if (result.blank? || ! result.is_a?(String)) && Conf.sks_keyserver.present?
    result = Schleuder::SksClient.get(input)
  end

  case result
  when nil
    RuntimeError.new('No keyserver configured, cannot query anything')
  when NotFoundError
    NotFoundError.new(I18n.t('key_fetcher.not_found', input: input))
  else
    result
  end
end

Private Instance Methods

import(input, locale_key) click to toggle source
# File lib/schleuder/key_fetcher.rb, line 65
def import(input, locale_key)
  result = @list.gpg.import_filtered(input)
  case result
  when StandardError
    I18n.t('key_fetcher.import_error', error: result)
  when Hash
    translate_output(locale_key, result).join("\n")
  else
    raise_unexpected_error(result)
  end
end
interpret_fetch_result(result, locale_key) click to toggle source
# File lib/schleuder/key_fetcher.rb, line 50
def interpret_fetch_result(result, locale_key)
  case result
  when ''
    I18n.t('key_fetcher.general_error', error: 'Empty response from server')
  when String
    import(result, locale_key)
  when NotFoundError
    result.to_s
  when StandardError
    I18n.t('key_fetcher.general_error', error: result)
  else
    raise_unexpected_error(result)
  end
end
raise_unexpected_error(thing) click to toggle source
# File lib/schleuder/key_fetcher.rb, line 85
def raise_unexpected_error(thing)
  raise "Unexpected output => #{thing.inspect}"
end
translate_output(locale_key, import_states) click to toggle source
# File lib/schleuder/key_fetcher.rb, line 77
def translate_output(locale_key, import_states)
  import_states.map do |fingerprint, states|
    key = @list.gpg.find_distinct_key(fingerprint)
    I18n.t(locale_key, key_summary: key.summary,
                       states: states.to_sentence)
  end
end