class BptScraper::Login

Handles the scraping of the home page for CSRF token from username input. Additionally handles the POSTing of login info to create a session

Constants

BASE_URL

Attributes

base_url[RW]
email[RW]
fields[RW]
password[RW]
base_url[RW]
email[RW]
fields[RW]
password[RW]

Public Class Methods

new(base_url: nil, email: nil, password: nil) click to toggle source
# File lib/bpt_scraper/login.rb, line 13
def initialize(base_url: nil, email: nil, password: nil)
  self.base_url = base_url || self.class.base_url || BASE_URL
  self.email = email || self.class.email
  self.password = password || self.class.password
  missing_options_error('Login') if (self.email.nil? || self.password.nil?)
end
reset() click to toggle source
# File lib/bpt_scraper/login.rb, line 29
def self.reset
  self.base_url = nil
  self.fields = nil
  self.email = nil
  self.password = nil
end

Public Instance Methods

create_session() click to toggle source
# File lib/bpt_scraper/login.rb, line 20
def create_session
  self.fields = fetch_login_fields
  send_login_request
end

Private Instance Methods

fetch_login_fields() click to toggle source

fetches the login page of BPT to be parsed. BPT's CSRF procedure involves giving a unique id appended to the name of the input field e.g. name=“email_jn7Y8jgf”

# File lib/bpt_scraper/login.rb, line 41
def fetch_login_fields
  response = HTTParty.get(base_url)
  failed_login_fetch unless response.code == 200
  email_name = Nokogiri::HTML(response).css('#login_email')[0]['name']
  password_name = Nokogiri::HTML(response).css('#login_password')[0]['name']
  { email_name: email_name, password_name: password_name }
end
send_login_request() click to toggle source
# File lib/bpt_scraper/login.rb, line 49
def send_login_request
  response = HTTParty.post(
    base_url,
    body: {
      fields[:email_name].to_s => email,
      fields[:password_name].to_s => password
    }
  )
  failed_login_post unless response.code == 200
  true
end