44 lines
1.0 KiB
Elixir
44 lines
1.0 KiB
Elixir
defmodule Mobilizon.Service.Users.Tools do
|
|
@moduledoc """
|
|
Common functions for actors services
|
|
"""
|
|
alias Mobilizon.Users.User
|
|
|
|
@spec we_can_send_email(User.t(), atom()) :: :ok | {:error, :email_too_soon}
|
|
def we_can_send_email(%User{} = user, key \\ :reset_password_sent_at) do
|
|
case Map.get(user, key) do
|
|
nil ->
|
|
:ok
|
|
|
|
_ ->
|
|
case Timex.before?(
|
|
Timex.shift(Map.get(user, key), hours: 1),
|
|
DateTime.utc_now() |> DateTime.truncate(:second)
|
|
) do
|
|
true ->
|
|
:ok
|
|
|
|
false ->
|
|
{:error, :email_too_soon}
|
|
end
|
|
end
|
|
end
|
|
|
|
@spec random_string(integer) :: String.t()
|
|
def random_string(length) do
|
|
length
|
|
|> :crypto.strong_rand_bytes()
|
|
|> Base.url_encode64()
|
|
end
|
|
end
|
|
|
|
defmodule Mobilizon.Users.Guards do
|
|
@moduledoc """
|
|
Guards for users
|
|
"""
|
|
|
|
defguard is_admin(role) when is_atom(role) and role == :administrator
|
|
|
|
defguard is_moderator(role) when is_atom(role) and role in [:administrator, :moderator]
|
|
end
|