- # frozen_string_literal: true
-
- class ProofProvider::Keybase::Verifier
- def initialize(local_username, provider_username, token, domain)
- @local_username = local_username
- @provider_username = provider_username
- @token = token
- @domain = domain
- end
-
- def valid?
- request = Request.new(:get, "#{ProofProvider::Keybase::BASE_URL}/_/api/1.0/sig/proof_valid.json", params: query_params)
-
- request.perform do |res|
- json = Oj.load(res.body_with_limit, mode: :strict)
-
- if json.is_a?(Hash)
- json.fetch('proof_valid', false)
- else
- false
- end
- end
- rescue Oj::ParseError, HTTP::Error, OpenSSL::SSL::SSLError
- false
- end
-
- def on_success_path(user_agent = nil)
- url = Addressable::URI.parse("#{ProofProvider::Keybase::BASE_URL}/_/proof_creation_success")
- url.query_values = query_params.merge(kb_ua: user_agent || 'unknown')
- url.to_s
- end
-
- def status
- request = Request.new(:get, "#{ProofProvider::Keybase::BASE_URL}/_/api/1.0/sig/proof_live.json", params: query_params)
-
- request.perform do |res|
- raise ProofProvider::Keybase::UnexpectedResponseError unless res.code == 200
-
- json = Oj.load(res.body_with_limit, mode: :strict)
-
- raise ProofProvider::Keybase::UnexpectedResponseError unless json.is_a?(Hash) && json.key?('proof_valid') && json.key?('proof_live')
-
- json
- end
- rescue Oj::ParseError, HTTP::Error, OpenSSL::SSL::SSLError
- raise ProofProvider::Keybase::UnexpectedResponseError
- end
-
- private
-
- def query_params
- {
- domain: @domain,
- kb_username: @provider_username,
- username: @local_username,
- sig_hash: @token,
- }
- end
- end
|