Skip to content
Flexible password policies for Elixir.
Elixir
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
lib
priv
test
.formatter.exs
.gitignore
CHANGELOG.md
LICENSE
README.md
mix.exs
mix.lock

README.md

Password hex.pm hexdocs.pm

Flexible password policies for Elixir.

Comes with a built-in data set with the most widely used passwords (~400K records) from Mark Burnett / xato.net.

Installation

Add to your mix.exs:

def deps do
  [
    {:password, "~> 1.0"}
  ]
end

If you're not using application inference, then add :password to your applications list.

Usage

Create a new file and define a module like so:

defmodule MyApp.Password do
  use Password, [
    # Policies
  ]

end

The empty list is where password policies go. For example:

defmodule MyApp.Password do
  use Password, [
    {Password.Policy.SpecialCharacters}
  ]

end

To run the policies agains an input, use the validate/1 function:

iex> MyApp.Password.validate("password")
{:error, [Password.Policy.SpecialCharacters]}

iex> MyApp.Password.validate("password$")
:ok

To learn more about the included password policies and how to configure them, see below.

Password policies

Password's Policy modules are essentially middleware that you can plug in or extend to create your own. At moment, the current modules are included:

Check documentation on hexdocs.

To create your own password policies, simply create a module that implements the Password.Policy behaviour and provide the validate/2 function. See source of included modules as an example.

About

Heresy logo

This project is sponsored by Heresy. We're always looking for great engineers to join our team, so if you love Elixir, open source and enjoy some challenge, drop us a line and say hello!

License

  • Password: See LICENSE file.
  • "Heresy" name and logo: Copyright © 2019 Heresy Software Ltd
You can’t perform that action at this time.