diff --git a/lib/plausible/auth/user.ex b/lib/plausible/auth/user.ex index 2bdc0e7ac0..24ee131182 100644 --- a/lib/plausible/auth/user.ex +++ b/lib/plausible/auth/user.ex @@ -40,6 +40,9 @@ defmodule Plausible.Auth.User do field :totp_token, :string field :totp_last_used_at, :naive_datetime + # for context perseverance across sessions + field :last_team_identifier, Ecto.UUID + on_ee do # Fields for SSO field :type, Ecto.Enum, values: [:standard, :sso] diff --git a/lib/plausible/users.ex b/lib/plausible/users.ex index 6c72b73b38..cb3ddc8234 100644 --- a/lib/plausible/users.ex +++ b/lib/plausible/users.ex @@ -41,6 +41,13 @@ defmodule Plausible.Users do :ok end + @spec remember_last_team(Auth.User.t(), String.t() | nil) :: :ok + def remember_last_team(%Auth.User{id: user_id}, team_identifier) do + q = from(u in Auth.User, where: u.id == ^user_id) + Repo.update_all(q, set: [last_team_identifier: team_identifier]) + :ok + end + @spec has_email_code?(Auth.User.t()) :: boolean() def has_email_code?(user) do Auth.EmailVerification.any?(user) diff --git a/lib/plausible_web/controllers/auth_controller.ex b/lib/plausible_web/controllers/auth_controller.ex index 38d7c31337..c271c94663 100644 --- a/lib/plausible_web/controllers/auth_controller.ex +++ b/lib/plausible_web/controllers/auth_controller.ex @@ -93,7 +93,16 @@ defmodule PlausibleWeb.AuthController do } end) - render(conn, "select_team.html", teams_selection: teams) + case teams do + [] -> + redirect(conn, to: Routes.site_path(conn, :index)) + + [%{identifier: sole_team_identifier}] -> + redirect(conn, to: Routes.site_path(conn, :index, __team: sole_team_identifier)) + + [_ | _] -> + render(conn, "select_team.html", teams_selection: teams) + end end def activate_form(conn, params) do diff --git a/lib/plausible_web/live/sites.ex b/lib/plausible_web/live/sites.ex index 8a4e7ee8ad..1fb4dad8b0 100644 --- a/lib/plausible_web/live/sites.ex +++ b/lib/plausible_web/live/sites.ex @@ -22,7 +22,7 @@ defmodule PlausibleWeb.Live.Sites do :team_invitations, Teams.Invitations.all(socket.assigns.current_user) ) - |> assign(:filter_text, params["filter_text"] || "") + |> assign(:filter_text, String.trim(params["filter_text"] || "")) {:ok, socket} end @@ -88,13 +88,23 @@ defmodule PlausibleWeb.Live.Sites do -

+

No sites found. Please search for something else.

+

+ You currently have no personal sites. Are you looking for your team’s sites? + <.styled_link href={Routes.auth_path(@socket, :select_team)}> + Go to your team → + +

+