mojoauth v1.0.2 MojoAuth
Create and verify MojoAuth credentials
Examples
# Simple credentials test :ok
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(secret: secret)
iex> MojoAuth.test_credentials(credentials, secret)
{:ok, nil}
# Forged credentials test :invalid
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(secret: secret)
iex> MojoAuth.test_credentials([username: "foobar", password: credentials[:password]], secret)
{:invalid, nil}
# Wrong secret tests :invalid
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(secret: secret)
iex> MojoAuth.test_credentials(credentials, "wrongsecret")
{:invalid, nil}
# Credentials expire after default TTL of 1 day
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(secret: secret)
iex> use Timex
iex> MojoAuth.test_credentials(credentials, secret, Date.now |> Date.universal |> Date.shift(days: 1, secs: 1) |> Date.to_secs) # Pretend it's the future
{:expired, nil}
# Credentials expire after a custom TTL
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(ttl: 200, secret: secret)
iex> use Timex
iex> MojoAuth.test_credentials(credentials, secret, Date.now |> Date.universal |> Date.shift(secs: 201) |> Date.to_secs) # Pretend it's the future
{:expired, nil}
# Credentials can assert an identity
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(id: "foobar", secret: secret)
iex> MojoAuth.test_credentials(credentials, secret)
{:ok, "foobar"}
# Forged credentials test :invalid
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(id: "doodah", secret: secret)
iex> MojoAuth.test_credentials([username: "sometime:foobar", password: credentials[:password]], secret)
{:invalid, "foobar"}
# Wrong secret tests :invalid
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(id: "foobar", secret: secret)
iex> MojoAuth.test_credentials(credentials, "wrongsecret")
{:invalid, "foobar"}
# Credentials expire after default TTL of 1 day
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(id: "foobar", secret: secret)
iex> use Timex
iex> MojoAuth.test_credentials(credentials, secret, Date.now |> Date.universal |> Date.shift(days: 1, secs: 1) |> Date.to_secs) # Pretend it's the future
{:expired, "foobar"}
# Credentials expire after a custom TTL
iex> secret = MojoAuth.create_secret
iex> credentials = MojoAuth.create_credentials(id: "foobar", ttl: 200, secret: secret)
iex> use Timex
iex> MojoAuth.test_credentials(credentials, secret, Date.now |> Date.universal |> Date.shift(secs: 201) |> Date.to_secs) # Pretend it's the future
{:expired, "foobar"}
Summary
Functions
Create a new set of credentials for an asserted ID, given a desired TTL and shared secret
Create a new random secret
Test that credentials are valid and current
Functions
Create a new set of credentials for an asserted ID, given a desired TTL and shared secret
Takes any of the following options, where secret
is required:
secret
: The shared secret with which to hash the credentials.id
: An arbitrary ID string to assert in the created credentials.ttl
: The number of seconds for which the credentials should be valid. Defaults to 1 day (86400 seconds).
Specs
test_credentials([username: binary, password: binary], binary, binary) :: {atom, binary}
Test that credentials are valid and current.
Takes a credentials list as produced by create_credentials
, a secret, and optionally a timestamp against which to validate expiry (defaults to the current time).