logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

ensure_user_token_assigns_plug.ex (1069B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.Plugs.EnsureUserTokenAssignsPlug do
  5. import Plug.Conn
  6. alias Pleroma.Helpers.AuthHelper
  7. alias Pleroma.User
  8. alias Pleroma.Web.OAuth.Token
  9. @moduledoc "Ensures presence and consistency of :user and :token assigns."
  10. def init(opts) do
  11. opts
  12. end
  13. def call(%{assigns: %{user: %User{id: user_id}} = assigns} = conn, _) do
  14. with %Token{user_id: ^user_id} <- assigns[:token] do
  15. conn
  16. else
  17. %Token{} ->
  18. # A safety net for abnormal (unexpected) scenario: :token belongs to another user
  19. AuthHelper.drop_auth_info(conn)
  20. _ ->
  21. assign(conn, :token, nil)
  22. end
  23. end
  24. # App-bound token case (obtained with client_id and client_secret)
  25. def call(%{assigns: %{token: %Token{user_id: nil}}} = conn, _) do
  26. assign(conn, :user, nil)
  27. end
  28. def call(conn, _) do
  29. conn
  30. |> assign(:user, nil)
  31. |> assign(:token, nil)
  32. end
  33. end