From 41bf4790afce3b01491b10abc3def8cf2675f9e4 Mon Sep 17 00:00:00 2001 From: "byte[]" Date: Sun, 17 Nov 2019 13:29:07 -0500 Subject: [PATCH] add attribution plug --- .../plugs/user_attribution_plug.ex | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 lib/philomena_web/plugs/user_attribution_plug.ex diff --git a/lib/philomena_web/plugs/user_attribution_plug.ex b/lib/philomena_web/plugs/user_attribution_plug.ex new file mode 100644 index 00000000..a1ab0364 --- /dev/null +++ b/lib/philomena_web/plugs/user_attribution_plug.ex @@ -0,0 +1,49 @@ +defmodule PhilomenaWeb.UserAttributionPlug do + @moduledoc """ + This plug stores information about the current session for use in + model attribution. + + ## Example + + plug PhilomenaWeb.UserAttributionPlug + """ + + alias Plug.Conn + + @doc false + @spec init(any()) :: any() + def init(opts), do: opts + + @doc false + @spec call(Plug.Conn.t(), any()) :: Plug.Conn.t() + def call(conn, _opts) do + conn = Conn.fetch_cookies(conn) + attributes = + %{ + ip: conn.remote_ip, + fingerprint: conn.cookies["_ses"], + referrer: conn.assigns.referrer, + user_agent: user_agent(conn), + user_id: user_id(conn) + } + + conn + |> Conn.assign(:attributes, attributes) + end + + defp user_agent(conn) do + case Conn.get_req_header(conn, "user-agent") do + [ua] -> ua + _ -> nil + end + end + + defp user_id(conn) do + user = Pow.Plug.current_user(conn) + + case user do + %{id: id} -> id + _ -> nil + end + end +end \ No newline at end of file