module WpWrapper module Modules module Authorization def login(force: false, retries: 3) success = force ? false : logged_in? if !success login_page = self.mechanize_client.open_url(get_url(:admin)) agent = self.mechanize_client.agent if login_page upgraded = upgrade_if_necessary(login_page) login(retries) if upgraded login_form = login_page.form_with(name: 'loginform') if login_form login_form.field_with(name: 'log').value = self.username login_form.field_with(name: 'pwd').value = self.password begin logged_in_page = login_form.submit log_out_link = logged_in_page.link_with(href: /wp-login\.php\?action=logout/i) self.logged_in = !log_out_link.nil? success = self.logged_in puts "[WpWrapper::Modules::Authorization] - #{Time.now}: Url: #{self.url}. Successfully logged in? #{self.logged_in}" rescue Exception => e puts "[WpWrapper::Modules::Authorization] - #{Time.now}: Url: #{self.url}. Failed to login. Error Class: #{e.class.name}. Error Message: #{e.message}" login(force: force, retries: retries - 1) if retries > 0 raise WpWrapper::FailedLoginException, "Failed to login" if retries <= 0 && self.reraise_exceptions end else puts "[WpWrapper::Modules::Authorization] - #{Time.now}: Url: #{self.url}. Something's broken! Can't find wp-admin login form! Retrying...\n\n" login(force: force, retries: retries - 1) if retries > 0 raise WpWrapper::FailedLoginException, "Failed to login" if retries <= 0 && self.reraise_exceptions end end end success = !(retries <= 0) return success end def upgrade_if_necessary(page) upgraded = false upgrade_link = page.link_with(href: /upgrade\.php/i) if upgrade_link upgrade_link.click upgraded = true end return upgraded end end end end