diff --git a/.env.production b/.env.production index d3a1b17c5..96833c253 100644 --- a/.env.production +++ b/.env.production @@ -10,3 +10,7 @@ REDIS_PASSWORD= PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= + +ROOT_USERNAME= +ROOT_USER_EMAIL= +ROOT_USER_PASSWORD= diff --git a/database/seeders/ProductionSeeder.php b/database/seeders/ProductionSeeder.php index 9a301aa67..ecf840c1e 100644 --- a/database/seeders/ProductionSeeder.php +++ b/database/seeders/ProductionSeeder.php @@ -39,11 +39,15 @@ class ProductionSeeder extends Seeder ]); } } + if (InstanceSettings::find(0) == null) { InstanceSettings::create([ 'id' => 0, ]); } + + $this->call(RootUserSeeder::class); + if (GithubApp::find(0) == null) { GithubApp::create([ 'id' => 0, diff --git a/database/seeders/RootUserSeeder.php b/database/seeders/RootUserSeeder.php new file mode 100644 index 000000000..e3968a1c9 --- /dev/null +++ b/database/seeders/RootUserSeeder.php @@ -0,0 +1,74 @@ +exists()) { + echo "\n INFO Root user already exists. Skipping creation.\n\n"; + + return; + } + + if (! env('ROOT_USER_EMAIL') || ! env('ROOT_USER_PASSWORD')) { + return; + } + + $validator = Validator::make([ + 'email' => env('ROOT_USER_EMAIL'), + 'username' => env('ROOT_USERNAME', 'Root User'), + 'password' => env('ROOT_USER_PASSWORD'), + ], [ + 'email' => ['required', 'email:rfc,dns', 'max:255'], + 'username' => ['required', 'string', 'min:3', 'max:255', 'regex:/^[\w\s-]+$/'], + 'password' => ['required', 'string', 'min:8', Password::min(8)->mixedCase()->letters()->numbers()->symbols()->uncompromised()], + ]); + + if ($validator->fails()) { + echo "\n ERROR Invalid Root User Environment Variables\n"; + foreach ($validator->errors()->all() as $error) { + echo " → {$error}\n"; + } + echo "\n"; + + return; + } + + try { + User::create([ + 'id' => 0, + 'name' => env('ROOT_USERNAME', 'Root User'), + 'email' => env('ROOT_USER_EMAIL'), + 'password' => Hash::make(env('ROOT_USER_PASSWORD')), + ]); + echo "\n SUCCESS Root user created successfully.\n\n"; + } catch (\Exception $e) { + echo "\n ERROR Failed to create root user: {$e->getMessage()}\n\n"; + + return; + } + + try { + InstanceSettings::updateOrCreate( + ['id' => 0], + ['is_registration_enabled' => false] + ); + echo "\n SUCCESS Registration has been disabled successfully.\n\n"; + } catch (\Exception $e) { + echo "\n ERROR Failed to update instance settings: {$e->getMessage()}\n\n"; + } + } catch (\Exception $e) { + echo "\n ERROR An unexpected error occurred: {$e->getMessage()}\n\n"; + } + } +}