Browse Source

Use correct request parameter normalization algorithm.

Tim Fletcher 14 years ago
parent
commit
b9dcd4f8e3
1 changed files with 8 additions and 1 deletions
  1. 8 1
      src/oauth.erl

+ 8 - 1
src/oauth.erl

@@ -61,9 +61,16 @@ signature(HttpMethod, URL, Params, Consumer, TokenSecret) ->
 
 
 signature_base_string(HttpMethod, URL, Params) ->
 signature_base_string(HttpMethod, URL, Params) ->
   NormalizedURL = oauth_uri:normalize(URL),
   NormalizedURL = oauth_uri:normalize(URL),
-  NormalizedParams = oauth_uri:params_to_string(lists:sort(Params)),
+  NormalizedParams = normalized_params_string(Params),
   oauth_uri:calate("&", [HttpMethod, NormalizedURL, NormalizedParams]).
   oauth_uri:calate("&", [HttpMethod, NormalizedURL, NormalizedParams]).
 
 
+normalized_params_string(Params) ->
+  % cf. http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2
+  Encoded = [{oauth_uri:encode(K), oauth_uri:encode(V)} || {K, V} <- Params],
+  Sorted = lists:sort(Encoded),
+  Concatenated = [lists:concat([K, "=", V]) || {K, V} <- Sorted],
+  string:join(Concatenated, "&").
+
 token_param("", Params) ->
 token_param("", Params) ->
   Params;
   Params;
 token_param(Token, Params) ->
 token_param(Token, Params) ->