Skip to content

Commit fc6d3be

Browse files
committed
Change oauth2 token processing.
1 parent 60b7d8d commit fc6d3be

2 files changed

Lines changed: 91 additions & 10 deletions

File tree

lib/github_api/request/oauth2.rb

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,40 @@
55
module Github
66
module Request
77
class OAuth2 < Faraday::Middleware
8+
include Github::Utils::Url
9+
10+
ACCESS_TOKEN = 'access_token'.freeze
11+
AUTH_HEADER = 'Authorization'.freeze
12+
813
dependency 'oauth2'
914

1015
def call(env)
11-
# puts "ENV: #{env.inspect}"
12-
# puts "TOKEN : #{@token}"
13-
# puts "APP: #{@app}"
14-
1516
# Extract parameters from the query
16-
params = env[:url].query_values || {}
17-
18-
env[:url].query_values = { 'access_token' => @token }.merge(params)
17+
params = { ACCESS_TOKEN => @token }.update query_params(env[:url])
1918

20-
token = env[:url].query_values['access_token']
21-
22-
env[:request_headers].merge!('Authorization' => "Token token=\"#{token}\"")
19+
if token = params[ACCESS_TOKEN] and !token.empty?
20+
env[:url].query = build_query params
21+
env[:request_headers].merge!(AUTH_HEADER => "Token token=\"#{token}\"")
22+
end
2323

2424
@app.call env
2525
end
2626

2727
def initialize(app, *args)
28+
super app
2829
@app = app
2930
@token = args.shift
3031
end
32+
33+
def query_params(url)
34+
if url.query.nil? or url.query.empty?
35+
{}
36+
else
37+
puts "QUERY BEFORE #{url.query}"
38+
puts "QUERY AFTER #{parse_query url.query}"
39+
parse_query url.query
40+
end
41+
end
3142
end # OAuth2
3243
end # Request
3344
end # Github

spec/github/request/oauth2_spec.rb

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
require 'spec_helper'
2+
3+
describe Github::Request::OAuth2 do
4+
include Github::Utils::Url
5+
6+
def auth_header(env)
7+
env[:request_headers]['Authorization']
8+
end
9+
10+
def middleware
11+
described_class.new(lambda { |env| env }, options)
12+
end
13+
14+
def process(params={}, headers={})
15+
env = {
16+
:url => URI('http://example.com/?' + build_query(params)),
17+
:request_headers => headers
18+
}
19+
middleware.call(env)
20+
end
21+
22+
context 'no token configured' do
23+
let(:options) { nil }
24+
25+
it "doesn't add params" do
26+
result = process(:q => 'query')
27+
result[:url].query.should eql 'q=query'
28+
end
29+
30+
it "doesn't add headers" do
31+
auth_header(process).should be_nil
32+
end
33+
34+
it "allows for ad hoc access token" do
35+
result = process(:q => 'query', :access_token => 'abc123')
36+
result[:url].query.should eql 'access_token=abc123&q=query'
37+
end
38+
39+
it "creates header for ad hoc access token" do
40+
result = process(:q => 'query', :access_token => 'abc123')
41+
auth_header(result).should eql 'Token token="abc123"'
42+
end
43+
end
44+
45+
context 'default token configured' do
46+
let(:options) { 'ABC' }
47+
48+
it "adds access token to params" do
49+
result = process(:q => 'query')
50+
result[:url].query.should eql 'access_token=ABC&q=query'
51+
end
52+
53+
it "creates header for access token" do
54+
auth_header(process).should eql 'Token token="ABC"'
55+
end
56+
57+
it "overrides default with explicit token" do
58+
result = process(:q => 'query', :access_token => 'abc123')
59+
result[:url].query.should eql 'access_token=abc123&q=query'
60+
auth_header(result).should eql 'Token token="abc123"'
61+
end
62+
63+
it "clears default token with explicit one" do
64+
result = process(:q => 'query', :access_token => nil)
65+
result[:url].query.should eql 'q=query&access_token'
66+
auth_header(result).should be_nil
67+
end
68+
end
69+
70+
end # Github::Request::OAuth2

0 commit comments

Comments
 (0)