def self.typekey_login(webclient, typekey_uri)
typekey_login_form = nil
HTree(typekey_uri).traverse_element('{http://www.w3.org/1999/xhtml}form') {|form|
form = WFO::Form.make(form, typekey_uri)
if form.has?('username') && form.has?('password')
typekey_login_form = form
break
end
}
return nil if !typekey_login_form
resp = nil
KeyRing.with_authinfo(KeyRing.typekey_protection_domain) {|username, password|
typekey_login_form.set('username', username)
typekey_login_form.set('password', password)
typekey_login_form.make_request {|req|
resp = webclient.do_request_state(req)
}
}
if resp.code == '200'
email_form = nil
HTree(resp.body).traverse_element('{http://www.w3.org/1999/xhtml}form') {|form|
email_form = WFO::Form.make(form, typekey_login_form.action_uri)
break
}
req = email_form.make_request
resp = webclient.do_request_state(req)
end
return nil if resp.code != '302'
return_uri = URI(resp['Location'])
webclient.do_request_state(WFO::ReqHTTP.get(return_uri))
end