Packages
pow
1.0.14
1.0.39
1.0.38
1.0.37
1.0.36
1.0.35
1.0.34
1.0.33
1.0.32
1.0.31
1.0.30
1.0.29
1.0.28
1.0.27
1.0.26
1.0.25
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.1.0-rc.1
0.1.0-alpha.8
0.1.0-alpha.7
retired
0.1.0-alpha.6
0.1.0-alpha.5
0.1.0-alpha.4
0.1.0-alpha.3
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha
Robust user authentication solution
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/extensions/email_confirmation/plug.ex
defmodule PowEmailConfirmation.Plug do
@moduledoc """
Plug helper methods.
"""
alias Plug.Conn
alias Pow.Plug
alias PowEmailConfirmation.Ecto.Context
@doc """
Check if the there is a pending email change for the current user.
"""
@spec pending_email_change?(Conn.t()) :: boolean()
def pending_email_change?(conn) do
config = Plug.fetch_config(conn)
conn
|> Plug.current_user()
|> Context.pending_email_change?(config)
end
@doc """
Check if the email for the current user is yet to be confirmed.
"""
@spec email_unconfirmed?(Conn.t()) :: boolean()
def email_unconfirmed?(conn) do
config = Plug.fetch_config(conn)
conn
|> Plug.current_user()
|> Context.current_email_unconfirmed?(config)
end
@doc """
Confirms the e-mail for the user found by the provided confirmation token.
If successful, and a session exists, the session will be regenerated.
"""
@spec confirm_email(Conn.t(), binary()) :: {:ok, map(), Conn.t()} | {:error, map(), Conn.t()}
def confirm_email(conn, token) do
config = Plug.fetch_config(conn)
token
|> Context.get_by_confirmation_token(config)
|> maybe_confirm_email(conn, config)
end
defp maybe_confirm_email(nil, conn, _config) do
{:error, nil, conn}
end
defp maybe_confirm_email(user, conn, config) do
user
|> Context.confirm_email(config)
|> case do
{:error, changeset} -> {:error, changeset, conn}
{:ok, user} -> {:ok, user, maybe_renew_conn(conn, user, config)}
end
end
defp maybe_renew_conn(conn, %{id: user_id} = user, config) do
case Plug.current_user(conn, config) do
%{id: ^user_id} -> Plug.get_plug(config).do_create(conn, user, config)
_any -> conn
end
end
end