Class: SpreeCmCommissioner::RecaptchaTokenValidator

Inherits:
BaseInteractor show all
Defined in:
app/interactors/spree_cm_commissioner/recaptcha_token_validator.rb

Constant Summary collapse

RECAPTCHA_MINIMUM_SCORE =
0.5

Instance Method Summary collapse

Instance Method Details

#callObject



7
8
9
10
# File 'app/interactors/spree_cm_commissioner/recaptcha_token_validator.rb', line 7

def call
  context.response = create_assessment
  check_score
end

#check_scoreObject



23
24
25
26
27
28
29
30
# File 'app/interactors/spree_cm_commissioner/recaptcha_token_validator.rb', line 23

def check_score
  unless context.response.token_properties.valid
    context.fail!(message: context.response.token_properties.invalid_reason.presence || I18n.t('recaptcha.invalid_code'))
  end

  context.fail!(message: I18n.t('recaptcha.score_not_qualify')) unless context.response.risk_analysis.score > RECAPTCHA_MINIMUM_SCORE
  context.fail!(message: I18n.t('recaptcha.action_not_matched')) unless context.response.token_properties.action == action
end

#clientObject



36
37
38
# File 'app/interactors/spree_cm_commissioner/recaptcha_token_validator.rb', line 36

def client
  context.client ||= ::Google::Cloud::RecaptchaEnterprise.recaptcha_enterprise_service
end

#create_assessmentObject



12
13
14
15
16
17
18
19
20
21
# File 'app/interactors/spree_cm_commissioner/recaptcha_token_validator.rb', line 12

def create_assessment
  event = {
    parent: "projects/#{project_id}",
    assessment: { event: { site_key: site_key, token: token } }
  }

  client.create_assessment(event)
rescue StandardError
  context.fail!(message: I18n.t('recaptcha.request_failed'))
end

#project_idObject



32
33
34
# File 'app/interactors/spree_cm_commissioner/recaptcha_token_validator.rb', line 32

def project_id
  context.project_id ||= Rails.application.credentials.[:project_id]
end