class HibpCheck

Constants

API_URL
VERSION

Attributes

hashes[R]
params[R]
prefix[R]
remainder[R]
request[R]
response[R]

Public Class Methods

new(params={}) click to toggle source
# File lib/hibp_check.rb, line 11
def initialize(params={})
  @params = params
end

Public Instance Methods

password_used(password) click to toggle source
# File lib/hibp_check.rb, line 15
def password_used(password)
  return nil if password.nil?
  sha1_used Digest::SHA1.hexdigest(password.to_s)
end
sha1_used(hashed) click to toggle source
# File lib/hibp_check.rb, line 20
def sha1_used(hashed)
  return nil unless hashed =~ /^[0-9a-f]{40}$/i
  @prefix = hashed.slice(0..4).upcase
  @remainder = hashed.slice(5..-1).upcase
  @hashes = fetch_hashes_by_prefix prefix
  if hashes
    return $1.to_i if hashes.match(/#{remainder}:(\d+)/)
    return 0
  end
  nil
end

Private Instance Methods

fetch(url) click to toggle source
# File lib/hibp_check.rb, line 40
def fetch(url)
  uri = URI(url)

  Net::HTTP.start(uri.host, uri.port, params.merge(use_ssl: uri.scheme=='https')) do |http|
    @request = Net::HTTP::Get.new uri

    @response = http.request @request # Net::HTTPResponse object
  end
end
fetch_hashes_by_prefix(prefix) click to toggle source
# File lib/hibp_check.rb, line 34
def fetch_hashes_by_prefix(prefix)
  fetch "#{API_URL}#{prefix}"
  return response.body if response.code == "200"
  nil
end