|
1 | 1 | var url = Npm.require("url"); |
2 | 2 |
|
| 3 | +OAuth._queryParamsWithAuthTokenUrl = function (authUrl, oauthBinding, params, whitelistedQueryParams) { |
| 4 | + params = params || {}; |
| 5 | + var redirectUrlObj = url.parse(authUrl, true); |
| 6 | + |
| 7 | + _.extend( |
| 8 | + redirectUrlObj.query, |
| 9 | + _.pick(params.query, whitelistedQueryParams), |
| 10 | + { |
| 11 | + oauth_token: oauthBinding.requestToken, |
| 12 | + } |
| 13 | + ); |
| 14 | + |
| 15 | + // Clear the `search` so it is rebuilt by Node's `url` from the `query` above. |
| 16 | + // Using previous versions of the Node `url` module, this was just set to "" |
| 17 | + // However, Node 6 docs seem to indicate that this should be `undefined`. |
| 18 | + delete redirectUrlObj.search; |
| 19 | + |
| 20 | + // Reconstruct the URL back with provided query parameters merged with oauth_token |
| 21 | + return url.format(redirectUrlObj); |
| 22 | +}; |
| 23 | + |
3 | 24 | // connect middleware |
4 | 25 | OAuth._requestHandlers['1'] = function (service, query, res) { |
5 | 26 | var config = ServiceConfiguration.configurations.findOne({service: service.serviceName}); |
@@ -30,19 +51,19 @@ OAuth._requestHandlers['1'] = function (service, query, res) { |
30 | 51 | oauthBinding.requestTokenSecret); |
31 | 52 |
|
32 | 53 | // support for scope/name parameters |
33 | | - var redirectUrl = undefined; |
| 54 | + var redirectUrl; |
| 55 | + var authParams = { |
| 56 | + query: query |
| 57 | + }; |
| 58 | + |
34 | 59 | if(typeof urls.authenticate === "function") { |
35 | | - redirectUrl = urls.authenticate(oauthBinding, { |
36 | | - query: query |
37 | | - }); |
| 60 | + redirectUrl = urls.authenticate(oauthBinding, authParams); |
38 | 61 | } else { |
39 | | - // Parse the URL to support additional query parameters in urls.authenticate |
40 | | - var redirectUrlObj = url.parse(urls.authenticate, true); |
41 | | - redirectUrlObj.query = redirectUrlObj.query || {}; |
42 | | - redirectUrlObj.query.oauth_token = oauthBinding.requestToken; |
43 | | - redirectUrlObj.search = ''; |
44 | | - // Reconstruct the URL back with provided query parameters merged with oauth_token |
45 | | - redirectUrl = url.format(redirectUrlObj); |
| 62 | + redirectUrl = OAuth._queryParamsWithAuthTokenUrl( |
| 63 | + urls.authenticate, |
| 64 | + oauthBinding, |
| 65 | + authParams |
| 66 | + ); |
46 | 67 | } |
47 | 68 |
|
48 | 69 | // redirect to provider login, which will redirect back to "step 2" below |
|
0 commit comments