Skip to content

Commit 69034c1

Browse files
committed
Add an extra test case for SSO login
1 parent 864333e commit 69034c1

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

test/integration/session_controller_test.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
require 'test_helper'
22

3-
def sso_response(url)
3+
def sso_response(url, secret = Rails.application.secrets.sso_secret)
44
parsed = Rack::Utils.parse_query(url.split('?')[-1])
55
decoded = Base64.decode64(parsed['sso'])
66
decoded_hash = Rack::Utils.parse_query(decoded)
@@ -16,7 +16,7 @@ def sso_response(url)
1616
query = Rack::Utils.build_query(user_data)
1717
payload = Base64.strict_encode64(query)
1818
escaped = CGI::escape(payload)
19-
signed = OpenSSL::HMAC.hexdigest('sha256', Rails.application.secrets.sso_secret, payload)
19+
signed = OpenSSL::HMAC.hexdigest('sha256', secret, payload)
2020

2121
["#{return_sso_url}?sso=#{escaped}&sig=#{signed}", decoded_hash['nonce']]
2222
end
@@ -47,4 +47,14 @@ class SessionControllerTest < ActionDispatch::IntegrationTest
4747
assert_equal(422, response.status)
4848
assert_nil(controller.current_user)
4949
end
50+
51+
test 'shouldn\'t allow users to login if incoming payload is signed with a different secret' do
52+
get '/login'
53+
location = response.headers['Location']
54+
url, _ = sso_response(location, 'wr0ng$ecret')
55+
assert_raise RuntimeError do
56+
get url
57+
end
58+
assert_nil(controller.current_user)
59+
end
5060
end

0 commit comments

Comments
 (0)