Sha256: d77a05e5de3edc26a0bec58e52d5cedc67c7aeb5243df956bd148a76056fbca8

Contents?: true

Size: 1.98 KB

Versions: 1

Compression:

Stored size: 1.98 KB

Contents

module AmazonAuth
  class Client
    attr_accessor :initial_url

    def initialize(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
    end

    def sign_in
      session.visit initial_url
      session.first('#a-autoid-0-announce').click

      fill_in_with_stroke('ap_email', @login)
      fill_in_with_stroke('ap_password', @password)
      session.click_on('signInSubmit')

      while alert_displayed? do
        retry_sign_in
      end

      session.first('.nav-line-2').click
      session
    end

    def retry_sign_in
      fill_in_with_stroke('ap_password', @password)
      if image_recognition_displayed?
        input = ask "Got the prompt. Read characters from the image: "
        fill_in_with_stroke('auth-captcha-guess', input)
      end
      session.click_on('signInSubmit')
    end

    def fill_in_with_stroke(dom_id, value)
      sleep_s
      element = session.first("##{dom_id}")
      value.split(//u).each do |char|
        element.send_keys(char)
        sleep rand
      end
    end

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

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

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

    def driver
      session.driver
    end

    def sleep_s(sec = 2)
      sleep sec
    end

    # Hide instance variables of credentials on console
    def inspect
      to_s
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
amazon_auth-0.1.3 lib/amazon_auth/client.rb