Packages

phoenix_kit

1.7.69
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib modules newsletters web unsubscribe_controller.ex
Raw

lib/modules/newsletters/web/unsubscribe_controller.ex

defmodule PhoenixKit.Modules.Newsletters.Web.UnsubscribeController do
use PhoenixKitWeb, :controller
alias PhoenixKit.Modules.Newsletters
alias PhoenixKit.Utils.Routes
plug :put_view, html: PhoenixKit.Modules.Newsletters.Web.UnsubscribeHTML
# GET /newsletters/unsubscribe?token=...
# Shows unsubscribe options page (per-list + global)
def unsubscribe(conn, %{"token" => token}) do
case Phoenix.Token.verify(PhoenixKitWeb.Endpoint, "unsubscribe", token, max_age: 604_800) do
{:ok, %{user_uuid: user_uuid, list_uuid: list_uuid}} ->
list = Newsletters.get_list(list_uuid)
all_lists = Newsletters.list_user_subscriptions(user_uuid)
conn
|> assign(:token, token)
|> assign(:list, list)
|> assign(:all_lists, all_lists)
|> assign(:user_uuid, user_uuid)
|> render(:unsubscribe)
{:error, _reason} ->
conn
|> put_flash(:error, "Invalid or expired unsubscribe link.")
|> redirect(to: Routes.path("/"))
end
end
# POST /newsletters/unsubscribe — process the choice
def process_unsubscribe(conn, %{"token" => token, "scope" => "list"}) do
case Phoenix.Token.verify(PhoenixKitWeb.Endpoint, "unsubscribe", token, max_age: 604_800) do
{:ok, %{user_uuid: user_uuid, list_uuid: list_uuid}} ->
Newsletters.unsubscribe_user(list_uuid, user_uuid)
conn
|> put_flash(:info, "You have been unsubscribed from this list.")
|> redirect(to: Routes.path("/"))
_ ->
conn
|> put_flash(:error, "Invalid link.")
|> redirect(to: Routes.path("/"))
end
end
def process_unsubscribe(conn, %{"token" => token, "scope" => "all"}) do
case Phoenix.Token.verify(PhoenixKitWeb.Endpoint, "unsubscribe", token, max_age: 604_800) do
{:ok, %{user_uuid: user_uuid}} ->
Newsletters.unsubscribe_from_all(user_uuid)
conn
|> put_flash(:info, "You have been unsubscribed from all lists.")
|> redirect(to: Routes.path("/"))
_ ->
conn
|> put_flash(:error, "Invalid link.")
|> redirect(to: Routes.path("/"))
end
end
end