. * * @package LibreNMS * @link http://librenms.org * @copyright 2020 Tony Murray * @author Tony Murray */ namespace App\Http\Controllers\Install; use Exception; use LibreNMS\Interfaces\InstallerStep; use LibreNMS\Util\EnvHelper; class FinalizeController extends InstallationController implements InstallerStep { public function index() { if (!self::enabled($this->steps)) { return redirect()->route('install'); } $env = ''; $config_file = base_path('config.php'); $config = $this->getConfigFileContents(); $messages = []; $success = true; $config_message = file_exists($config_file) ? trans('install.finish.config_exists') : trans('install.finish.config_written'); try { $this->writeConfigFile($config, $config_file); } catch (Exception $e) { $messages[] = $e->getMessage(); $config_message = trans('install.finish.config_not_written'); $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(); } return view('install.finish', $this->formatData([ 'env' => $env, 'config' => $config, 'messages' => $messages, 'success' => $success, 'config_message' => $config_message, ])); } private function writeEnvFile() { return EnvHelper::setEnv([ 'NODE_ID' => uniqid(), 'DB_HOST' => session('db.host'), 'DB_PORT' => session('db.port'), 'DB_USERNAME' => session('db.username'), 'DB_PASSWORD' => session('db.password'), 'DB_DATABASE' => session('db.database'), 'DB_SOCKET' => session('db.socket'), ], ['INSTALL'], base_path('.env')); } private function writeConfigFile($config_contents, $config_file) { if (!file_exists($config_file)) { $conf = fopen($config_file, 'w'); if ($conf !== false) { if (fwrite($conf, "steps as $step => $controller) { if ($step !== 'finish' && !session("install.$step")) { return false; } } return true; } public function complete(): bool { return false; } public function icon(): string { return 'fa-check'; } }