version chapril de mobilizon
https://mobilizon.chapril.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.4 KiB
45 lines
1.4 KiB
defmodule Mobilizon.Service.Users.Activation do |
|
@moduledoc false |
|
|
|
alias Mobilizon.{Mailer, Users} |
|
alias Mobilizon.Users.User |
|
alias Mobilizon.Email.User, as: UserEmail |
|
alias Mobilizon.Service.Users.Tools |
|
|
|
require Logger |
|
|
|
@doc false |
|
def check_confirmation_token(token) when is_binary(token) do |
|
with %User{} = user <- Users.get_user_by_activation_token(token), |
|
{:ok, %User{} = user} <- |
|
Users.update_user(user, %{ |
|
"confirmed_at" => DateTime.utc_now() |> DateTime.truncate(:second), |
|
"confirmation_sent_at" => nil, |
|
"confirmation_token" => nil |
|
}) do |
|
Logger.info("User #{user.email} has been confirmed") |
|
{:ok, user} |
|
else |
|
_err -> |
|
{:error, :invalid_token} |
|
end |
|
end |
|
|
|
def resend_confirmation_email(%User{} = user, locale \\ "en") do |
|
with :ok <- Tools.we_can_send_email(user, :confirmation_sent_at), |
|
{:ok, user} <- |
|
Users.update_user(user, %{ |
|
"confirmation_sent_at" => DateTime.utc_now() |> DateTime.truncate(:second) |
|
}) do |
|
send_confirmation_email(user, locale) |
|
Logger.info("Sent confirmation email again to #{user.email}") |
|
{:ok, user.email} |
|
end |
|
end |
|
|
|
def send_confirmation_email(%User{} = user, locale \\ "en") do |
|
user |
|
|> UserEmail.confirmation_email(locale) |
|
|> Mailer.deliver_later() |
|
end |
|
end
|
|
|