2020-01-26 20:36:50 +00:00
|
|
|
defmodule Mobilizon.Web.Auth.Context do
|
2019-01-03 13:59:59 +00:00
|
|
|
@moduledoc """
|
2020-01-26 20:36:50 +00:00
|
|
|
Guardian context for Mobilizon.Web
|
2019-01-03 13:59:59 +00:00
|
|
|
"""
|
2018-11-06 09:30:27 +00:00
|
|
|
@behaviour Plug
|
|
|
|
|
|
|
|
import Plug.Conn
|
2020-01-23 20:59:50 +00:00
|
|
|
|
2021-06-27 11:15:24 +00:00
|
|
|
alias Mobilizon.Service.ErrorReporting.Sentry, as: SentryAdapter
|
2019-03-06 17:45:26 +00:00
|
|
|
alias Mobilizon.Users.User
|
2018-11-06 09:30:27 +00:00
|
|
|
|
|
|
|
def init(opts) do
|
|
|
|
opts
|
|
|
|
end
|
|
|
|
|
2020-08-27 13:42:09 +00:00
|
|
|
def call(%{assigns: %{ip: _}} = conn, _opts), do: conn
|
|
|
|
|
|
|
|
def call(conn, _opts) do
|
2020-08-28 07:23:49 +00:00
|
|
|
set_user_information_in_context(conn)
|
2020-08-27 13:42:09 +00:00
|
|
|
end
|
|
|
|
|
2020-08-28 07:23:49 +00:00
|
|
|
def set_user_information_in_context(conn) do
|
2020-08-27 13:42:09 +00:00
|
|
|
context = %{ip: conn.remote_ip |> :inet.ntoa() |> to_string()}
|
2019-03-14 17:31:14 +00:00
|
|
|
|
|
|
|
context =
|
|
|
|
case Guardian.Plug.current_resource(conn) do
|
2021-04-20 13:07:57 +00:00
|
|
|
%User{id: user_id, email: user_email} = user ->
|
2021-06-27 11:15:24 +00:00
|
|
|
if SentryAdapter.enabled?() do
|
|
|
|
Sentry.Context.set_user_context(%{id: user_id, name: user_email})
|
|
|
|
end
|
|
|
|
|
2020-01-23 20:59:50 +00:00
|
|
|
Map.put(context, :current_user, user)
|
2019-03-14 17:31:14 +00:00
|
|
|
|
|
|
|
nil ->
|
|
|
|
context
|
|
|
|
end
|
|
|
|
|
2020-08-28 07:23:49 +00:00
|
|
|
context =
|
|
|
|
case get_req_header(conn, "user-agent") do
|
|
|
|
[user_agent | _] ->
|
|
|
|
Map.put(context, :user_agent, user_agent)
|
|
|
|
|
|
|
|
_ ->
|
|
|
|
context
|
|
|
|
end
|
|
|
|
|
2019-03-14 17:31:14 +00:00
|
|
|
put_private(conn, :absinthe, %{context: context})
|
2018-11-06 09:30:27 +00:00
|
|
|
end
|
|
|
|
end
|