diff --git a/lib/basic_lti.rb b/lib/basic_lti.rb index ffb984fcb4d..a05d282d887 100644 --- a/lib/basic_lti.rb +++ b/lib/basic_lti.rb @@ -9,10 +9,18 @@ module BasicLTI require 'oauth' require 'oauth/consumer' uri = URI.parse(url) + + if uri.port == uri.default_port + host = uri.host + else + host = "#{uri.host}:#{uri.port}" + end + consumer = OAuth::Consumer.new(key, secret, { - :site => "#{uri.scheme}://#{uri.host}", + :site => "#{uri.scheme}://#{host}", :signature_method => "HMAC-SHA1" }) + path = uri.path path = '/' if path.empty? if !uri.query.blank? @@ -81,4 +89,4 @@ module BasicLTI hash['oauth_callback'] = 'about:blank' generate_params(hash, url, tool.consumer_key, tool.shared_secret) end -end \ No newline at end of file +end diff --git a/spec/lib/basic_lti_spec.rb b/spec/lib/basic_lti_spec.rb index 57a06b42d0d..c44b2572a3d 100644 --- a/spec/lib/basic_lti_spec.rb +++ b/spec/lib/basic_lti_spec.rb @@ -61,6 +61,38 @@ describe BasicLTI do }, 'http://dr-chuck.com/ims/php-simple/tool.php?a=1&b=2', '12345', 'secret') res['oauth_signature'].should eql('eCJ7qILcordyJC2/Unhchp6RAcs=') end + + it "should generate a correct signature with a non-standard port" do + # signatures generated using http://oauth.googlecode.com/svn/code/javascript/example/signature.html + BasicLTI.explicit_signature_settings('1251600739', 'c8350c0e47782d16d2fa48b2090c1d8f') + res = BasicLTI.generate_params({ + }, 'http://dr-chuck.com:123/ims/php-simple/tool.php', '12345', 'secret') + res['oauth_signature'].should eql('ghEdPHwN4iJmsM3Nr4AndDx2Kx8=') + + res = BasicLTI.generate_params({ + }, 'http://dr-chuck.com/ims/php-simple/tool.php', '12345', 'secret') + res['oauth_signature'].should eql('WoSpvCr2HEsLzao6Do0eukxwAsk=') + + res = BasicLTI.generate_params({ + }, 'http://dr-chuck.com:80/ims/php-simple/tool.php', '12345', 'secret') + res['oauth_signature'].should eql('WoSpvCr2HEsLzao6Do0eukxwAsk=') + + res = BasicLTI.generate_params({ + }, 'http://dr-chuck.com:443/ims/php-simple/tool.php', '12345', 'secret') + res['oauth_signature'].should eql('KqAV7eIS/+iWIDpvCyDfY8ZpmT4=') + + res = BasicLTI.generate_params({ + }, 'https://dr-chuck.com/ims/php-simple/tool.php', '12345', 'secret') + res['oauth_signature'].should eql('wFRB/1ZXi/91dop6GwahfboWPvQ=') + + res = BasicLTI.generate_params({ + }, 'https://dr-chuck.com:443/ims/php-simple/tool.php', '12345', 'secret') + res['oauth_signature'].should eql('wFRB/1ZXi/91dop6GwahfboWPvQ=') + + res = BasicLTI.generate_params({ + }, 'https://dr-chuck.com:80/ims/php-simple/tool.php', '12345', 'secret') + res['oauth_signature'].should eql('X8Aq2HXSHnr6u/6z/G9zI5aDoR0=') + end end describe "generate" do