1234567891011121314151617181920212223242526272829303132333435363738 |
- 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
|