class XcodeInstaller::Agent
Attributes
dry_run[RW]
password[RW]
username[RW]
verbose[RW]
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/xcode-installer/agent.rb, line 9 def initialize super self.user_agent_alias = 'Mac Safari' pw = Security::InternetPassword.find(:server => XcodeInstaller::AppleDeveloperCenter::HOST) @username, @password = pw.attributes['acct'], pw.password if pw end
Public Instance Methods
download(xcode_url)
click to toggle source
# File lib/xcode-installer/agent.rb, line 17 def download(xcode_url) adc_login_url = XcodeInstaller::AppleDeveloperCenter::LOGIN_URL downloads_url = XcodeInstaller::AppleDeveloperCenter::DOWNLOADS_URL begin # Request login response puts "\n>>> Login response >>>" if @verbose response = get(adc_login_url) if @verbose puts "status code: #{response.code}\n" pp response puts cookie_jar.jar end # Submit login form puts "\n>>> Submit Login Form >>>" if @verbose form = response.form_with(:name => 'appleConnectForm') form.theAccountName = username form.theAccountPW = password response = form.submit if @verbose puts "status code: #{response.code}\n" pp response puts cookie_jar.jar end # Request downloads response puts "\n>>> Downloads >>>" if @verbose response = get(downloads_url) if @verbose puts "status code: #{response.code}\n" pp response puts cookie_jar.jar end # Shouldn't get the login form if login was successful form = response.form_with(:name => 'appleConnectForm') raise UnsuccessfulAuthenticationError if form # Download puts "\n>>> Xcode >>>" if @verbose if @dry_run # HEAD request for testing response = head(xcode_url) if @verbose puts "status code: #{response.code}\n" pp response else puts "filename: #{response.filename}" puts "size: #{response.header['content-length']}" puts "last-modified: #{response.header['last-modified']}" return response.filename end else # GET request for actual download pluggable_parser.default = Mechanize::Download self.progressbar{ file = get(xcode_url) } file = get(xcode_url) file.save return file.filename end rescue Mechanize::ResponseCodeError => exception if exception.response_code == '403' response = exception.page puts "The file doesn't exist at that location or access denied (status code: #{response.code})\n" puts "\n>>> Unexpected response >>>" if @verbose pp response if @verbose else raise # Some other error, re-raise end end end