lib/amazon_auth/client.rb in amazon_auth-0.3.3 vs lib/amazon_auth/client.rb in amazon_auth-0.4.0
- old
+ new
@@ -1,87 +1,24 @@
module AmazonAuth
class Client
include AmazonAuth::CommonExtension
include AmazonAuth::SessionExtension
- attr_accessor :initial_url
+ attr_accessor :options
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)
+ # Check credentials
+ raise('AMAZON_USERNAME_CODE is required.') unless (options[:login] || ENV['AMAZON_USERNAME_CODE']).present?
+ raise('AMAZON_PASSWORD_CODE is required.') unless (options[:password] || ENV['AMAZON_PASSWORD_CODE']).present?
+ Converter.salt if options[:login].blank? || options[:password].blank?
- Capybara.app_host = @initial_url
+ Capybara.save_path = options.fetch(:save_path, 'tmp') if Capybara.save_path.nil?
+ Capybara.app_host = initial_url if Capybara.app_host.nil?
rescue => e
puts "Please setup credentials of amazon_auth gem with folloing its instruction."
raise e
- end
-
- def sign_in
- 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
- submit_signin_form
- end
-
- def submit_signin_form
- debug "Begin submit_signin_form"
- unless session.has_selector?('#signInSubmit')
- log "signInSubmit button not found"
- return false
- end
- session.fill_in 'ap_email', with: @login if session.first('#ap_email').value.blank?
- session.fill_in 'ap_password', with: @password
- session.first('#signInSubmit').click
- log "Clicked signInSubmit"
-
- raise('Failed on signin') if alert_displayed?
- while image_recognition_displayed? do
- retry_signin_form_with_image_recognition
- end
- debug "End submit_signin_form"
- true
- end
-
- def retry_signin_form_with_image_recognition
- 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
-
- def alert_displayed?
- session.has_selector?('.a-alert-error')
- end
-
- def image_recognition_displayed?
- session.has_selector?('#auth-captcha-image-container')
end
def session
@session ||= Capybara::Session.new(@driver)
end