From 4fd83dc7270c6385d3bb544821fc60414d7d9671 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 11 Oct 2023 13:51:30 +0200 Subject: [PATCH 1/5] version++ --- config/sentry.php | 2 +- config/version.php | 2 +- versions.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/sentry.php b/config/sentry.php index f5b1c39b0..4d651fe5a 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ return [ // The release version of your application // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) - 'release' => '4.0.0-beta.77', + 'release' => '4.0.0-beta.78', // When left empty or `null` the Laravel environment will be used 'environment' => config('app.env'), diff --git a/config/version.php b/config/version.php index b6e86f8a8..4c60b71fc 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@ Date: Wed, 11 Oct 2023 13:52:46 +0200 Subject: [PATCH 2/5] fix: send unreachable/revived notifications --- app/Jobs/ContainerStatusJob.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php index 1ed74c750..c5c455472 100644 --- a/app/Jobs/ContainerStatusJob.php +++ b/app/Jobs/ContainerStatusJob.php @@ -53,7 +53,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted if ($serverUptimeCheckNumber >= $serverUptimeCheckNumberMax) { if ($this->server->unreachable_email_sent === false) { ray('Server unreachable, sending notification...'); - // $this->server->team->notify(new Unreachable($this->server)); + $this->server->team->notify(new Unreachable($this->server)); $this->server->update(['unreachable_email_sent' => true]); } $this->server->settings()->update([ @@ -85,7 +85,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted if (data_get($this->server, 'unreachable_email_sent') === true) { ray('Server is reachable again, sending notification...'); - // $this->server->team->notify(new Revived($this->server)); + $this->server->team->notify(new Revived($this->server)); $this->server->update(['unreachable_email_sent' => false]); } if ( From 5a7b16ea5fec95f4dea0dc2e9e2ec968d72a897f Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 11 Oct 2023 14:04:21 +0200 Subject: [PATCH 3/5] command: delete server --- app/Console/Commands/ResourcesDelete.php | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/Console/Commands/ResourcesDelete.php b/app/Console/Commands/ResourcesDelete.php index c9ad0f0e9..2b71cee89 100644 --- a/app/Console/Commands/ResourcesDelete.php +++ b/app/Console/Commands/ResourcesDelete.php @@ -3,6 +3,7 @@ namespace App\Console\Commands; use App\Models\Application; +use App\Models\Server; use App\Models\Service; use App\Models\StandalonePostgresql; use Illuminate\Console\Command; @@ -34,7 +35,7 @@ class ResourcesDelete extends Command { $resource = select( 'What resource do you want to delete?', - ['Application', 'Database', 'Service'], + ['Application', 'Database', 'Service', 'Server'], ); if ($resource === 'Application') { $this->deleteApplication(); @@ -42,6 +43,27 @@ class ResourcesDelete extends Command $this->deleteDatabase(); } elseif ($resource === 'Service') { $this->deleteService(); + } elseif($resource === 'Server') { + $this->deleteServer(); + } + } + private function deleteServer() { + $servers = Server::all(); + if ($servers->count() === 0) { + $this->error('There are no applications to delete.'); + return; + } + $serversToDelete = multiselect( + 'What server do you want to delete?', + $servers->pluck('id')->toArray(), + ); + $confirmed = confirm("Are you sure you want to delete all selected resources?"); + if (!$confirmed) { + return; + } + foreach ($serversToDelete as $server) { + $toDelete = $servers->where('id', $server)->first(); + $toDelete->delete(); } } private function deleteApplication() From 3e4538de98f0a13a16a380f561f22d9d0bd46d0a Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 11 Oct 2023 14:12:02 +0200 Subject: [PATCH 4/5] update command --- app/Console/Commands/ResourcesDelete.php | 48 ++++++++++++++---------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/app/Console/Commands/ResourcesDelete.php b/app/Console/Commands/ResourcesDelete.php index 2b71cee89..56e680642 100644 --- a/app/Console/Commands/ResourcesDelete.php +++ b/app/Console/Commands/ResourcesDelete.php @@ -55,14 +55,16 @@ class ResourcesDelete extends Command } $serversToDelete = multiselect( 'What server do you want to delete?', - $servers->pluck('id')->toArray(), + $servers->pluck('id')->sort()->toArray(), ); - $confirmed = confirm("Are you sure you want to delete all selected resources?"); - if (!$confirmed) { - return; - } + foreach ($serversToDelete as $server) { $toDelete = $servers->where('id', $server)->first(); + $this->info($toDelete); + $confirmed = confirm("Are you sure you want to delete all selected resources?"); + if (!$confirmed) { + break; + } $toDelete->delete(); } } @@ -75,14 +77,16 @@ class ResourcesDelete extends Command } $applicationsToDelete = multiselect( 'What application do you want to delete?', - $applications->pluck('name')->toArray(), + $applications->pluck('name')->sort()->toArray(), ); - $confirmed = confirm("Are you sure you want to delete all selected resources?"); - if (!$confirmed) { - return; - } + foreach ($applicationsToDelete as $application) { $toDelete = $applications->where('name', $application)->first(); + $this->info($toDelete); + $confirmed = confirm("Are you sure you want to delete all selected resources? "); + if (!$confirmed) { + break; + } $toDelete->delete(); } } @@ -95,14 +99,16 @@ class ResourcesDelete extends Command } $databasesToDelete = multiselect( 'What database do you want to delete?', - $databases->pluck('name')->toArray(), + $databases->pluck('name')->sort()->toArray(), ); - $confirmed = confirm("Are you sure you want to delete all selected resources?"); - if (!$confirmed) { - return; - } + foreach ($databasesToDelete as $database) { $toDelete = $databases->where('name', $database)->first(); + $this->info($toDelete); + $confirmed = confirm("Are you sure you want to delete all selected resources?"); + if (!$confirmed) { + return; + } $toDelete->delete(); } @@ -116,14 +122,16 @@ class ResourcesDelete extends Command } $servicesToDelete = multiselect( 'What service do you want to delete?', - $services->pluck('name')->toArray(), + $services->pluck('name')->sort()->toArray(), ); - $confirmed = confirm("Are you sure you want to delete all selected resources?"); - if (!$confirmed) { - return; - } + foreach ($servicesToDelete as $service) { $toDelete = $services->where('name', $service)->first(); + $this->info($toDelete); + $confirmed = confirm("Are you sure you want to delete all selected resources?"); + if (!$confirmed) { + return; + } $toDelete->delete(); } } From 62adf2c5dc63920ea017780b39c05cb6a72d9e3b Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 11 Oct 2023 14:24:19 +0200 Subject: [PATCH 5/5] fix: boarding + verification --- app/Http/Middleware/DecideWhatToDoWithUser.php | 3 +++ app/Models/User.php | 2 +- resources/views/livewire/dashboard.blade.php | 13 +++++++++---- routes/web.php | 1 + 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/Http/Middleware/DecideWhatToDoWithUser.php b/app/Http/Middleware/DecideWhatToDoWithUser.php index 70bb9dd6c..3fb9dfea7 100644 --- a/app/Http/Middleware/DecideWhatToDoWithUser.php +++ b/app/Http/Middleware/DecideWhatToDoWithUser.php @@ -12,6 +12,9 @@ class DecideWhatToDoWithUser public function handle(Request $request, Closure $next): Response { if (!auth()->user() || !isCloud() || isInstanceAdmin()) { + if (!isCloud() && showBoarding() && !in_array($request->path(), allowedPathsForBoardingAccounts())) { + return redirect('boarding'); + } return $next($request); } if (!auth()->user()->hasVerifiedEmail()) { diff --git a/app/Models/User.php b/app/Models/User.php index 970120079..c4275cd68 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -72,7 +72,7 @@ class User extends Authenticatable implements SendsEmail $mail->view('emails.email-verification', [ 'url' => $url, ]); - $mail->subject('Coolify Cloud: Verify your email.'); + $mail->subject('Coolify: Verify your email.'); send_user_an_email($mail, $this->email); } public function sendPasswordResetNotification($token): void diff --git a/resources/views/livewire/dashboard.blade.php b/resources/views/livewire/dashboard.blade.php index 71b400e63..1cfec37be 100644 --- a/resources/views/livewire/dashboard.blade.php +++ b/resources/views/livewire/dashboard.blade.php @@ -14,9 +14,12 @@ Your subscription has been activated! Welcome onboard! @endif - -

Projects

- + @if ($projects->count() === 0 && $servers->count() === 0) + No resources found. Add your first server / private key here. + @endif + @if ($projects->count() > 0) +

Projects

+ @endif @if ($projects->count() === 1)
@else @@ -58,7 +61,9 @@
@endforeach -

Servers

+@if ($projects->count() > 0) +

Servers

+@endif @if ($servers->count() === 1)
@else diff --git a/routes/web.php b/routes/web.php index 1a9d5851c..54dc7582b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -73,6 +73,7 @@ Route::get('/verify', function () { Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) { $request->fulfill(); + send_internal_notification("User {$request->user()->name} verified their email address."); return redirect('/'); })->middleware(['auth'])->name('verify.verify');