From 76fa8f35b1b64611e701292f5a8a799b98ec20d1 Mon Sep 17 00:00:00 2001 From: DevSoftTech Server Date: Sat, 28 Feb 2026 23:51:20 +0530 Subject: [PATCH] Add setup action to create or update admin login user --- app/Config/Routes.php | 1 + app/Controllers/Setup.php | 79 ++++++++++++++++++++++++++++++++++++ app/Views/setup/db_setup.php | 11 +++++ 3 files changed, 91 insertions(+) diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 1013b6b..2d8327e 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -227,6 +227,7 @@ $routes->get('setup/db-tools', 'Setup::dbTools'); $routes->post('setup/db-tools/generate', 'Setup::generateMigrations'); $routes->post('setup/db-tools/export-master-schema', 'Setup::exportMasterSchema'); $routes->post('setup/db-tools/schema-sync', 'Setup::schemaSync'); +$routes->post('setup/db-tools/ensure-admin', 'Setup::ensureAdminLogin'); $routes->post('setup/db-tools/complete', 'Setup::complete'); diff --git a/app/Controllers/Setup.php b/app/Controllers/Setup.php index 5d09624..2e60b61 100644 --- a/app/Controllers/Setup.php +++ b/app/Controllers/Setup.php @@ -3,6 +3,8 @@ namespace App\Controllers; use App\Controllers\BaseController; +use CodeIgniter\Shield\Entities\User; +use CodeIgniter\Shield\Models\UserModel; class Setup extends BaseController { @@ -238,6 +240,83 @@ class Setup extends BaseController return $this->response->setBody('Setup locked successfully. You can now remove setup routes/page if required.'); } + public function ensureAdminLogin() + { + if ($deny = $this->ensureSetupAccess()) { + return $deny; + } + + $username = trim((string) env('setup.admin.username', 'admin')); + $email = trim((string) env('setup.admin.email', 'admin@example.com')); + $password = (string) env('setup.admin.password', 'Admin@12345'); + $group = strtolower(trim((string) env('setup.admin.group', 'admin'))); + + if ($username === '') { + $username = 'admin'; + } + if ($email === '' || filter_var($email, FILTER_VALIDATE_EMAIL) === false) { + $email = 'admin@example.com'; + } + if (mb_strlen($password) < 8) { + $password = 'Admin@12345'; + } + + try { + $userModel = model(UserModel::class); + $user = $userModel->where('username', $username)->first(); + + if ($user === null) { + $tables = config('Auth')->tables; + $identitiesTable = (string) ($tables['identities'] ?? 'auth_identities'); + $idRow = $this->db->table($identitiesTable) + ->select('user_id') + ->where('type', 'email_password') + ->where('secret', $email) + ->get(1) + ->getRowArray(); + + if (!empty($idRow['user_id'])) { + $user = $userModel->find((int) $idRow['user_id']); + } + } + + $action = 'updated'; + if ($user === null) { + $newUser = new User(); + $newUser->username = $username; + $newUser->email = $email; + $newUser->password = $password; + $newUser->active = 1; + $userModel->save($newUser); + + $insertId = (int) $userModel->getInsertID(); + $user = $insertId > 0 ? $userModel->find($insertId) : null; + $action = 'created'; + } else { + $user->username = $username; + $user->email = $email; + $user->password = $password; + $user->active = 1; + $userModel->save($user); + $user = $userModel->find((int) ($user->id ?? 0)); + } + + if ($user !== null && method_exists($user, 'addGroup')) { + $groupConfig = setting('AuthGroups.groups'); + if (!is_array($groupConfig) || !isset($groupConfig[$group])) { + $group = 'admin'; + } + $user->addGroup($group); + } + + session()->setFlashdata('setup_msg', 'Admin login ' . $action . ': username=' . $username . ', email=' . $email . ', group=' . $group . '.'); + } catch (\Throwable $e) { + session()->setFlashdata('setup_msg', 'Admin login setup failed: ' . $e->getMessage()); + } + + return redirect()->to($this->dbToolsUrlWithKey()); + } + /** * @return array */ diff --git a/app/Views/setup/db_setup.php b/app/Views/setup/db_setup.php index b92b932..42398aa 100644 --- a/app/Views/setup/db_setup.php +++ b/app/Views/setup/db_setup.php @@ -109,6 +109,17 @@
+
+ + + + + + Uses .env keys: setup.admin.username, setup.admin.email, setup.admin.password, setup.admin.group. +
+ +
+