module Hub::GitHubAPI::OAuth
Public Instance Methods
apply_authentication(req, url)
click to toggle source
Calls superclass method
# File lib/hub/github_api.rb, line 322 def apply_authentication req, url if req.path =~ %r{^(/api/v3)?/authorizations\b} super else user = url.user ? CGI.unescape(url.user) : config.username(url.host) token = config.oauth_token(url.host, user) { obtain_oauth_token url.host, user } req['Authorization'] = "token #{token}" end end
obtain_oauth_token(host, user, two_factor_code = nil)
click to toggle source
# File lib/hub/github_api.rb, line 334 def obtain_oauth_token host, user, two_factor_code = nil auth_url = URI.parse("https://%s@%s/authorizations" % [CGI.escape(user), host]) # dummy request to trigger a 2FA SMS since a HTTP GET won't do it post(auth_url) if !two_factor_code # first try to fetch existing authorization res = get_all(auth_url) do |req| req['X-GitHub-OTP'] = two_factor_code if two_factor_code end unless res.success? if !two_factor_code && res['X-GitHub-OTP'].to_s.include?('required') two_factor_code = config.prompt_auth_code return obtain_oauth_token(host, user, two_factor_code) else res.error! end end if found = res.data.find {|auth| auth['note'] == 'hub' || auth['note_url'] == oauth_app_url } found['token'] else # create a new authorization res = post auth_url, :scopes => %w[repo], :note => 'hub', :note_url => oauth_app_url do |req| req['X-GitHub-OTP'] = two_factor_code if two_factor_code end res.error! unless res.success? res.data['token'] end end