Awesome
OAuther
OAuther is a library to authenticate using the OAuth 1.0 protocol.
All the standard signature methods are supported:
- HMAC-SHA1
- RSA-SHA1
- PLAINTEXT
This library also supports non-standard signature methods (that replace SHA-1 with stronger hashing algorithms):
- HMAC-SHA256
Installation
Add the :oauther
dependency to your mix.exs
file:
defp deps do
[{:oauther, "~> 1.1"}]
end
Then, run mix deps.get
in your shell to fetch the dependencies.
Usage
The example below shows the use of hackney HTTP client for interacting with the Twitter API. Protocol parameters are transmitted using the HTTP "Authorization" header.
creds = OAuther.credentials(consumer_key: "dpf43f3p2l4k3l03", consumer_secret: "kd94hf93k423kf44", token: "nnch734d00sl2jdk", token_secret: "pfkkdhi9sl3r4s00")
#=> %OAuther.Credentials{
#=> consumer_key: "dpf43f3p2l4k3l03",
#=> consumer_secret: "kd94hf93k423kf44",
#=> method: :hmac_sha1,
#=> token: "nnch734d00sl2jdk",
#=> token_secret: "pfkkdhi9sl3r4s00"
#=> }
params = OAuther.sign("post", "https://api.twitter.com/1.1/statuses/lookup.json", [{"id", 485086311205048320}], creds)
#=> [
#=> {"oauth_signature", "ariK9GrGLzeEJDwQcmOTlf7jxeo="},
#=> {"oauth_consumer_key", "dpf43f3p2l4k3l03"},
#=> {"oauth_nonce", "L6a3Y1NeNwbU9Sqd6XnwNU+pjm6o0EyA"},
#=> {"oauth_signature_method", "HMAC-SHA1"},
#=> {"oauth_timestamp", 1517250224},
#=> {"oauth_version", "1.0"},
#=> {"oauth_token", "nnch734d00sl2jdk"},
#=> {"id", 485086311205048320}
#=> ]
{header, req_params} = OAuther.header(params)
#=> {{"Authorization",
#=> "OAuth oauth_signature=\"ariK9GrGLzeEJDwQcmOTlf7jxeo%3D\", oauth_consumer_key=\"dpf43f3p2l4k3l03\", oauth_nonce=\"L6a3Y1NeNwbU9Sqd6XnwNU%2Bpjm6o0EyA\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"1517250224\", oauth_version=\"1.0\", oauth_token=\"nnch734d00sl2jdk\""},
#=> [{"id", 485086311205048320}]}
:hackney.post("https://api.twitter.com/1.1/statuses/lookup.json", [header], {:form, req_params})
#=> {:ok, 200, [...], #Reference<0.0.0.837>}
License
OAuther is released under the ISC license.