oauth_hmac.erl 861 B

12345678910111213141516171819202122232425262728
  1. -module(oauth_hmac).
  2. -export([signature/3]).
  3. % for testing:
  4. -export([base_string/3]).
  5. -export([normalize/1]).
  6. signature({Method, URL, Params}, ConsumerSecret, TokenSecret) ->
  7. signature(base_string(Method, URL, Params), ConsumerSecret, TokenSecret);
  8. signature(BaseString, ConsumerSecret, TokenSecret) ->
  9. b64(crypto:sha_mac(key(ConsumerSecret, TokenSecret), BaseString)).
  10. base_string(Method, URL, Params) when is_list(Method) ->
  11. string:join(lists:map(fun fmt:percent_encode/1, [Method, URL, normalize(Params)]), "&").
  12. normalize(Params) ->
  13. oauth_params:to_string(sort(Params)).
  14. sort(Params) ->
  15. lists:sort(fun({K,X},{K,Y}) -> X < Y; ({A,_},{B,_}) -> A < B end, Params).
  16. key(ConsumerSecret, TokenSecret) ->
  17. fmt:sprintf("%s&%s", [fmt:percent_encode(ConsumerSecret), fmt:percent_encode(TokenSecret)]).
  18. b64(Data) ->
  19. base64:encode_to_string(Data).