mirror of
https://github.com/plausible/analytics.git
synced 2024-12-01 03:48:35 +03:00
36 lines
772 B
Elixir
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
|