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 324 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
local_hostname()
click to toggle source
# File lib/hub/github_api.rb, line 376 def local_hostname require 'socket' Socket.gethostname end
local_user()
click to toggle source
# File lib/hub/github_api.rb, line 371 def local_user require 'etc' Etc.getlogin end
obtain_oauth_token(host, user)
click to toggle source
# File lib/hub/github_api.rb, line 336 def obtain_oauth_token host, user auth_url = URI.parse("https://%s@%s/authorizations" % [CGI.escape(user), host]) auth_params = { :scopes => ['repo'], :note => "hub for #{local_user}@#{local_hostname}", :note_url => oauth_app_url } res = nil two_factor_code = nil loop do res = post(auth_url, auth_params) do |req| req['X-GitHub-OTP'] = two_factor_code if two_factor_code end if res.success? break elsif res.status == 401 && res['X-GitHub-OTP'].to_s.include?('required') $stderr.puts "warning: invalid two-factor code" if two_factor_code two_factor_code = config.prompt_auth_code elsif res.status == 422 && 'already_exists' == res.data['errors'][0]['code'] if auth_params[:note] =~ / (\d+)$/ res.error! if $1.to_i >= 9 auth_params[:note].succ! else auth_params[:note] += ' 2' end else res.error! end end res.data['token'] end