From 9b9593b98db951fda432b38db512886d056dc2c6 Mon Sep 17 00:00:00 2001 From: Julian Prieber <60265788+JulianPrieber@users.noreply.github.com> Date: Wed, 23 Nov 2022 15:52:33 +0100 Subject: [PATCH] Added first setup page This setup will: 1. Check the server dependencies 2. Setup the database 3. Create the admin user 4. Configure the app --- INSTALLING | 0 app/Http/Controllers/InstallerController.php | 141 ++++++++++++ composer.lock | 38 ++-- resources/views/installer/installer.blade.php | 201 +++++++++++++++++ resources/views/layouts/installing.blade.php | 207 ++++++++++++++++++ routes/web.php | 25 ++- 6 files changed, 588 insertions(+), 24 deletions(-) create mode 100644 INSTALLING create mode 100644 app/Http/Controllers/InstallerController.php create mode 100644 resources/views/installer/installer.blade.php create mode 100644 resources/views/layouts/installing.blade.php diff --git a/INSTALLING b/INSTALLING new file mode 100644 index 0000000..e69de29 diff --git a/app/Http/Controllers/InstallerController.php b/app/Http/Controllers/InstallerController.php new file mode 100644 index 0000000..b909229 --- /dev/null +++ b/app/Http/Controllers/InstallerController.php @@ -0,0 +1,141 @@ +database == 'MySQL'){ + return redirect(url('?mysql')); + }else{ + return redirect(url('?4')); + } + } + + public function createAdmin(request $request) + { + + $email = $request->email; + $password = $request->password; + + + if(DB::table('users')->count() == '0'){ + Schema::disableForeignKeyConstraints(); + DB::table('users')->delete(); + DB::table('users')->truncate(); + Schema::enableForeignKeyConstraints(); + + $user = User::create([ + 'name' => 'Admin', + 'email' => $email, + 'email_verified_at' => '0001-01-01 00:00:00', + 'password' => Hash::make($password), + 'littlelink_name' => 'admin', + 'littlelink_description' => 'admin page', + 'block' => 'no', + ]); + + User::where('id', '1')->update(['role' => 'admin']); + } + + return redirect(url('?5')); + } + + public function mysql(request $request) + { + $DB_CONNECTION = 'mysql'; + $DB_HOST = $request->host; + $DB_PORT = $request->port; + $DB_DATABASE = $request->name; + $DB_USERNAME = $request->username; + $DB_PASSWORD = $request->password; + + if(EnvEditor::keyExists('DB_CONNECTION')){EnvEditor::editKey('DB_CONNECTION', $DB_CONNECTION);}else{EnvEditor::addKey('DB_CONNECTION', $DB_CONNECTION);} + if(EnvEditor::keyExists('DB_HOST')){EnvEditor::editKey('DB_HOST', $DB_HOST);}else{EnvEditor::addKey('DB_HOST', $DB_HOST);} + if(EnvEditor::keyExists('DB_PORT')){EnvEditor::editKey('DB_PORT', $DB_PORT);}else{EnvEditor::addKey('DB_PORT', $DB_PORT);} + if(EnvEditor::keyExists('DB_DATABASE')){EnvEditor::editKey('DB_DATABASE', $DB_DATABASE);}else{EnvEditor::addKey('DB_DATABASE', $DB_DATABASE);} + if(EnvEditor::keyExists('DB_USERNAME')){EnvEditor::editKey('DB_USERNAME', $DB_USERNAME);}else{EnvEditor::addKey('DB_USERNAME', $DB_USERNAME);} + if(EnvEditor::keyExists('DB_PASSWORD')){EnvEditor::editKey('DB_PASSWORD', $DB_PASSWORD);}else{EnvEditor::addKey('DB_PASSWORD', $DB_PASSWORD);} + + return redirect(url('mysql-test')); + + } + + public function mysqlTest(request $request) + { + try {Artisan::call('migrate');} catch (exception $e) {$failed = "true";} + try {Artisan::call('db:seed --force');} catch (exception $e) {$failed = "true";} + try {Artisan::call('db:seed --class="PageSeeder" --force');} catch (exception $e) {$failed = "true";} + try {Artisan::call('db:seed --class="ButtonSeeder" --force');} catch (exception $e) {$failed = "true";} + + try {$users = DB::table('buttons')->count(); $failed = false;} catch (exception $e) {$failed = true;} + + if($failed == true){ + if(EnvEditor::keyExists('DB_CONNECTION')){EnvEditor::editKey('DB_CONNECTION', 'sqlite');}else{EnvEditor::addKey('DB_CONNECTION', 'sqlite');} + if(EnvEditor::keyExists('DB_HOST')){EnvEditor::deleteKey('DB_HOST');} + if(EnvEditor::keyExists('DB_PORT')){EnvEditor::deleteKey('DB_PORT');} + if(EnvEditor::keyExists('DB_DATABASE')){EnvEditor::deleteKey('DB_DATABASE');} + if(EnvEditor::keyExists('DB_USERNAME')){EnvEditor::deleteKey('DB_USERNAME');} + if(EnvEditor::keyExists('DB_PASSWORD')){EnvEditor::deleteKey('DB_PASSWORD');} + return redirect(url('?error')); + }else{ + return redirect(url('?4')); + } + } + + public function options(request $request) + { + + $user = User::find(1); + $llName = $user->littlelink_name; + + if($request->register == 'Yes'){$register = "true";}else{$register = "false";} + Page::first()->update(['register' => $register]); + + if($request->verify == 'Yes'){$value = "verified";}else{$value = "auth";} + if(EnvEditor::keyExists('REGISTER_AUTH')){EnvEditor::editKey('REGISTER_AUTH', $value);} + + if($request->page == 'No'){$value = "";}else{$value = '"' . $llName . '"';} + if(EnvEditor::keyExists('HOME_URL')){EnvEditor::editKey('HOME_URL', $value);} + + if(EnvEditor::keyExists('APP_NAME')){EnvEditor::editKey('APP_NAME', '"' . $request->app . '"');} + + if(file_exists(base_path("INSTALLING"))){unlink(base_path("INSTALLING"));} + + return redirect(url('')); + } + +} diff --git a/composer.lock b/composer.lock index b691447..235dd80 100644 --- a/composer.lock +++ b/composer.lock @@ -2878,25 +2878,25 @@ }, { "name": "nette/schema", - "version": "v1.2.2", + "version": "v1.2.3", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", "shasum": "" }, "require": { "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.2" + "php": ">=7.1 <8.3" }, "require-dev": { "nette/tester": "^2.3 || ^2.4", - "phpstan/phpstan-nette": "^0.12", + "phpstan/phpstan-nette": "^1.0", "tracy/tracy": "^2.7" }, "type": "library", @@ -2934,9 +2934,9 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.2" + "source": "https://github.com/nette/schema/tree/v1.2.3" }, - "time": "2021-10-15T11:40:02+00:00" + "time": "2022-10-13T01:24:26+00:00" }, { "name": "nette/utils", @@ -7866,16 +7866,16 @@ }, { "name": "laravel/sail", - "version": "v1.16.2", + "version": "v1.16.3", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "7d1ed5f856ec8b9708712e3fc0708fcabe114659" + "reference": "0dbee8802e17911afbe29a8506316343829b056e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/7d1ed5f856ec8b9708712e3fc0708fcabe114659", - "reference": "7d1ed5f856ec8b9708712e3fc0708fcabe114659", + "url": "https://api.github.com/repos/laravel/sail/zipball/0dbee8802e17911afbe29a8506316343829b056e", + "reference": "0dbee8802e17911afbe29a8506316343829b056e", "shasum": "" }, "require": { @@ -7922,7 +7922,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2022-09-28T13:13:22+00:00" + "time": "2022-11-21T16:19:18+00:00" }, { "name": "mockery/mockery", @@ -8363,16 +8363,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.18", + "version": "9.2.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a" + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/12fddc491826940cf9b7e88ad9664cf51f0f6d0a", - "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559", + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559", "shasum": "" }, "require": { @@ -8428,7 +8428,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.18" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19" }, "funding": [ { @@ -8436,7 +8436,7 @@ "type": "github" } ], - "time": "2022-10-27T13:35:33+00:00" + "time": "2022-11-18T07:47:47+00:00" }, { "name": "phpunit/php-file-iterator", diff --git a/resources/views/installer/installer.blade.php b/resources/views/installer/installer.blade.php new file mode 100644 index 0000000..dbfa9be --- /dev/null +++ b/resources/views/installer/installer.blade.php @@ -0,0 +1,201 @@ +@extends('layouts.installing') + + +@Push('installer-body') +
+
An error has occured. Please try again.
+ + +@endif + +@if($_SERVER['QUERY_STRING'] === '2') +{{-- Landing page --}} + +Required PHP modules:
+BCMath: | @if(extension_loaded('bcmath'))@else@endif |
Ctype: | @if(extension_loaded('Ctype'))@else@endif |
cURL: | @if(extension_loaded('cURL'))@else@endif |
DOM: | @if(extension_loaded('DOM'))@else@endif |
Fileinfo: | @if(extension_loaded('Fileinfo'))@else@endif |
JSON: | @if(extension_loaded('JSON'))@else@endif |
Mbstring: | @if(extension_loaded('Mbstring'))@else@endif |
OpenSSL: | @if(extension_loaded('OpenSSL'))@else@endif |
PCRE: | @if(extension_loaded('PCRE'))@else@endif |
PDO: | @if(extension_loaded('PDO'))@else@endif |
Tokenizer: | @if(extension_loaded('Tokenizer'))@else@endif |
XML: | @if(extension_loaded('XML'))@else@endif |
SQLite: | @if(extension_loaded('PDO_SQLite'))@else@endif |
MySQL: | @if(extension_loaded('PDO_MySQL'))@else@endif |
Select a database type
+Under most circumstances, we recommend using SQLite.
MySQL requires a separate, empty MySQL database.
MySQL
+ + + +Create an admin account.
+ + + +@endif + +@if($_SERVER['QUERY_STRING'] === '5') +{{-- Landing page --}} + +Configure your page
+ + +@endif + + +