aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/endpoint.ex2
-rw-r--r--lib/pleroma/web/plugs/confirm_user_plug.ex30
2 files changed, 32 insertions, 0 deletions
diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex
index f26542e88..705035845 100644
--- a/lib/pleroma/web/endpoint.ex
+++ b/lib/pleroma/web/endpoint.ex
@@ -169,6 +169,8 @@ defmodule Pleroma.Web.Endpoint do
plug(MetricsExporterCaller)
+ plug(Pleroma.Web.Plugs.ConfirmUserPlug)
+
plug(Pleroma.Web.Router)
@doc """
diff --git a/lib/pleroma/web/plugs/confirm_user_plug.ex b/lib/pleroma/web/plugs/confirm_user_plug.ex
new file mode 100644
index 000000000..218068de0
--- /dev/null
+++ b/lib/pleroma/web/plugs/confirm_user_plug.ex
@@ -0,0 +1,30 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.Plugs.ConfirmUserPlug do
+ @moduledoc """
+ If a user has ever been granted an OAuth token, they are eligible to become
+ confirmed, regardless of the account_activation_required setting. This plug
+ will confirm a user if found.
+ """
+
+ alias Pleroma.User
+ import Plug.Conn
+
+ def init(opts), do: opts
+
+ def call(%{assigns: %{user: %User{confirmation_pending: true} = user}} = conn, _opts) do
+ with {:ok, user} <- confirm_user(user) do
+ assign(conn, :user, user)
+ end
+ end
+
+ def call(conn, _opts), do: conn
+
+ defp confirm_user(%User{} = user) do
+ user
+ |> User.confirmation_changeset(need_confirmation: false)
+ |> User.update_and_set_cache()
+ end
+end