add "setup" mode

This commit is contained in:
sloane 2025-03-25 13:07:23 -04:00
parent 69db46715f
commit d7ac169607
Signed by: sloanelybutsurely
SSH key fingerprint: SHA256:8SBnwhl+RY3oEyQxy1a9wByPzxWM0x+/Ejc+sIlY5qQ
4 changed files with 34 additions and 1 deletions

View file

@ -196,4 +196,11 @@ defmodule Core.Accounts do
{:error, :user, changeset, _} -> {:error, changeset}
end
end
@doc """
Returns `true` if any users exist.
"""
def has_registered_user? do
Repo.exists?(User.Query.has_users_query())
end
end

View file

@ -137,4 +137,19 @@ defmodule Core.Accounts.User do
add_error(changeset, :current_password, "is not valid")
end
end
defmodule Query do
@moduledoc false
import Ecto.Query
def base do
from _ in Schema.User, as: :users
end
def has_users_query(query \\ base()) do
query
|> limit(1)
|> select([users: _], true)
end
end
end

View file

@ -34,7 +34,7 @@ defmodule Web.Router do
end
scope "/", Web do
pipe_through [:browser]
pipe_through [:browser, :require_setup]
get "/", PageController, :home

View file

@ -214,6 +214,17 @@ defmodule Web.UserAuth do
end
end
def require_setup(conn, _opts) do
if Core.Accounts.has_registered_user?() do
conn
else
conn
|> maybe_store_return_to()
|> redirect(to: ~p"/admin/users/register")
|> halt()
end
end
defp put_token_in_session(conn, token) do
conn
|> put_session(:user_token, token)