Packages
pow
1.0.12
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/invitation/plug.ex
defmodule PowInvitation.Plug do
@moduledoc """
Plug helper methods.
"""
alias Plug.Conn
alias Pow.{Config, Plug}
alias PowInvitation.Ecto.Context, as: InvitationContext
alias PowInvitation.Ecto.Schema
@doc """
Creates a new invited user by the current user in the connection.
"""
@spec create_user(Conn.t(), map()) :: {:ok, map(), Conn.t()} | {:error, map(), Conn.t()}
def create_user(conn, params) do
config = Plug.fetch_config(conn)
conn
|> Plug.current_user()
|> InvitationContext.create(params, config)
|> case do
{:ok, user} -> {:ok, user, conn}
{:error, changeset} -> {:error, changeset, conn}
end
end
@doc """
Creates a changeset from the user fetched in the connection.
"""
@spec change_user(Conn.t(), map()) :: map()
def change_user(conn, params \\ %{}) do
conn
|> invited_user()
|> Kernel.||(user_struct(conn))
|> Schema.accept_invitation_changeset(params)
end
defp user_struct(conn) do
conn
|> Plug.fetch_config()
|> Config.user!()
|> struct()
end
@doc """
Updates current user in the connection with the params.
If successful the session will be regenerated.
"""
@spec update_user(Conn.t(), map()) :: {:ok, map(), Conn.t()} | {:error, map(), Conn.t()}
def update_user(conn, params) do
config = Plug.fetch_config(conn)
conn
|> invited_user()
|> InvitationContext.update(params, config)
|> case do
{:ok, user} -> {:ok, user, Plug.get_plug(config).do_create(conn, user, config)}
{:error, changeset} -> {:error, changeset, conn}
end
end
defp invited_user(conn), do: conn.assigns[:invited_user]
@doc """
Fetches invited user by the invitation token.
"""
@spec invited_user_from_token(Conn.t(), binary()) :: map() | nil
def invited_user_from_token(conn, token) do
config = Plug.fetch_config(conn)
InvitationContext.get_by_invitation_token(token, config)
end
@doc """
Assigns a `:invited_user` key with the user in the connection.
"""
@spec assign_invited_user(Conn.t(), map()) :: Conn.t()
def assign_invited_user(conn, user) do
Conn.assign(conn, :invited_user, user)
end
end