diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php index 55b5e137752f..2113127fffb8 100644 --- a/app/Http/Controllers/SetupController.php +++ b/app/Http/Controllers/SetupController.php @@ -11,6 +11,7 @@ namespace App\Http\Controllers; +use App\Http\Requests\Setup\CheckDatabaseRequest; use App\Http\Requests\Setup\StoreSetupRequest; use App\Jobs\Account\CreateAccount; use App\Models\Account; @@ -89,7 +90,7 @@ class SetupController extends Controller $account = CreateAccount::dispatchNow($request->all()); } - return view('index.index'); + return redirect('/'); } /** @@ -97,17 +98,17 @@ class SetupController extends Controller * * @return Response */ - public function checkDB(): Response + public function checkDB(CheckDatabaseRequest $request): Response { - if (Account::count() == 0) { + + if (Account::count() == 0) { /** This may not work, because we don't have 'account's table. */ } - // test db - > /setup/check_db (POST) please send array of DB variables - response 200/success or 400 [message] - // test mail -> /setup/check_mail (POST) please send array of MAIL xvariables - response 200/success or 400 [message] + $status = SystemHealth::dbCheck($request); - $randomStatus = rand(0, 1); + info($status); - if ($randomStatus) { + if (gettype($status) == 'array' && $status['success'] === true) { return response([], 200); } @@ -121,18 +122,20 @@ class SetupController extends Controller */ public function checkMail(): Response { - if (Account::count() == 0) { - } + // if (Account::count() == 0) {} /** This may not work, because we don't have 'account's table. */ - // test db - > /setup/check_db (POST) please send array of DB variables - response 200/success or 400 [message] - // test mail -> /setup/check_mail (POST) please send array of MAIL variables - response 200/success or 400 [message] + + try { + SystemHealth::testMailServer(); $randomStatus = rand(0, 1); if ($randomStatus) { return response([], 200); - } + } catch (\Exception $e) { + info(['action' => 'SetupController::checkMail()', 'message' => $e->getMessage(),]); - return response([], 400); + return response([], 400); + } } } diff --git a/app/Http/Requests/Setup/CheckDatabaseRequest.php b/app/Http/Requests/Setup/CheckDatabaseRequest.php new file mode 100644 index 000000000000..fcc889b584d6 --- /dev/null +++ b/app/Http/Requests/Setup/CheckDatabaseRequest.php @@ -0,0 +1,32 @@ + ['required'], + 'database' => ['required'], + 'username' => ['required'], + ]; + } +} diff --git a/app/Http/Requests/Setup/CheckMailRequest.php b/app/Http/Requests/Setup/CheckMailRequest.php new file mode 100644 index 000000000000..3f87b70f582f --- /dev/null +++ b/app/Http/Requests/Setup/CheckMailRequest.php @@ -0,0 +1,37 @@ + ['required', 'in:smtp,mail,sendmail'], + 'from_name' => ['required'], + 'from_address' => ['required'], + 'username' => ['required'], + 'host' => ['required'], + 'port' => ['required'], + 'encryption' => ['required'], + 'password' => ['required'], + ]; + } +} diff --git a/app/Http/Requests/Setup/StoreSetupRequest.php b/app/Http/Requests/Setup/StoreSetupRequest.php index 26616f9461dc..dc688439b3ff 100644 --- a/app/Http/Requests/Setup/StoreSetupRequest.php +++ b/app/Http/Requests/Setup/StoreSetupRequest.php @@ -32,8 +32,6 @@ class StoreSetupRequest extends Request return [ /*System*/ 'url' => 'required', - 'debug' => 'required', - 'https' => 'required', /*Database*/ 'host' => 'required', 'database' => 'required', diff --git a/app/Utils/SystemHealth.php b/app/Utils/SystemHealth.php index cb4b70313d26..b9f1ca1429f1 100644 --- a/app/Utils/SystemHealth.php +++ b/app/Utils/SystemHealth.php @@ -11,6 +11,8 @@ namespace App\Utils; +use App\Http\Requests\Setup\CheckDatabaseRequest; +use App\Http\Requests\Setup\CheckMailRequest; use App\Libraries\MultiDB; use App\Mail\TestMailServer; use Illuminate\Support\Facades\DB; @@ -72,28 +74,40 @@ class SystemHealth return $loaded_extensions; } - private static function dbCheck() :array + public static function dbCheck($request = null): array { - $result = []; + $result = ['success' => false]; + + if ($request && $request instanceof CheckDatabaseRequest) { + config(['database.connections.db-ninja-01.host'=> $request->input('host')]); + config(['database.connections.db-ninja-01.database'=> $request->input('database')]); + config(['database.connections.db-ninja-01.username'=> $request->input('username')]); + config(['database.connections.db-ninja-01.password'=> $request->input('password')]); + config(['database.default' => 'db-ninja-01']); + + DB::purge('db-ninja-01'); + } if (! config('ninja.db.multi_db_enabled')) { - $pdo = DB::connection()->getPdo(); - - if ($pdo) { + try { + $pdo = DB::connection()->getPdo(); $result[] = [ DB::connection()->getDatabaseName() => true ]; - } else { + $result['success'] = true; + } catch (\Exception $e) { $result[] = [ config('database.connections.' . config('database.default') . '.database') => false ]; + $result['success'] = false; } } else { foreach (MultiDB::$dbs as $db) { MultiDB::setDB($db); - $pdo = DB::connection()->getPdo(); - - if ($pdo) { + try { + $pdo = DB::connection()->getPdo(); $result[] = [ DB::connection()->getDatabaseName() => true ]; - } else { + $result['success'] = true; + } catch (\Exception $e) { $result[] = [ config('database.connections.' . config('database.default') . '.database') => false ]; + $result['success'] = false; } } } @@ -106,8 +120,19 @@ class SystemHealth return DB::connection()->getPdo(); } - private static function testMailServer() + public static function testMailServer($request = null) { + if ($request && $request instanceof CheckMailRequest) { + config(['mail.driver' => $request->input('driver')]); + config(['mail.host' => $request->input('host')]); + config(['mail.port' => $request->input('port')]); + config(['mail.from.address' => $request->input('from_address')]); + config(['mail.from.name' => $request->input('from_name')]); + config(['mail.encryption' => $request->input('encryption')]); + config(['mail.username' => $request->input('username')]); + config(['mail.password' => $request->input('password')]); + } + try { Mail::to(config('mail.from.address')) ->send(new TestMailServer('Email Server Works!', config('mail.from.address'))); diff --git a/resources/views/setup/_account.blade.php b/resources/views/setup/_account.blade.php index d815cbd062fe..1d97dfee9a4b 100644 --- a/resources/views/setup/_account.blade.php +++ b/resources/views/setup/_account.blade.php @@ -14,7 +14,7 @@ {{ ctrans('texts.first_name') }}
- +
@@ -22,7 +22,7 @@ {{ ctrans('texts.last_name') }}
- +
@@ -30,7 +30,7 @@ {{ ctrans('texts.email') }}
- +
diff --git a/resources/views/setup/_application.blade.php b/resources/views/setup/_application.blade.php index 783946802c42..7988da597c8d 100644 --- a/resources/views/setup/_application.blade.php +++ b/resources/views/setup/_application.blade.php @@ -14,7 +14,7 @@ {{ ctrans('texts.url') }}*
- +
@@ -22,7 +22,7 @@ {{ ctrans('texts.https') }}
- + {{ ctrans('texts.require') }}
@@ -31,7 +31,7 @@ {{ ctrans('texts.debug') }}
- + {{ ctrans('texts.enable') }}
@@ -40,7 +40,7 @@ {{ ctrans('texts.reports') }}
- + {{ ctrans('texts.send_fail_logs_to_our_server') }}
diff --git a/resources/views/setup/_database.blade.php b/resources/views/setup/_database.blade.php index 2e9e79a6eabf..88b356fe8dd8 100644 --- a/resources/views/setup/_database.blade.php +++ b/resources/views/setup/_database.blade.php @@ -39,7 +39,7 @@ FLUSH PRIVILEGES; {{ ctrans('texts.host') }}*
- +
@@ -47,15 +47,15 @@ FLUSH PRIVILEGES; {{ ctrans('texts.database') }}*
- +
-
+
{{ ctrans('texts.username') }}*
- +
@@ -63,7 +63,7 @@ FLUSH PRIVILEGES; {{ ctrans('texts.password') }}
- +
diff --git a/resources/views/setup/_mail.blade.php b/resources/views/setup/_mail.blade.php index f3935fd4df8c..4b32ea5898ba 100644 --- a/resources/views/setup/_mail.blade.php +++ b/resources/views/setup/_mail.blade.php @@ -15,7 +15,9 @@
@@ -24,7 +26,7 @@ {{ ctrans('texts.from_name') }}
- +
@@ -32,7 +34,7 @@ {{ ctrans('texts.from_address') }}
- +
@@ -40,7 +42,7 @@ {{ ctrans('texts.username') }}
- +
@@ -48,7 +50,7 @@ {{ ctrans('texts.host') }}
- +
@@ -56,7 +58,7 @@ {{ ctrans('texts.port') }}
- +
@@ -65,8 +67,8 @@
@@ -81,7 +83,7 @@
diff --git a/resources/views/setup/index.blade.php b/resources/views/setup/index.blade.php index a781110209a5..e436ed81d0aa 100644 --- a/resources/views/setup/index.blade.php +++ b/resources/views/setup/index.blade.php @@ -19,6 +19,16 @@ or email us at contact@invoiceninja.com.

+ @if($errors->any()) +
+
    + @foreach($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + @include('setup._application') @include('setup._database') @include('setup._mail')