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
Current section
Files
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