Skip to content

Commit ee2df51

Browse files
committed
escape user ID when forming URL
1 parent 5ed1edb commit ee2df51

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

lib/omniauth/strategies/slack.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
require 'omniauth/strategies/oauth2'
2+
require 'uri'
3+
require 'rack/utils'
24

35
module OmniAuth
46
module Strategies
@@ -55,7 +57,11 @@ def raw_info
5557
end
5658

5759
def user_info
58-
@user_info ||= access_token.get("/api/users.info?user=#{raw_info['user_id']}").parsed
60+
url = URI.parse("/api/users.info")
61+
url.query = Rack::Utils.build_query(user: raw_info['user_id'])
62+
url = url.to_s
63+
64+
@user_info ||= access_token.get(url).parsed
5965
end
6066

6167
def team_info

test/test.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,25 @@ def setup
9898
refute_has_key "refresh_token", strategy.credentials
9999
end
100100
end
101+
102+
class UserInfoTest < StrategyTestCase
103+
def setup
104+
super
105+
@access_token = stub("OAuth2::AccessToken")
106+
strategy.stubs(:access_token).returns(@access_token)
107+
end
108+
109+
test "performs a GET to https://slack.com/api/users.info" do
110+
strategy.stubs(:raw_info).returns("user_id" => "U123")
111+
@access_token.expects(:get).with("/api/users.info?user=U123")
112+
.returns(stub_everything("OAuth2::Response"))
113+
strategy.user_info
114+
end
115+
116+
test "URI escapes user ID" do
117+
strategy.stubs(:raw_info).returns("user_id" => "../haxx?U123#abc")
118+
@access_token.expects(:get).with("/api/users.info?user=..%2Fhaxx%3FU123%23abc")
119+
.returns(stub_everything("OAuth2::Response"))
120+
strategy.user_info
121+
end
122+
end

0 commit comments

Comments
 (0)