Module: GithubPivotalFlow::GitHubAPI::OAuth
- Included in:
- GithubPivotalFlow::GitHubAPI
- Defined in:
- lib/github_pivotal_flow/github_api.rb
Instance Method Summary collapse
- #apply_authentication(req, url) ⇒ Object
- #obtain_oauth_token(host, user, two_factor_code = nil) ⇒ Object
Instance Method Details
#apply_authentication(req, url) ⇒ Object
193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/github_pivotal_flow/github_api.rb', line 193 def apply_authentication req, url if req.path =~ %r{^(/api/v3)?/authorizations$} super else user = url.user ? CGI.unescape(url.user) : config.github_username(url.host) token = config.github_api_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) ⇒ Object
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
# File 'lib/github_pivotal_flow/github_api.rb', line 205 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(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.ask_auth_code return obtain_oauth_token(host, user, two_factor_code) else res.error! end end if found = res.data.find {|auth| auth['app']['url'] == oauth_app_url } found['token'] else # create a new authorization res = post auth_url, :scopes => %w[repo], :note => 'github-pivotal-flow', :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 |