Hora
Assumption free, adapter based password management for Elixir.
Installation
This package can be installed by adding hora to your list of dependencies in
mix.exs:
def deps do
[{:hora, "~> 0.1.0"}]
endDependencies
When building Hora we tried our best not to make any assumptions on how it would be used. However, we did want to make sure that we removed any friction when using Hora for the most common use cases.
Therefore, if you want to take advantage of our Ecto and Comeonin integrations you will need to include them as dependencies in your project.
Usage
Hora takes an adapter based strategy for defining the cryptographic functions used to secure passwords. We provide support for bcrypt and pbkdf2_sha512 but it's possible to use your own custom adapters as well.
To get started you just need to configure which adapter to use and then include
Hora in your module.
defmodule MyModule do
use Hora, adapter: Hora.Adapter.Bcrypt
defstruct [:password, :password_digest]
end
iex> MyModule.authenticate("crypted_password", "uncrypted_password")
# true or false
iex> MyModule.secure_password("uncrypted_password")
# crypted password
If you're using Ecto use Hora.Ecto instead.
defmodule MyModule do
use Hora.Ecto, adapter: Hora.Adapter.Bcrypt
schema "my_schema" do
field :password, :string, virtual: true
field :password_digest, :string
end
def changeset(schema, params) do
schema
|> cast(params, [:password])
|> put_secure_password(:password, :password_digest)
end
end
iex> MyModule.authenticate(my_module.password_digest, "uncrypted_password")
# true or false
iex> MyModule.secure_password("uncrypted_password")
# crypted passwordConfiguration
You can define which adapter to use and it's options in one of two ways:
- Through application configuration
Example
config :hora, Hora,
adapter: Hora.Adapter.Bcrypt,
adapter_options: [log_rounds: 14]-
When including
Horain your module
Example
defmodule MyModule do
use Hora, adapter: Hora.Adapter.Bcrypt,
adapter_options: [log_rounds: 14]
end