From 2c82e919f6f62215158e7400e5be845522653a55 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Sun, 21 Jun 2020 13:51:47 -0500 Subject: [PATCH] refined finish --- .../Install/FinalizeController.php | 62 ++++++++++++------- .../Install/InstallationController.php | 7 ++- resources/lang/en/install.php | 4 ++ resources/views/install/finish.blade.php | 35 ++++++++--- 4 files changed, 76 insertions(+), 32 deletions(-) diff --git a/app/Http/Controllers/Install/FinalizeController.php b/app/Http/Controllers/Install/FinalizeController.php index 1599273d76..0ca1c8eadd 100644 --- a/app/Http/Controllers/Install/FinalizeController.php +++ b/app/Http/Controllers/Install/FinalizeController.php @@ -26,6 +26,7 @@ namespace App\Http\Controllers\Install; use Exception; +use LibreNMS\Exceptions\FileWriteFailedException; use LibreNMS\Interfaces\InstallerStep; use LibreNMS\Util\EnvHelper; @@ -40,58 +41,68 @@ class FinalizeController extends InstallationController implements InstallerStep } $env = ''; + $config = ''; $config_file = base_path('config.php'); - $config = $this->getConfigFileContents(); $messages = []; - $success = true; + $success = false; $config_message = file_exists($config_file) ? trans('install.finish.config_exists') : trans('install.finish.config_written'); + $env_message = trans('install.finish.env_written'); try { $this->writeConfigFile(); } catch (Exception $e) { - $messages[] = $e->getMessage(); + $config = $this->getConfigFileContents(); $config_message = trans('install.finish.config_not_written'); + } + + try { + $this->writeEnvFile(); $success = true; - } - - // write env last only if everything else succeeded - if ($success) { - try { - $env = $this->writeEnvFile(); - } catch (Exception $e) { - $messages[] = $e->getMessage(); - $success = false; - } - } - - if ($success) { session()->flush(); + } catch (Exception $e) { + $env = $this->getEnvFileContents(); + $messages[] = $e->getMessage(); + $env_message = trans('install.finish.env_not_written'); } return view('install.finish', $this->formatData([ + 'success' => $success, 'env' => $env, 'config' => $config, 'messages' => $messages, - 'success' => $success, + 'env_message' => $env_message, 'config_message' => $config_message, ])); } private function writeEnvFile() + { + return EnvHelper::writeEnv( + $this->envVars(), + ['INSTALL'], + base_path('.env') + ); + } + + private function envVars() { $this->configureDatabase(); $connection = config('database.default', $this->connection); - return EnvHelper::writeEnv([ + $port = config("database.connections.$connection.port"); + return [ 'NODE_ID' => uniqid(), 'DB_HOST' => config("database.connections.$connection.host"), - 'DB_PORT' => config("database.connections.$connection.port"), + 'DB_PORT' => $port == 3306 ? null : $port, // don't set default port 'DB_USERNAME' => config("database.connections.$connection.username"), 'DB_PASSWORD' => config("database.connections.$connection.password"), 'DB_DATABASE' => config("database.connections.$connection.database"), 'DB_SOCKET' => config("database.connections.$connection.unix_socket"), - ], ['INSTALL'], base_path('.env')); + ]; } + /** + * @throws \LibreNMS\Exceptions\FileWriteFailedException + */ private function writeConfigFile() { $config_file = base_path('config.php'); @@ -100,7 +111,7 @@ class FinalizeController extends InstallationController implements InstallerStep } if (!copy(base_path('config.php.default'), $config_file)) { - throw new Exception("We couldn't create the config.php file, please create this manually before continuing by copying the below into a config.php in the root directory of your install (typically /opt/librenms/)"); + throw new FileWriteFailedException($config_file); } } @@ -109,6 +120,15 @@ class FinalizeController extends InstallationController implements InstallerStep return file_get_contents(base_path('config.php.default')); } + private function getEnvFileContents() + { + return EnvHelper::setEnv( + file_get_contents(base_path('.env')), + $this->envVars(), + ['INSTALL'] + ); + } + public function enabled(): bool { foreach ($this->steps as $step => $controller) { diff --git a/app/Http/Controllers/Install/InstallationController.php b/app/Http/Controllers/Install/InstallationController.php index 310bace525..8075519c83 100644 --- a/app/Http/Controllers/Install/InstallationController.php +++ b/app/Http/Controllers/Install/InstallationController.php @@ -49,6 +49,7 @@ class InstallationController extends Controller public function redirectToIncomplete() { foreach ($this->filterActiveSteps() as $step => $controller) { + /** @var InstallerStep $controller */ if (!$controller->complete()) { return redirect()->route("install.$step"); } @@ -77,12 +78,12 @@ class InstallationController extends Controller $this->filterActiveSteps(); $this->configureDatabase(); - foreach ($this->stepStatus() as $step => $complete) { + foreach ($this->stepStatus() as $step => $status) { if ($step == $this->step) { return true; } - if (!$complete) { + if (!$status['complete']) { return false; } } @@ -121,7 +122,7 @@ class InstallationController extends Controller $db['password'] ?? null, $db['database'] ?? 'librenms', $db['port'] ?? 3306, - $db['socket'] ?? null, + $db['socket'] ?? null ); config(['database.default', $this->connection]); } diff --git a/resources/lang/en/install.php b/resources/lang/en/install.php index 0786e007d7..410a66b2c6 100644 --- a/resources/lang/en/install.php +++ b/resources/lang/en/install.php @@ -50,8 +50,11 @@ return [ 'finish' => [ 'title' => 'Finish Install', 'env_written' => '.env file written', + 'env_not_written' => 'Could not write .env file', + 'env_manual' => 'Manually update :file with the following content', 'config_exists' => 'config.php file exists', 'config_written' => 'config.php file written', + 'config_not_required' => 'This file is not required. Here is the default.', 'config_not_written' => 'Could not write config.php', 'not_finished' => 'You have not quite finished yet!', 'validate' => 'First, you need to :validate and fix any issues.', @@ -59,5 +62,6 @@ return [ 'thanks' => 'Thank you for setting up LibreNMS.', 'statistics' => 'It would be great if you would consider contributing to our statistics, you can do this on the :about and check the box under Statistics.', 'statistics_link' => 'About LibreNMS Page', + 'retry' => 'Retry' ] ]; diff --git a/resources/views/install/finish.blade.php b/resources/views/install/finish.blade.php index 3984e1ddf6..b4dae7506b 100644 --- a/resources/views/install/finish.blade.php +++ b/resources/views/install/finish.blade.php @@ -2,23 +2,41 @@ @section('content')
- -
-
{{ $env }}
+
+ @if($success) + + @else + + @endif + {{ $env_message }} + @if($env)@endif($env)
+ @if($env) +
+ + + @lang('install.finish.env_manual', ['file' => base_path('.env')]) + +
{{ $env }}
+
+ @endif
+ @if($config)
-
{{ $config }}
+ + @lang('install.finish.config_not_required') + +
{{ $config }}
+ @endif
+@if($success)
@@ -35,4 +53,5 @@
+@endif @endsection