Packages
pow_assent
0.2.2
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
0.1.0-rc.2
0.1.0-rc.1
0.1.0-rc.0
0.1.0-alpha.12
0.1.0-alpha.11
0.1.0-alpha.10
0.1.0-alpha.9
0.1.0-alpha.8
0.1.0-alpha.7
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
retired
0.1.0-alpha.1
0.1.0-alpha
Multi-provider support for Pow
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/pow_assent/phoenix/controllers/registration_controller.ex
defmodule PowAssent.Phoenix.RegistrationController do
@moduledoc false
use Pow.Extension.Phoenix.Controller.Base
alias Plug.Conn
alias PowAssent.Plug
alias PowEmailConfirmation.Phoenix.ControllerCallbacks
plug :load_params_from_session
plug :assign_create_path
@spec process_add_user_id(Conn.t(), map()) :: {:ok, map(), Conn.t()}
def process_add_user_id(conn, _params) do
{:ok, Pow.Plug.change_user(conn), conn}
end
@spec respond_add_user_id({:ok, map(), Conn.t()}) :: Conn.t()
def respond_add_user_id({:ok, changeset, conn}) do
conn
|> assign(:changeset, changeset)
|> render("add_user_id.html")
end
@spec process_create(Conn.t(), map()) :: {:ok, map(), Conn.t()} | {:error, map(), Conn.t()}
def process_create(%{private: %{pow_assent_params: user_params}} = conn, %{"provider" => provider, "user" => user_id_params}) do
Plug.create_user(conn, provider, user_params, user_id_params)
end
@spec respond_create({:ok, map(), Conn.t()} | {:error, map(), Conn.t()}) :: Conn.t()
def respond_create({:ok, user, conn}) do
conn
|> Conn.delete_session(:pow_assent_params)
|> email_confirmed_controller_callback(user)
|> case do
{:halt, conn} ->
conn
{:ok, _user, conn} ->
conn
|> put_flash(:info, messages(conn).user_has_been_created(conn))
|> redirect(to: routes(conn).after_registration_path(conn))
end
end
def respond_create({:error, {:bound_to_different_user, _changeset}, conn}) do
conn
|> put_flash(:error, messages(conn).account_already_bound_to_other_user(conn))
|> redirect(to: routes(conn).registration_path(conn, :new))
end
def respond_create({:error, {:invalid_user_id_field, changeset}, conn}),
do: respond_create({:error, changeset, conn})
def respond_create({:error, changeset, conn}) do
conn
|> assign(:changeset, changeset)
|> render("add_user_id.html")
end
defp email_confirmed_controller_callback(conn, user) do
ControllerCallbacks.before_respond(Pow.Phoenix.RegistrationController, :create, {:ok, user, conn}, [])
end
defp load_params_from_session(%{params: %{"provider" => provider}, private: %{plug_session: plug_session}} = conn, _opts) do
case plug_session do
%{"pow_assent_params" => %{^provider => params}} ->
Conn.put_private(conn, :pow_assent_params, params)
_ ->
conn
|> put_flash(:error, messages(conn).invalid_request(conn))
|> redirect(to: routes(conn).after_sign_out_path(conn))
|> halt()
end
end
defp assign_create_path(conn, _opts) do
path = routes(conn).path_for(conn, __MODULE__, :create, [conn.params["provider"]])
Conn.assign(conn, :action, path)
end
end