From c75010790629be13c4a5c7557b140fa12ecd5ab4 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Thu, 11 Jun 2020 01:06:16 -0500 Subject: [PATCH] Refactor to a simpler style --- .../Controllers/Install/ChecksController.php | 8 +-- .../Install/DatabaseController.php | 8 +-- .../Install/DatabaseMigrationController.php | 13 ++-- .../Install/FinalizeController.php | 12 ++-- .../Install/InstallationController.php | 46 +++++++++++++++ .../Install/MakeUserController.php | 20 +++---- app/Http/Controllers/Install/UsesDatabase.php | 47 --------------- .../ViewComposers/InstallMenuComposer.php | 59 ------------------- app/Providers/ComposerServiceProvider.php | 1 - resources/lang/en/install.php | 6 ++ .../views/components/install_menu.blade.php | 13 ---- resources/views/install/finish.blade.php | 20 ++++++- ...e-database.blade.php => migrate.blade.php} | 0 resources/views/layouts/install.blade.php | 14 ++++- routes/web.php | 12 ++-- 15 files changed, 120 insertions(+), 159 deletions(-) delete mode 100644 app/Http/Controllers/Install/UsesDatabase.php delete mode 100644 app/Http/ViewComposers/InstallMenuComposer.php delete mode 100644 resources/views/components/install_menu.blade.php rename resources/views/install/{migrate-database.blade.php => migrate.blade.php} (100%) diff --git a/app/Http/Controllers/Install/ChecksController.php b/app/Http/Controllers/Install/ChecksController.php index 99472cb6c1..77a03124f9 100644 --- a/app/Http/Controllers/Install/ChecksController.php +++ b/app/Http/Controllers/Install/ChecksController.php @@ -27,9 +27,9 @@ namespace App\Http\Controllers\Install; use LibreNMS\Validations\Php; -class ChecksController extends \App\Http\Controllers\Controller +class ChecksController extends InstallationController { - public function __invoke() + public function index() { $results = []; $php_ok = version_compare(PHP_VERSION, Php::PHP_MIN_VERSION, '>='); @@ -43,12 +43,12 @@ class ChecksController extends \App\Http\Controllers\Controller session(['install.checks' => true]); } - return view('install.checks', [ + return view('install.checks', $this->formatData([ 'php_version' => PHP_VERSION, 'php_required' => Php::PHP_MIN_VERSION, 'php_ok' => $php_ok, 'modules' => $results - ]); + ])); } private function checkPhpModule(&$results, $module) diff --git a/app/Http/Controllers/Install/DatabaseController.php b/app/Http/Controllers/Install/DatabaseController.php index 61cc83707b..dd21acf213 100644 --- a/app/Http/Controllers/Install/DatabaseController.php +++ b/app/Http/Controllers/Install/DatabaseController.php @@ -25,22 +25,20 @@ namespace App\Http\Controllers\Install; -use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Arr; use LibreNMS\DB\Eloquent; -class DatabaseController extends Controller +class DatabaseController extends InstallationController { const KEYS = ['host', 'username', 'password', 'database', 'port', 'unix_socket']; - public function __invoke(Request $request) + public function index(Request $request) { $data = Arr::only(session()->get('db') ?: [], self::KEYS); - $data['stage'] = 2; $data['status'] = session('install.database'); - return view('install.database', $data); + return view('install.database', $this->formatData($data)); } public function test(Request $request) diff --git a/app/Http/Controllers/Install/DatabaseMigrationController.php b/app/Http/Controllers/Install/DatabaseMigrationController.php index 416064ba05..abecfa07c8 100644 --- a/app/Http/Controllers/Install/DatabaseMigrationController.php +++ b/app/Http/Controllers/Install/DatabaseMigrationController.php @@ -25,23 +25,22 @@ namespace App\Http\Controllers\Install; -use App\Http\Controllers\Controller; use App\StreamedOutput; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\StreamedResponse; -class DatabaseMigrationController extends Controller +class DatabaseMigrationController extends InstallationController { - use UsesDatabase; - - public function __invoke() + public function index() { - return view('install.migrate-database'); + return view('install.migrate-database', $this->formatData()); } public function migrate(Request $request) { - $this->configureDatabase(); + if (!self::enabled()) { + return redirect()->route('install.database'); + } $response = new StreamedResponse(function () use ($request) { try { diff --git a/app/Http/Controllers/Install/FinalizeController.php b/app/Http/Controllers/Install/FinalizeController.php index 1177ca22ba..9ead1a4c74 100644 --- a/app/Http/Controllers/Install/FinalizeController.php +++ b/app/Http/Controllers/Install/FinalizeController.php @@ -28,10 +28,14 @@ namespace App\Http\Controllers\Install; use Exception; use LibreNMS\Util\EnvHelper; -class FinalizeController extends \App\Http\Controllers\Controller +class FinalizeController extends InstallationController { - public function __invoke() + public function index() { + if (!self::enabled($this->steps)) { + return redirect()->route('install'); + } + $env = ''; $config_file = base_path('config.php'); $config = $this->getConfigFileContents(); @@ -63,13 +67,13 @@ class FinalizeController extends \App\Http\Controllers\Controller // session()->forget('db'); } - return view('install.finish', [ + return view('install.finish', $this->formatData([ 'env' => $env, 'config' => $config, 'messages' => $messages, 'success' => $success, 'config_message' => $config_message, - ]); + ])); } private function writeEnvFile() diff --git a/app/Http/Controllers/Install/InstallationController.php b/app/Http/Controllers/Install/InstallationController.php index b55374d2c8..7e58215c9e 100644 --- a/app/Http/Controllers/Install/InstallationController.php +++ b/app/Http/Controllers/Install/InstallationController.php @@ -26,11 +26,57 @@ namespace App\Http\Controllers\Install; use App\Http\Controllers\Controller; +use LibreNMS\DB\Eloquent; class InstallationController extends Controller { + protected $connection = 'setup'; + protected $steps = [ + 'checks' => \App\Http\Controllers\Install\ChecksController::class, + 'database' => \App\Http\Controllers\Install\DatabaseController::class, + 'migrate' => \App\Http\Controllers\Install\DatabaseMigrationController::class, + 'user' => \App\Http\Controllers\Install\MakeUserController::class, + 'finish' => \App\Http\Controllers\Install\FinalizeController::class, + ]; + + public function __construct() + { + if (is_string(config('librenms.install'))) { + $this->steps = array_intersect_key($this->steps, array_flip(explode(',', config('librenms.install')))); + } + $this->configureDatabase(); + } + + public function baseIndex() + { + return redirect()->route('install.checks'); + } + public function invalid() { abort(404); } + + final protected function formatData($data = []) + { + $data['steps'] = $this->steps; + return $data; + } + + protected function configureDatabase() + { + $db = session('db'); + if (!empty($db)) { + Eloquent::setConnection( + $this->connection, + $db['host'] ?? 'localhost', + $db['username'] ?? 'librenms', + $db['password'] ?? null, + $db['database'] ?? 'librenms', + $db['port'] ?? 3306, + $db['socket'] ?? null, + ); + config(['database.default', $this->connection]); + } + } } diff --git a/app/Http/Controllers/Install/MakeUserController.php b/app/Http/Controllers/Install/MakeUserController.php index 7bacd1c4b9..a94deaf334 100644 --- a/app/Http/Controllers/Install/MakeUserController.php +++ b/app/Http/Controllers/Install/MakeUserController.php @@ -29,27 +29,28 @@ use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Arr; -class MakeUserController extends \App\Http\Controllers\Controller +class MakeUserController extends InstallationController { - use UsesDatabase; - - public function __invoke(Request $request) + public function index(Request $request) { + if (!self::enabled()) { + return redirect()->route('install'); + } + if (session('install.database')) { - $this->configureDatabase(); $user = User::first(); } if (isset($user)) { session(['install.user' => true]); - return view('install.user-created', [ + return view('install.user-created', $this->formatData([ 'user' => $user, - ]); + ])); } - return view('install.make-user', [ + return view('install.make-user', $this->formatData([ 'messages' => Arr::wrap(session('message')) - ]); + ])); } public function create(Request $request) @@ -60,7 +61,6 @@ class MakeUserController extends \App\Http\Controllers\Controller ]); try { - $this->configureDatabase(); $user = new User($request->only(['username', 'password', 'email'])); $user->level = 10; $user->setPassword($request->get('password')); diff --git a/app/Http/Controllers/Install/UsesDatabase.php b/app/Http/Controllers/Install/UsesDatabase.php deleted file mode 100644 index a6ddd7b3fa..0000000000 --- a/app/Http/Controllers/Install/UsesDatabase.php +++ /dev/null @@ -1,47 +0,0 @@ -. - * - * @package LibreNMS - * @link http://librenms.org - * @copyright 2020 Tony Murray - * @author Tony Murray - */ - -namespace App\Http\Controllers\Install; - -use LibreNMS\DB\Eloquent; - -trait UsesDatabase -{ - protected $connection = 'setup'; - - protected function configureDatabase() - { - Eloquent::setConnection( - $this->connection, - session('db.host', 'localhost'), - session('db.username', 'librenms'), - session('db.password'), - session('db.database', 'librenms'), - session('db.port', 3306), - session('db.socket') - ); - config(['database.default', $this->connection]); - - return \DB::connection($this->connection); - } -} diff --git a/app/Http/ViewComposers/InstallMenuComposer.php b/app/Http/ViewComposers/InstallMenuComposer.php deleted file mode 100644 index d65ea1bad5..0000000000 --- a/app/Http/ViewComposers/InstallMenuComposer.php +++ /dev/null @@ -1,59 +0,0 @@ -. - * - * @package LibreNMS - * @link http://librenms.org - * @copyright 2020 Tony Murray - * @author Tony Murray - */ - -namespace App\Http\ViewComposers; - -use Illuminate\View\View; - -class InstallMenuComposer -{ - // TODO port to Laravel 7 View Component - private $steps = [ - 'checks' => \App\Http\Controllers\Install\ChecksController::class, - 'database' => \App\Http\Controllers\Install\DatabaseController::class, - 'migrate' => \App\Http\Controllers\Install\DatabaseMigrationController::class, - 'user' => \App\Http\Controllers\Install\MakeUserController::class, - 'finish' => \App\Http\Controllers\Install\FinalizeController::class, - ]; - - /** - * Bind data to the view. - * - * @param View $view - * @return void - */ - public function compose(View $view) - { - $steps = $this->steps; - if (is_string(config('librenms.install'))) { - $steps = array_intersect_key($steps, array_flip(explode(',', config('librenms.install')))); - } - - - - - $view->with(['steps' => $steps]); - } -} diff --git a/app/Providers/ComposerServiceProvider.php b/app/Providers/ComposerServiceProvider.php index 7bec9fef08..ee6851da77 100644 --- a/app/Providers/ComposerServiceProvider.php +++ b/app/Providers/ComposerServiceProvider.php @@ -39,7 +39,6 @@ class ComposerServiceProvider extends ServiceProvider { View::composer('layouts.librenmsv1', \App\Http\ViewComposers\LayoutComposer::class); View::composer('layouts.menu', \App\Http\ViewComposers\MenuComposer::class); - View::composer('components.install_menu', \App\Http\ViewComposers\InstallMenuComposer::class); } /** diff --git a/resources/lang/en/install.php b/resources/lang/en/install.php index bd52e2a14c..7c2b2a74f0 100644 --- a/resources/lang/en/install.php +++ b/resources/lang/en/install.php @@ -54,5 +54,11 @@ return [ 'config_exists' => 'config.php file exists', 'config_written' => 'config.php file written', '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.', + 'validate_link' => 'validate your install', + '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', ] ]; diff --git a/resources/views/components/install_menu.blade.php b/resources/views/components/install_menu.blade.php deleted file mode 100644 index ca87e7efb0..0000000000 --- a/resources/views/components/install_menu.blade.php +++ /dev/null @@ -1,13 +0,0 @@ -
- @foreach($steps as $step => $controller) -
- - - -
- @endforeach -
diff --git a/resources/views/install/finish.blade.php b/resources/views/install/finish.blade.php index 4482621cc3..8e50ca7b7b 100644 --- a/resources/views/install/finish.blade.php +++ b/resources/views/install/finish.blade.php @@ -3,7 +3,7 @@ @section('title', trans('install.finish.title')) @section('content') -
+
-
+
+
+
+
+

@lang('install.finish.not_finished')

+

@lang('install.finish.validate', ['about' => '' . __('install.finish.validate_link') . ''])

+
+
+
+
+
+
+

@lang('install.finish.thanks')

+

@lang('install.finish.statistics', ['about' => '' . __('install.finish.statistics_link') . ''])

+
+
+
@endsection @section('style') diff --git a/resources/views/install/migrate-database.blade.php b/resources/views/install/migrate.blade.php similarity index 100% rename from resources/views/install/migrate-database.blade.php rename to resources/views/install/migrate.blade.php diff --git a/resources/views/layouts/install.blade.php b/resources/views/layouts/install.blade.php index 7c469ea03f..ec9114cab8 100644 --- a/resources/views/layouts/install.blade.php +++ b/resources/views/layouts/install.blade.php @@ -46,7 +46,19 @@ @yield('title')
- @include('components.install_menu') +
+ @foreach($steps as $step => $controller) +
+ + + +
+ @endforeach +
diff --git a/routes/web.php b/routes/web.php index e3b1148a5d..dab8aba839 100644 --- a/routes/web.php +++ b/routes/web.php @@ -150,12 +150,12 @@ Route::group(['middleware' => ['auth'], 'guard' => 'auth'], function () { // installation routes Route::group(['prefix' => 'install', 'namespace' => 'Install'], function () { - Route::redirect('/', '/install/checks')->name('install'); - Route::get('/checks', 'ChecksController')->name('install.checks'); - Route::get('/database', 'DatabaseController')->name('install.database'); - Route::get('/database/migrate', 'DatabaseMigrationController')->name('install.migrate'); - Route::get('/user', 'MakeUserController')->name('install.user'); - Route::get('/finish', 'FinalizeController')->name('install.finish'); + Route::get('/', 'InstallationController@baseIndex')->name('install'); + Route::get('/checks', 'ChecksController@index')->name('install.checks'); + Route::get('/database', 'DatabaseController@index')->name('install.database'); + Route::get('/database/migrate', 'DatabaseMigrationController@index')->name('install.migrate'); + Route::get('/user', 'MakeUserController@index')->name('install.user'); + Route::get('/finish', 'FinalizeController@index')->name('install.finish'); Route::post('/user/create', 'MakeUserController@create')->name('install.action.user'); Route::post('/database/test', 'DatabaseController@test')->name('install.acton.test-database');