


# frozen_string_literal: true








class ProofProvider::Keybase




BASE_URL = ENV.fetch('KEYBASE_BASE_URL', 'https://keybase.io')




DOMAIN = ENV.fetch('KEYBASE_DOMAIN', Rails.configuration.x.web_domain)








class Error < StandardError; end








class ExpectedProofLiveError < Error; end








class UnexpectedResponseError < Error; end








def initialize(proof = nil)




@proof = proof




end








def serializer_class




ProofProvider::Keybase::Serializer




end








def worker_class




ProofProvider::Keybase::Worker




end








def validate!




unless @proof.token&.size == 66




@proof.errors.add(:base, I18n.t('identity_proofs.errors.keybase.invalid_token'))




return




end








# Do not perform synchronous validation for remote accounts




return if @proof.provider_username.blank?  !@proof.account.local?








if verifier.valid?




@proof.verified = true




@proof.live = false




else




@proof.errors.add(:base, I18n.t('identity_proofs.errors.keybase.verification_failed', kb_username: @proof.provider_username))




end




end








def refresh!




worker_class.new.perform(@proof)




rescue ProofProvider::Keybase::Error




nil




end








def on_success_path(user_agent = nil)




verifier.on_success_path(user_agent)




end








def badge




@badge = ProofProvider::Keybase::Badge.new(@proof.account.username, @proof.provider_username, @proof.token, domain)




end








def verifier




@verifier = ProofProvider::Keybase::Verifier.new(@proof.account.username, @proof.provider_username, @proof.token, domain)




end








private








def domain




if @proof.account.local?




DOMAIN




else




@proof.account.domain




end




end




end
