Module: RuCaptcha::ControllerHelpers

Extended by:
ActiveSupport::Concern
Defined in:
lib/rucaptcha/controller_helpers.rb

Instance Method Summary collapse

Instance Method Details

#generate_rucaptchaObject

Generate a new Captcha



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rucaptcha/controller_helpers.rb', line 24

def generate_rucaptcha
  generate_rucaptcha_session_id

  res = RuCaptcha.generate
  session_val = {
    code: res[0],
    time: Time.now.to_i
  }
  RuCaptcha.cache.write(rucaptcha_sesion_key_key, session_val, expires_in: RuCaptcha.config.expires_in)
  res[1]
end

#rucaptcha_sesion_key_keyObject

session key of rucaptcha



14
15
16
17
18
19
20
21
# File 'lib/rucaptcha/controller_helpers.rb', line 14

def rucaptcha_sesion_key_key
  warning_when_session_invalid if rucaptcha_session_id.blank?

  # With https://github.com/rack/rack/commit/7fecaee81f59926b6e1913511c90650e76673b38
  # to protected session_id into secret
  session_id_digest = Digest::SHA256.hexdigest(rucaptcha_session_id.inspect)
  ["rucaptcha-session", session_id_digest].join(":")
end

#rucaptcha_session_idObject



9
10
11
# File 'lib/rucaptcha/controller_helpers.rb', line 9

def rucaptcha_session_id
  cookies[:_rucaptcha_session_id]
end

#verify_rucaptcha?(code, keep_session) ⇒ Hash

Verify captcha code

Parameters:

  • code (String)

    the captcha code to check against

  • keep_session (Boolean)

    true to keep the session

Returns:

  • (Hash)

    { success: true, message: “validation_ok”} or { success: false, message: “error_reason” }



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rucaptcha/controller_helpers.rb', line 41

def verify_rucaptcha?(code, keep_session)
  store_info = RuCaptcha.cache.read(rucaptcha_sesion_key_key)

  # make sure move used key
  RuCaptcha.cache.delete(rucaptcha_sesion_key_key) unless keep_session

  # Make sure session exist
  return { success: false, message: "store_info_is_blank" } if store_info.blank?

  # Make sure not expire
  return { success: false, message: "captcha_is_expired" } if (Time.now.to_i - store_info[:time]) > RuCaptcha.config.expires_in

  # Make sure parama have captcha
  captcha = code.downcase.strip
  actual = store_info[:code]

  return { success: false, message: "captcha_is_blank" } if captcha.blank?
  return { success: false, message: "captcha_not_match_with_#{actual}" } if captcha != actual

  { success: true, message: "validation_ok" }
end