File tree Expand file tree Collapse file tree 2 files changed +49
-0
lines changed Expand file tree Collapse file tree 2 files changed +49
-0
lines changed Original file line number Diff line number Diff line change @@ -36,6 +36,24 @@ def client
36
36
::OAuth2 ::Client . new ( options . client_id , options . client_secret , deep_symbolize ( options . client_options ) )
37
37
end
38
38
39
+ def callback_url
40
+ # If redirect_uri is configured in token_params, use that
41
+ # value.
42
+ token_params . to_hash ( :symbolize_keys => true ) [ :redirect_uri ] || super
43
+ end
44
+
45
+ def query_string
46
+ # This method is called by callback_url, only if redirect_uri
47
+ # is omitted in token_params.
48
+ if request . params [ "code" ]
49
+ # If this is a callback, ignore query parameters added by
50
+ # the provider.
51
+ ""
52
+ else
53
+ super
54
+ end
55
+ end
56
+
39
57
credentials do
40
58
hash = { "token" => access_token . token }
41
59
hash . merge! ( "refresh_token" => access_token . refresh_token ) if access_token . expires? && access_token . refresh_token
Original file line number Diff line number Diff line change @@ -87,6 +87,37 @@ def app
87
87
instance . callback_phase
88
88
end
89
89
end
90
+
91
+ describe "#callback_url" do
92
+ subject { fresh_strategy }
93
+
94
+ it "returns the value in token_params, if given" do
95
+ instance = subject . new ( "abc" , "def" , :token_params => { :redirect_uri => "http://test/foo?bar=1" } )
96
+ allow ( instance ) . to receive ( :request ) do
97
+ double ( "Request" , :params => { "code" => "codecodecode" , "state" => "statestatestate" } )
98
+ end
99
+ expect ( instance . callback_url ) . to eq ( "http://test/foo?bar=1" )
100
+ end
101
+
102
+ it "does not include any query parameters like \" code\" and \" state\" " do
103
+ instance = subject . new ( "abc" , "def" )
104
+ allow ( instance ) . to receive ( :full_host ) do
105
+ "http://test"
106
+ end
107
+ allow ( instance ) . to receive ( :script_name ) do
108
+ "/foo"
109
+ end
110
+ allow ( instance ) . to receive ( :callback_path ) do
111
+ "/bar/callback"
112
+ end
113
+ allow ( instance ) . to receive ( :request ) do
114
+ double ( "Request" ,
115
+ :params => { "code" => "codecodecode" , "state" => "statestatestate" } ,
116
+ :query_string => "code=codecodecode&state=statestatestate" )
117
+ end
118
+ expect ( instance . callback_url ) . to eq ( "http://test/foo/bar/callback" )
119
+ end
120
+ end
90
121
end
91
122
92
123
describe OmniAuth ::Strategies ::OAuth2 ::CallbackError do
You can’t perform that action at this time.
0 commit comments