Current section

Files

Jump to
blossom lib blossom controllers verifications_codes.ex
Raw

lib/blossom/controllers/verifications_codes.ex

defmodule Blossom.Controllers.VerificationsCodes do
alias Blossom.Controllers.VerificationsCodes
def new(params, user, model) do
params
|> Map.put_new("code", Enum.random(100_000..999_999))
|> Map.put_new("expiration", System.os_time(:second) + 86400)
|> model.new(user)
end
def check_expiration(outcome) do
case outcome do
[code] ->
if code.expiration >= System.os_time(:second) do
{:ok, code}
else
{:error, :expired_code}
end
[] ->
{:error, :invalid_code}
end
end
def clean_code(outcome, code, model) do
case outcome do
{:ok, verification_code} ->
model.delete(verification_code.code, :system)
{:ok, verification_code}
{:error, _} = error ->
model.delete(code, :system)
error
end
end
def verify(params, model) do
case params do
%{"code" => code} ->
params
|> model.get(:system)
|> VerificationsCodes.check_expiration()
|> VerificationsCodes.clean_code(code, model)
_ ->
{:error, :missing_fields}
end
end
defmacro __using__(opts \\ []) do
quote do
use KilnCore.Controller, unquote(opts)
def new(params, user, _opts) do
VerificationsCodes.new(params, user, @model)
end
def verify(params, _user) do
VerificationsCodes.verify(params, @model)
end
end
end
end