Class: AmazonAuth::Client

Inherits:
Object
  • Object
show all
Includes:
CommonExtension, SessionExtension
Defined in:
lib/amazon_auth/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from SessionExtension

#doc, #links_for, #wait_for_selector

Methods included from CommonExtension

#debug, #log

Constructor Details

#initialize(options = {}) ⇒ Client

Returns a new instance of Client.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/amazon_auth/client.rb', line 8

def initialize(options = {})
  @options = options
  @initial_url = options.fetch(:url) { "https://www.#{AmazonInfo.domain}/" }
  @login = options.fetch(:login) do
    if (amazon_username_code = ENV['AMAZON_USERNAME_CODE']).present?
      Converter.decode(amazon_username_code)
    else
      raise('AMAZON_USERNAME_CODE is required.')
    end
  end
  @password = options.fetch(:password) do
    if (amazon_password_code = ENV['AMAZON_PASSWORD_CODE']).present?
      Converter.decode(amazon_password_code)
    else
      raise('AMAZON_PASSWORD_CODE is required.')
    end
  end
  @driver = options.fetch(:driver, :selenium)

  Capybara.app_host = @initial_url
rescue => e
  puts "Please setup credentials of amazon_auth gem with folloing its instruction."
  raise e
end

Instance Attribute Details

#initial_urlObject

Returns the value of attribute initial_url.



6
7
8
# File 'lib/amazon_auth/client.rb', line 6

def initial_url
  @initial_url
end

Instance Method Details

#alert_displayed?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/amazon_auth/client.rb', line 75

def alert_displayed?
  session.has_selector?('.a-alert-error')
end

#image_recognition_displayed?Boolean

Returns:

  • (Boolean)


79
80
81
# File 'lib/amazon_auth/client.rb', line 79

def image_recognition_displayed?
  session.has_selector?('#auth-captcha-image-container')
end

#inspectObject

Hide instance variables of credentials on console



88
89
90
# File 'lib/amazon_auth/client.rb', line 88

def inspect
  to_s
end

#retry_signin_form_with_image_recognitionObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/amazon_auth/client.rb', line 58

def 
  return true unless session.has_selector?('#signInSubmit')
  session.fill_in 'ap_password', with: @password
  if image_recognition_displayed?
    input = ask "Got the prompt. Read characters from the image [blank to cancel]: "
    if input.blank?
      debug "Going back to #{initial_url}"
      session.visit initial_url
      return true
    end
    session.fill_in 'auth-captcha-guess', with: input
  end
  sleep 1
  session.click_on('signInSubmit')
  sleep 2
end

#sessionObject



83
84
85
# File 'lib/amazon_auth/client.rb', line 83

def session
  @session ||= Capybara::Session.new(@driver)
end

#sign_inObject



33
34
35
36
37
38
39
40
# File 'lib/amazon_auth/client.rb', line 33

def 
  session.visit initial_url
  debug "Visiting #{initial_url}"
  link = links_for('#nav-signin-tooltip a').find{|link| link =~ %r{\A/gp/navigation/redirector.html} }
  debug "link: [#{link}]"
  session.visit(link) if link
  
end

#submit_signin_formObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/amazon_auth/client.rb', line 42

def 
  debug "Begin submit_signin_form"
  return true unless session.has_selector?('#signInSubmit')
  session.fill_in 'ap_email', with: @login
  session.fill_in 'ap_password', with: @password
  session.click_on('signInSubmit')
  log "Clicked signInSubmit"

  raise('Failed on signin') if alert_displayed?
  while image_recognition_displayed? do
    
  end
  debug "End submit_signin_form"
  true
end