analytics/lib/plausible_web/plugs/last_seen_plug.ex
2020-03-31 15:38:42 +03:00

36 lines
772 B
Elixir

defmodule PlausibleWeb.LastSeenPlug do
import Plug.Conn
use Plausible.Repo
@one_hour 60 * 60
def init(opts) do
opts
end
def call(conn, _opts) do
last_seen = get_session(conn, :last_seen)
user = conn.assigns[:current_user]
cond do
user && last_seen && last_seen < (unix_now() - @one_hour) ->
persist_last_seen(user)
put_session(conn, :last_seen, unix_now())
user && !last_seen ->
put_session(conn, :last_seen, unix_now())
true ->
conn
end
end
defp persist_last_seen(user) do
q = from(u in Plausible.Auth.User, where: u.id == ^user.id)
Repo.update_all(q, [set: [last_seen: DateTime.utc_now()]])
end
defp unix_now do
DateTime.utc_now() |> DateTime.to_unix
end
end