mirror of
https://github.com/plausible/analytics.git
synced 2024-11-28 13:02:53 +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
|