Class: PennExtranetAdapter
- Inherits:
-
Object
- Object
- PennExtranetAdapter
- Defined in:
- lib/penn_extranet_adapter.rb
Overview
Directly accessing the authenticated mechanize object
o = p.authenticated_agent
Instance Method Summary collapse
-
#authenticate ⇒ Object
private returns the newly authenticated agent.
-
#authenticated_agent ⇒ Object
returns the already-authenticated agent OR creates a new one.
- #get(url, param_hash = {}) ⇒ Object
-
#initialize(username, pw) ⇒ PennExtranetAdapter
constructor
A new instance of PennExtranetAdapter.
-
#load_agent ⇒ Object
mainly for testing purposes, because in production it should not need to be called explicitly.
- #new_secure_agent ⇒ Object
- #post(url, param_hash = {}) ⇒ Object
- #save_agent ⇒ Object
- #saved_agent ⇒ Object
-
#valid_agent?(agent = authenticated_agent) ⇒ Boolean
goes to the home extranet page and tries to detect if this is a valid session or not.
Constructor Details
#initialize(username, pw) ⇒ PennExtranetAdapter
Returns a new instance of PennExtranetAdapter.
15 16 17 18 19 |
# File 'lib/penn_extranet_adapter.rb', line 15 def initialize(username, pw) @authenticated_agent = nil @username = username @pw = pw end |
Instance Method Details
#authenticate ⇒ Object
private returns the newly authenticated agent
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/penn_extranet_adapter.rb', line 77 def authenticate puts "==AUTHENTICATING EXTRANET==" agent = new_secure_agent page = agent.get('https://extranet.uphs.upenn.edu') #connect to extranet agent.page.forms.first.username = @username # login username for extranet agent.page.forms.first.password = @pw # login pw agent.page.forms.first.submit # submits login request if agent.page.forms.first.checkbox_with(:name =>'postfixSID') #if another extranet session is open, it will ask you to close it or continue. If tow are open, you have to close one. This line looks for checkboxes and closes one session if they are present agent.page.forms.first.checkbox.check end btn = agent.page.forms.first.('btnContinue') #finds the continue button agent.page.forms.first.submit(btn) # submits it to confirm login save_agent if Rails.env.development? return agent end |
#authenticated_agent ⇒ Object
returns the already-authenticated agent OR creates a new one
40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/penn_extranet_adapter.rb', line 40 def authenticated_agent #returns an agent that is authenticated or a new agent if you are on the VPN # step 1: try to load a saved agent to avoid having to re-auth if @authenticated_agent == nil and Rails.env.development? # load_agent # check to see if agent is valid, otherwise clear it @authenticated_agent = nil unless valid_agent?( @authenticated_agent ) end # Step 2: if loading failed then will authenticate a new session @authenticated_agent ||= authenticate end |
#get(url, param_hash = {}) ⇒ Object
65 66 67 68 69 70 71 72 73 |
# File 'lib/penn_extranet_adapter.rb', line 65 def get( url, param_hash={} ) begin res = authenticated_agent.get(url, param_hash) res.body rescue raise "Failed to connect. Are you on VPN?" nil end end |
#load_agent ⇒ Object
mainly for testing purposes, because in production it should not need to be called explicitly
103 104 105 |
# File 'lib/penn_extranet_adapter.rb', line 103 def load_agent @authenticated_agent = saved_agent end |
#new_secure_agent ⇒ Object
94 95 96 |
# File 'lib/penn_extranet_adapter.rb', line 94 def new_secure_agent Mechanize.new{|a| a.ssl_version, a.verify_mode = 'SSLv3', OpenSSL::SSL::VERIFY_NONE} end |
#post(url, param_hash = {}) ⇒ Object
55 56 57 58 59 60 61 62 63 |
# File 'lib/penn_extranet_adapter.rb', line 55 def post( url, param_hash={} ) begin res = authenticated_agent.post(url, param_hash) res.body rescue raise "Failed to connect. Are you on VPN?" nil end end |
#save_agent ⇒ Object
98 99 100 |
# File 'lib/penn_extranet_adapter.rb', line 98 def save_agent authenticated_agent..save_as 'penn_extranet_cookie_jar', :session => true, :format => :yaml end |
#saved_agent ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/penn_extranet_adapter.rb', line 107 def saved_agent if File.exists?("penn_extranet_cookie_jar") puts "==Loaded saved agent==" agent = new_secure_agent agent..load('penn_extranet_cookie_jar') agent else puts "No saved agent that is valid" nil end end |
#valid_agent?(agent = authenticated_agent) ⇒ Boolean
goes to the home extranet page and tries to detect if this is a valid session or not. After a prolonged time period, a valid session may become invalid
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/penn_extranet_adapter.rb', line 24 def valid_agent?( agent = authenticated_agent ) agent.get("https://extranet.uphs.upenn.edu") main_page_body = agent.page.body if main_page_body.include? "Please sign in to begin your secure session" puts "==CHECKING VALIDITY==...Invalid agent" false elsif main_page_body.include? "Welcome to the Secure Access SSL VPN" puts "==CHECKING VALIDITY==...Valid agent!" true else puts "==CHECKING VALIDITY==...Probably an invalid agent" false end end |