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_credentials(list)

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).
create_secret()

Specs

create_secret :: binary

Create a new random secret

test_credentials(list, secret, timestamp \\ now |> Date.to_secs())

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).