From ab29541ca32f960572b62af488708d41832daf9f Mon Sep 17 00:00:00 2001 From: Alex Lion Date: Tue, 11 Nov 2025 13:02:44 +0100 Subject: [PATCH] feat: Add default admin user creation in seeds script --- lib/claper/release.ex | 3 ++- priv/repo/seeds.exs | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/claper/release.ex b/lib/claper/release.ex index 4401231..d230ce6 100644 --- a/lib/claper/release.ex +++ b/lib/claper/release.ex @@ -21,7 +21,8 @@ defmodule Claper.Release do for repo <- repos() do {:ok, _, _} = Ecto.Migrator.with_repo(repo, fn _repo -> - Code.eval_file("priv/repo/seeds.exs") + seed_script = Application.app_dir(@app, "priv/repo/seeds.exs") + Code.eval_file(seed_script) end) end end diff --git a/priv/repo/seeds.exs b/priv/repo/seeds.exs index bdb9ae7..fb29d07 100644 --- a/priv/repo/seeds.exs +++ b/priv/repo/seeds.exs @@ -42,3 +42,29 @@ if !Claper.Repo.get_by(Lti13.Jwks.Jwk, id: 1) do active: true }) end + +# Create default admin user if no users exist +alias Claper.Accounts +alias Claper.Accounts.User + +if Repo.aggregate(User, :count, :id) == 0 do + admin_role = Repo.get_by(Role, name: "admin") + + if admin_role do + {:ok, admin_user} = + Accounts.register_user(%{ + email: "admin@claper.co", + password: "claper", + confirmed_at: NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second) + }) + + Accounts.assign_role(admin_user, admin_role) + + IO.puts("Created default admin user:") + IO.puts(" Email: admin@claper.co") + IO.puts(" Password: claper") + IO.puts(" IMPORTANT: Please change this password after first login!") + else + IO.puts("Warning: Admin role not found, skipping default admin user creation") + end +end