oauth.erl 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. -module(oauth).
  2. -export([get/5, post/5, token/1, token_secret/1, uri/2, header/1, signed_params/6]).
  3. get(URL, ExtraParams, Consumer, Token, TokenSecret) ->
  4. SignedParams = signed_params("GET", URL, ExtraParams, Consumer, Token, TokenSecret),
  5. oauth_http:get(uri(URL, SignedParams)).
  6. post(URL, ExtraParams, Consumer, Token, TokenSecret) ->
  7. SignedParams = signed_params("GET", URL, ExtraParams, Consumer, Token, TokenSecret),
  8. oauth_http:post(URL, oauth_uri:params_to_string(SignedParams)).
  9. token(Params) ->
  10. proplists:get_value("oauth_token", Params).
  11. token_secret(Params) ->
  12. proplists:get_value("oauth_token_secret", Params).
  13. uri(Base, []) ->
  14. Base;
  15. uri(Base, Params) ->
  16. lists:concat([Base, "?", oauth_uri:params_to_string(Params)]).
  17. header(Params) ->
  18. {"Authorization", "OAuth " ++ oauth_uri:params_to_header_string(Params)}.
  19. signed_params(Method, URL, ExtraParams, Consumer, Token, TokenSecret) ->
  20. Params = token_param(Token, params(Consumer, ExtraParams)),
  21. [{"oauth_signature", oauth_signature:value(Method, URL, Params, Consumer, TokenSecret)}|Params].
  22. token_param("", Params) ->
  23. Params;
  24. token_param(Token, Params) ->
  25. [{"oauth_token", Token}|Params].
  26. params(_Consumer={Key, _, SigMethod}, Params) ->
  27. Nonce = base64:encode_to_string(crypto:rand_bytes(32)), % cf. ruby-oauth
  28. params(Key, SigMethod, oauth_unix:timestamp(), Nonce, Params).
  29. params(ConsumerKey, SigMethod, Timestamp, Nonce, Params) -> [
  30. {"oauth_version", "1.0"},
  31. {"oauth_nonce", Nonce},
  32. {"oauth_timestamp", integer_to_list(Timestamp)},
  33. {"oauth_signature_method", oauth_signature:method_to_string(SigMethod)},
  34. {"oauth_consumer_key", ConsumerKey} | Params].