oauth_request.erl 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. -module(oauth_request).
  2. -export([header/6, params_string/5, url/5]).
  3. header(Realm, Method, URL, ExtraParams, Consumer, TokenPair) ->
  4. Params = signed_params(Method, URL, ExtraParams, Consumer, TokenPair),
  5. HeaderString = oauth_params:to_header_string(Params),
  6. HeaderValue = fmt:sprintf("OAuth realm=\"%s\", %s", [Realm, HeaderString]),
  7. {"Authorization", HeaderValue}.
  8. params_string(Method, URL, ExtraParams, Consumer, TokenPair) ->
  9. Params = signed_params(Method, URL, ExtraParams, Consumer, TokenPair),
  10. oauth_params:to_string(Params).
  11. url(Method, URL, ExtraParams, Consumer, TokenPair) ->
  12. Params = signed_params(Method, URL, ExtraParams, Consumer, TokenPair),
  13. fmt:sprintf("%s?%s", [URL, oauth_params:to_string(Params)]).
  14. signed_params(Method, URL, ExtraParams, Consumer, TokenPair) ->
  15. {Params, TokenSecret} = oauth_params(TokenPair, Consumer, ExtraParams),
  16. [{oauth_signature, signature(Method, URL, Params, Consumer, TokenSecret)}|Params].
  17. oauth_params({[], TokenSecret}, Consumer, ExtraParams) ->
  18. {oauth_params(Consumer, ExtraParams), TokenSecret};
  19. oauth_params({Token, TokenSecret}, Consumer, ExtraParams) ->
  20. Params = [{oauth_token, Token}|oauth_params(Consumer, ExtraParams)],
  21. {Params, TokenSecret}.
  22. oauth_params(Consumer, ExtraParams) ->
  23. oauth_util:proplists_merge([
  24. {oauth_consumer_key, oauth_consumer:key(Consumer)},
  25. {oauth_signature_method, oauth_consumer:signature_method(Consumer)},
  26. {oauth_timestamp, oauth_util:unix_timestamp()},
  27. {oauth_nonce, oauth_util:nonce()},
  28. {oauth_version, "1.0"}
  29. ], ExtraParams).
  30. signature(RequestMethod, URL, Params, Consumer, TokenSecret) ->
  31. ConsumerSecret = oauth_consumer:secret(Consumer),
  32. case proplists:get_value(oauth_signature_method, Params) of
  33. "PLAINTEXT" ->
  34. oauth_plaintext:signature(ConsumerSecret, TokenSecret);
  35. "HMAC-SHA1" ->
  36. oauth_hmac:signature({RequestMethod, URL, Params}, ConsumerSecret, TokenSecret)
  37. end.