41 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule Pleroma.Web.Plugs.EnsureUserTokenAssignsPlug do
 | |
|   import Plug.Conn
 | |
| 
 | |
|   alias Pleroma.Helpers.AuthHelper
 | |
|   alias Pleroma.User
 | |
|   alias Pleroma.Web.OAuth.Token
 | |
| 
 | |
|   @moduledoc "Ensures presence and consistency of :user and :token assigns."
 | |
| 
 | |
|   def init(opts) do
 | |
|     opts
 | |
|   end
 | |
| 
 | |
|   def call(%{assigns: %{user: %User{id: user_id}} = assigns} = conn, _) do
 | |
|     with %Token{user_id: ^user_id} <- assigns[:token] do
 | |
|       conn
 | |
|     else
 | |
|       %Token{} ->
 | |
|         # A safety net for abnormal (unexpected) scenario: :token belongs to another user
 | |
|         AuthHelper.drop_auth_info(conn)
 | |
| 
 | |
|       _ ->
 | |
|         assign(conn, :token, nil)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   # App-bound token case (obtained with client_id and client_secret)
 | |
|   def call(%{assigns: %{token: %Token{user_id: nil}}} = conn, _) do
 | |
|     assign(conn, :user, nil)
 | |
|   end
 | |
| 
 | |
|   def call(conn, _) do
 | |
|     conn
 | |
|     |> assign(:user, nil)
 | |
|     |> assign(:token, nil)
 | |
|   end
 | |
| end
 | 
