Compare commits
3 Commits
c6e3a490d2
...
8b527f618a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b527f618a | ||
|
|
8112173ef4 | ||
|
|
a89ed0c80c |
@ -1,10 +1,18 @@
|
|||||||
defmodule BasicSignupAllowlist do
|
defmodule BasicSignupAllowlist do
|
||||||
import FunCore.BasicSignupAllowlist
|
import FunCore.BasicSignupAllowlist
|
||||||
|
|
||||||
|
@signup_allowlist_emails "SIGNUP_ALLOWLIST_EMAILS"
|
||||||
|
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Checks if an email address is allowed based on the SIGNUP_ALLOWLIST_EMAILS env variable.
|
Checks if an email address is allowed based on the SIGNUP_ALLOWLIST_EMAILS env variable.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns the name of the environment variable used for the signup allowlist.
|
||||||
|
"""
|
||||||
|
@spec signup_allowlist_emails() :: String.t()
|
||||||
|
def signup_allowlist_emails, do: @signup_allowlist_emails
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Checks if an email address is allowed based on the SIGNUP_ALLOWLIST_EMAILS env variable.
|
Checks if an email address is allowed based on the SIGNUP_ALLOWLIST_EMAILS env variable.
|
||||||
|
|
||||||
@ -19,15 +27,16 @@ defmodule BasicSignupAllowlist do
|
|||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
iex> System.delete_env("SIGNUP_ALLOWLIST_EMAILS")
|
iex> System.delete_env("SIGNUP_ALLOWLIST_EMAILS")
|
||||||
iex> BasicSignupAllowlist.mail_allowlisted("joe@example.com")
|
iex> BasicSignupAllowlist.signup_allowed?("joe@example.com")
|
||||||
false
|
false
|
||||||
iex> System.put_env("SIGNUP_ALLOWLIST_EMAILS","*")
|
iex> System.put_env("SIGNUP_ALLOWLIST_EMAILS", "*")
|
||||||
iex> BasicSignupAllowlist.mail_allowlisted("joe@example.com")
|
iex> BasicSignupAllowlist.signup_allowed?("joe@example.com")
|
||||||
true
|
true
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def mail_allowlisted(email) do
|
@spec signup_allowed?(String.t()) :: boolean()
|
||||||
env_value = System.get_env("SIGNUP_ALLOWLIST_EMAILS")
|
def signup_allowed?(email) do
|
||||||
mail_allowlisted_fun(env_value, email)
|
env_value = System.get_env(@signup_allowlist_emails)
|
||||||
|
signup_allowed_fun(env_value, email)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,15 +1,31 @@
|
|||||||
defmodule FunCore.BasicSignupAllowlist do
|
defmodule FunCore.BasicSignupAllowlist do
|
||||||
|
@moduledoc """
|
||||||
|
Functional core for email allowlist checking logic.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Normalizes an email address by trimming whitespace and converting to lowercase.
|
||||||
|
"""
|
||||||
|
@spec normalize(String.t()) :: String.t()
|
||||||
def normalize(email) do
|
def normalize(email) do
|
||||||
email |> String.trim() |> String.downcase()
|
email |> String.trim() |> String.downcase()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Converts a comma-separated string of email addresses into a normalized list.
|
||||||
|
"""
|
||||||
|
@spec addresses_as_list(String.t()) :: [String.t()]
|
||||||
def addresses_as_list(addresses_str) do
|
def addresses_as_list(addresses_str) do
|
||||||
addresses_str
|
addresses_str
|
||||||
|> String.split(",")
|
|> String.split(",")
|
||||||
|> Enum.map(&normalize/1)
|
|> Enum.map(&normalize/1)
|
||||||
end
|
end
|
||||||
|
|
||||||
def mail_allowlisted_fun(signups_allowed, email_received) do
|
@doc """
|
||||||
|
Checks if an email is allowed based on the allowlist configuration.
|
||||||
|
"""
|
||||||
|
@spec signup_allowed_fun(String.t() | nil, String.t()) :: boolean()
|
||||||
|
def signup_allowed_fun(signups_allowed, email_received) do
|
||||||
case signups_allowed do
|
case signups_allowed do
|
||||||
nil -> false
|
nil -> false
|
||||||
"*" -> true
|
"*" -> true
|
||||||
|
|||||||
@ -3,27 +3,27 @@ defmodule BasicSignupAllowlistTest do
|
|||||||
doctest BasicSignupAllowlist
|
doctest BasicSignupAllowlist
|
||||||
|
|
||||||
defp allow_signups_for(allowlist) do
|
defp allow_signups_for(allowlist) do
|
||||||
System.put_env("SIGNUP_ALLOWLIST_EMAILS", allowlist)
|
System.put_env(BasicSignupAllowlist.signup_allowlist_emails(), allowlist)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "setup in describe block" do
|
describe "setup in describe block" do
|
||||||
setup do
|
setup do
|
||||||
on_exit(fn ->
|
on_exit(fn ->
|
||||||
# resetting values did not work, so 'just' set it to the effect without this module configured.
|
# resetting values did not work, so 'just' set it to the effect without this module configured.
|
||||||
System.put_env("SIGNUP_ALLOWLIST_EMAILS", "*")
|
System.put_env(BasicSignupAllowlist.signup_allowlist_emails(), "*")
|
||||||
end)
|
end)
|
||||||
|
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
|
|
||||||
test "When not set, not allowlisted" do
|
test "When not set, not allowlisted" do
|
||||||
System.delete_env("SIGNUP_ALLOWLIST_EMAILS")
|
System.delete_env(BasicSignupAllowlist.signup_allowlist_emails())
|
||||||
refute BasicSignupAllowlist.mail_allowlisted("joe@example.com")
|
refute BasicSignupAllowlist.signup_allowed?("joe@example.com")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "When set to star, allowlisted" do
|
test "When set to star, allowlisted" do
|
||||||
allow_signups_for("*")
|
allow_signups_for("*")
|
||||||
assert BasicSignupAllowlist.mail_allowlisted("joe@example.com")
|
assert BasicSignupAllowlist.signup_allowed?("joe@example.com")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -16,25 +16,25 @@ defmodule FunCore.BasicSignupAllowlistTest do
|
|||||||
|
|
||||||
describe "Not allowlisted when allowed list is" do
|
describe "Not allowlisted when allowed list is" do
|
||||||
test "not set" do
|
test "not set" do
|
||||||
refute(mail_allowlisted_fun(nil, "joe@example.com"))
|
refute(signup_allowed_fun(nil, "joe@example.com"))
|
||||||
end
|
end
|
||||||
|
|
||||||
test "empty" do
|
test "empty" do
|
||||||
refute(mail_allowlisted_fun("j", "joe@example.com"))
|
refute(signup_allowed_fun("j", "joe@example.com"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Allowlisted when" do
|
describe "Allowlisted when" do
|
||||||
test "*" do
|
test "*" do
|
||||||
assert(mail_allowlisted_fun("*", "jane@example.com"))
|
assert(signup_allowed_fun("*", "jane@example.com"))
|
||||||
end
|
end
|
||||||
|
|
||||||
test "Multiple set and one match" do
|
test "Multiple set and one match" do
|
||||||
assert(mail_allowlisted_fun("joe@example.com, jane@example.com", "jane@example.com"))
|
assert(signup_allowed_fun("joe@example.com, jane@example.com", "jane@example.com"))
|
||||||
end
|
end
|
||||||
|
|
||||||
test "Matches with different casings" do
|
test "Matches with different casings" do
|
||||||
assert(mail_allowlisted_fun("joe@Example.com, jane@example.com", "Joe@example.com"))
|
assert(signup_allowed_fun("joe@Example.com, jane@example.com", "Joe@example.com"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user