oauth.erl 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. -module(oauth).
  2. -export([get/2, get/3, get/4]).
  3. -export([post/2, post/3, post/4]).
  4. -export([tokens/1]).
  5. -export([token/1]).
  6. -export([token_secret/1]).
  7. -export([params_from_string/1]).
  8. get(URL, Consumer) ->
  9. get(URL, Consumer, [], []).
  10. get(URL, Consumer, {oauth_tokens, Tokens}) ->
  11. get(URL, Consumer, Tokens, []);
  12. get(URL, Consumer, Params) when is_list(Params)->
  13. get(URL, Consumer, [], Params).
  14. get(URL, Consumer, {oauth_tokens, Tokens}, Params) ->
  15. get(URL, Consumer, Tokens, Params);
  16. get(URL, Consumer, Tokens, Params) when is_list(Tokens) ->
  17. http:request(oauth_request:url(get, URL, Params, Consumer, Tokens)).
  18. post(URL, Consumer) ->
  19. post(URL, Consumer, [], []).
  20. post(URL, Consumer, {oauth_tokens, Tokens}) ->
  21. post(URL, Consumer, Tokens, []);
  22. post(URL, Consumer, Params) when is_list(Params) ->
  23. post(URL, Consumer, [], Params).
  24. post(URL, Consumer, {oauth_tokens, Tokens}, Params) ->
  25. post(URL, Consumer, Tokens, Params);
  26. post(URL, Consumer, Tokens, Params) when is_list(Tokens) ->
  27. SignedParamsString = oauth_request:params_string(post, URL, Params, Consumer, Tokens),
  28. Request = {URL, [], "application/x-www-form-urlencoded", SignedParamsString},
  29. http:request(post, Request, [], []).
  30. tokens({ok, {_,_,Data}}) ->
  31. {ok, {oauth_tokens, params_from_string(Data)}};
  32. tokens(Term) ->
  33. Term.
  34. token({oauth_tokens, Tokens}) ->
  35. proplists:get_value(oauth_token, Tokens).
  36. token_secret({oauth_tokens, Tokens}) ->
  37. proplists:get_value(oauth_token_secret, Tokens).
  38. params_from_string(Data) ->
  39. lists:map(fun param_from_string/1, explode($&, Data)).
  40. param_from_string(Data) when is_list(Data) ->
  41. param_from_string(break_at($=, Data));
  42. param_from_string({K, V}) ->
  43. {list_to_atom(oauth_util:percent_decode(K)), oauth_util:percent_decode(V)}.
  44. explode(_Sep, []) ->
  45. [];
  46. explode(Sep, Chars) ->
  47. explode(Sep, break_at(Sep, Chars), []).
  48. explode(_Sep, {Param, []}, Params) ->
  49. lists:reverse([Param|Params]);
  50. explode(Sep, {Param, Etc}, Params) ->
  51. explode(Sep, break_at(Sep, Etc), [Param|Params]).
  52. break_at(Sep, Chars) ->
  53. case lists:splitwith(fun(C) -> C =/= Sep end, Chars) of
  54. Result={_, []} ->
  55. Result;
  56. {Before, [Sep|After]} ->
  57. {Before, After}
  58. end.