From 71e1571c39febcef9f428f7bff2d8d8707435fb7 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 1 Sep 2023 11:20:58 +0200 Subject: [PATCH 1/5] Add affected users to sentry --- app/Exceptions/Handler.php | 6 ++++++ versions.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 9d9dabab6..d8cf0c9cf 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -5,6 +5,7 @@ use App\Models\InstanceSettings; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Sentry\Laravel\Integration; +use Sentry\State\Scope; use Throwable; class Handler extends ExceptionHandler @@ -48,6 +49,11 @@ public function register(): void if ($this->settings->do_not_track || isDev()) { return; } + app('sentry')->configureScope( + function (Scope $scope){ + $scope->setUser(['id'=> config('sentry.server_name')]); + } + ); Integration::captureUnhandledException($e); }); } diff --git a/versions.json b/versions.json index d50394f5b..8f7d88515 100644 --- a/versions.json +++ b/versions.json @@ -4,7 +4,7 @@ "version": "3.12.36" }, "v4": { - "version": "4.0.0-beta.21" + "version": "4.0.0-beta.22" } } } From 66162966b91d4f4339b03ac5728496bf58daf78d Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 1 Sep 2023 11:35:33 +0200 Subject: [PATCH 2/5] fix: sentry bug --- .../Livewire/Project/New/PublicGitRepository.php | 14 ++++++++------ versions.json | 14 +++++++------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/app/Http/Livewire/Project/New/PublicGitRepository.php b/app/Http/Livewire/Project/New/PublicGitRepository.php index 6229a7fc6..eb36cb1f1 100644 --- a/app/Http/Livewire/Project/New/PublicGitRepository.php +++ b/app/Http/Livewire/Project/New/PublicGitRepository.php @@ -39,7 +39,7 @@ class PublicGitRepository extends Component 'publish_directory' => 'publish directory', ]; private object $repository_url_parsed; - private GithubApp|GitlabApp $git_source; + private GithubApp|GitlabApp|null $git_source = null; private string $git_host; private string $git_repository; @@ -67,18 +67,17 @@ public function instantSave() public function load_branch() { - $this->branch_found = false; + try { + $this->branch_found = false; $this->validate([ 'repository_url' => 'required|url' ]); $this->get_git_source(); - try { - $this->get_branch(); - $this->selected_branch = $this->git_branch; + $this->get_branch(); + $this->selected_branch = $this->git_branch; } catch (\Exception $e) { return general_error_handler(err: $e, that: $this); } - if (!$this->branch_found && $this->git_branch == 'main') { try { $this->git_branch = 'master'; @@ -103,6 +102,9 @@ private function get_git_source() } elseif ($this->git_host == 'bitbucket.org') { // Not supported yet } + if (is_null($this->git_source)) { + throw new \Exception('Git source not found. What?!'); + } } private function get_branch() diff --git a/versions.json b/versions.json index 8f7d88515..12255ff0d 100644 --- a/versions.json +++ b/versions.json @@ -1,10 +1,10 @@ { - "coolify": { - "main": { - "version": "3.12.36" - }, - "v4": { - "version": "4.0.0-beta.22" + "coolify": { + "main": { + "version": "3.12.36" + }, + "v4": { + "version": "4.0.0-beta.22" + } } - } } From 76510b897138e7bd83052c654faf17b4dc286631 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 1 Sep 2023 11:35:40 +0200 Subject: [PATCH 3/5] fix: button loading animation --- resources/views/components/forms/button.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/components/forms/button.blade.php b/resources/views/components/forms/button.blade.php index f619e3ba1..f3bec86e9 100644 --- a/resources/views/components/forms/button.blade.php +++ b/resources/views/components/forms/button.blade.php @@ -12,8 +12,8 @@ @if ($attributes->get('type') === 'submit') @else - @if ($attributes->has('wire:click')) - whereStartsWith('wire:click')->first()) + @endif @endif From 3fa53556f45507b3b9fd37f9c011ac0d2723d05c Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 1 Sep 2023 15:52:18 +0200 Subject: [PATCH 4/5] better emails --- app/Console/Commands/TestEmail.php | 184 ++++++++++++++++++ app/Models/ApplicationPreview.php | 10 +- .../Application/DeploymentFailed.php | 11 +- app/Notifications/Channels/EmailChannel.php | 56 +++--- .../Channels/TransactionalEmailChannel.php | 54 ++--- app/Notifications/Database/BackupFailed.php | 18 +- app/Notifications/Database/BackupSuccess.php | 16 +- app/Notifications/Test.php | 2 +- .../TransactionalEmails/InvitationLink.php | 9 +- .../TransactionalEmails/Test.php | 2 +- composer.json | 1 + composer.lock | 2 +- config/app.php | 2 +- config/auth.php | 2 +- .../views/components/emails/footer.blade.php | 6 + .../views/components/emails/header.blade.php | 1 + .../views/components/emails/layout.blade.php | 6 + .../application-deployment-failed.blade.php | 17 +- .../application-deployment-success.blade.php | 18 +- .../application-status-changes.blade.php | 11 +- .../views/emails/backup-failed.blade.php | 8 + .../views/emails/backup-success.blade.php | 3 + .../views/emails/invitation-link.blade.php | 12 +- .../views/emails/reset-password.blade.php | 9 +- .../subscription-invoice-failed.blade.php | 10 +- resources/views/emails/test.blade.php | 4 +- .../emails/waitlist-confirmation.blade.php | 13 +- .../emails/waitlist-invitation.blade.php | 26 ++- 28 files changed, 374 insertions(+), 139 deletions(-) create mode 100644 app/Console/Commands/TestEmail.php create mode 100644 resources/views/components/emails/footer.blade.php create mode 100644 resources/views/components/emails/header.blade.php create mode 100644 resources/views/components/emails/layout.blade.php create mode 100644 resources/views/emails/backup-failed.blade.php create mode 100644 resources/views/emails/backup-success.blade.php diff --git a/app/Console/Commands/TestEmail.php b/app/Console/Commands/TestEmail.php new file mode 100644 index 000000000..e876b62a0 --- /dev/null +++ b/app/Console/Commands/TestEmail.php @@ -0,0 +1,184 @@ + 'Test', + 'application-deployment-success' => 'Application - Deployment Success', + 'application-deployment-failed' => 'Application - Deployment Failed', + 'application-status-changed' => 'Application - Status Changed', + 'backup-success' => 'Database - Backup Success', + 'backup-failed' => 'Database - Backup Failed', + 'invitation-link' => 'Invitation Link', + 'waitlist-invitation-link' => 'Waitlist Invitation Link', + 'waitlist-confirmation' => 'Waitlist Confirmation', + ], + ); + $type = set_transanctional_email_settings(); + if (!$type) { + throw new Exception('No email settings found.'); + } + $this->mail = new MailMessage(); + $this->mail->subject("Test Email"); + switch ($email) { + case 'emails-test': + $this->mail = (new Test())->toMail(); + break; + case 'application-deployment-success': + $application = Application::all()->first(); + $this->mail = (new DeploymentSuccess($application, 'test'))->toMail(); + $this->sendEmail(); + break; + case 'application-deployment-failed': + $application = Application::all()->first(); + $preview = ApplicationPreview::all()->first(); + if (!$preview) { + $preview = ApplicationPreview::create([ + 'application_id' => $application->id, + 'pull_request_id' => 1, + 'pull_request_html_url' => 'http://example.com', + 'fqdn' => $application->fqdn, + ]); + } + $this->mail = (new DeploymentFailed($application, 'test'))->toMail(); + $this->sendEmail(); + $this->mail = (new DeploymentFailed($application, 'test', $preview))->toMail(); + $this->sendEmail(); + break; + case 'application-status-changed': + $application = Application::all()->first(); + $this->mail = (new StatusChanged($application))->toMail(); + $this->sendEmail(); + break; + case 'backup-failed': + $backup = ScheduledDatabaseBackup::all()->first(); + $db = StandalonePostgresql::all()->first(); + if (!$backup) { + $backup = ScheduledDatabaseBackup::create([ + 'enabled' => true, + 'frequency' => 'daily', + 'save_s3' => false, + 'database_id' => $db->id, + 'database_type' => $db->getMorphClass(), + 'team_id' => 0, + ]); + } + $output = 'Because of an error, the backup of the database ' . $db->name . ' failed.'; + $this->mail = (new BackupFailed($backup, $db, $output))->toMail(); + $this->sendEmail(); + break; + case 'backup-success': + $backup = ScheduledDatabaseBackup::all()->first(); + $db = StandalonePostgresql::all()->first(); + if (!$backup) { + $backup = ScheduledDatabaseBackup::create([ + 'enabled' => true, + 'frequency' => 'daily', + 'save_s3' => false, + 'database_id' => $db->id, + 'database_type' => $db->getMorphClass(), + 'team_id' => 0, + ]); + } + $this->mail = (new BackupSuccess($backup, $db))->toMail(); + $this->sendEmail(); + break; + case 'invitation-link': + $user = User::all()->first(); + $invitation = TeamInvitation::whereEmail($user->email)->first(); + if (!$invitation) { + $invitation = TeamInvitation::create([ + 'uuid' => Str::uuid(), + 'email' => $user->email, + 'team_id' => 1, + 'link' => 'http://example.com', + ]); + } + $this->mail = (new InvitationLink($user))->toMail(); + $this->sendEmail(); + break; + case 'waitlist-invitation-link': + $this->mail = new MailMessage(); + $this->mail->view('emails.waitlist-invitation', [ + 'email' => 'test2@example.com', + 'password' => "supersecretpassword", + ]); + $this->mail->subject('Congratulations! You are invited to join Coolify Cloud.'); + $this->sendEmail(); + break; + case 'waitlist-confirmation': + $this->mail = new MailMessage(); + $this->mail->view( + 'emails.waitlist-confirmation', + [ + 'confirmation_url' => 'http://example.com', + 'cancel_url' => 'http://example.com', + ] + ); + $this->mail->subject('You are on the waitlist!'); + $this->sendEmail(); + break; + } + } + private function sendEmail() + { + Mail::send( + [], + [], + fn (Message $message) => $message + ->from( + 'internal@example.com', + 'Test Email', + ) + ->to('test@example.com') + ->subject($this->mail->subject) + ->html((string)$this->mail->render()) + ); + } +} diff --git a/app/Models/ApplicationPreview.php b/app/Models/ApplicationPreview.php index 38ac5127d..13775abae 100644 --- a/app/Models/ApplicationPreview.php +++ b/app/Models/ApplicationPreview.php @@ -4,15 +4,7 @@ class ApplicationPreview extends BaseModel { - protected $fillable = [ - 'uuid', - 'pull_request_id', - 'pull_request_html_url', - 'pull_request_issue_comment_id', - 'fqdn', - 'status', - 'application_id', - ]; + protected $guarded = []; static function findPreviewByApplicationAndPullId(int $application_id, int $pull_request_id) { diff --git a/app/Notifications/Application/DeploymentFailed.php b/app/Notifications/Application/DeploymentFailed.php index fdd4beabf..b244f4be8 100644 --- a/app/Notifications/Application/DeploymentFailed.php +++ b/app/Notifications/Application/DeploymentFailed.php @@ -18,15 +18,15 @@ class DeploymentFailed extends Notification implements ShouldQueue public Application $application; public string $deployment_uuid; - public ApplicationPreview|null $preview; + public ?ApplicationPreview $preview = null; public string $application_name; - public string|null $deployment_url = null; + public ?string $deployment_url = null; public string $project_uuid; public string $environment_name; - public string|null $fqdn; + public ?string $fqdn = null; - public function __construct(Application $application, string $deployment_uuid, ApplicationPreview|null $preview) + public function __construct(Application $application, string $deployment_uuid, ?ApplicationPreview $preview = null) { $this->application = $application; $this->deployment_uuid = $deployment_uuid; @@ -67,9 +67,8 @@ public function toMail(): MailMessage $mail->subject('❌ Deployment failed of ' . $this->application_name . '.'); } else { $fqdn = $this->preview->fqdn; - $mail->subject('❌ Pull request #' . $this->preview->pull_request_id . ' of ' . $this->application_name . ' deployment failed.'); + $mail->subject('❌ Deployment failed of pull request #' . $this->preview->pull_request_id . ' of ' . $this->application_name . '.'); } - $mail->view('emails.application-deployment-failed', [ 'name' => $this->application_name, 'fqdn' => $fqdn, diff --git a/app/Notifications/Channels/EmailChannel.php b/app/Notifications/Channels/EmailChannel.php index aaf059149..0c042fcfc 100644 --- a/app/Notifications/Channels/EmailChannel.php +++ b/app/Notifications/Channels/EmailChannel.php @@ -20,35 +20,33 @@ public function send(SendsEmail $notifiable, Notification $notification): void } $mailMessage = $notification->toMail($notifiable); - if ($this->isResend) { - foreach ($recepients as $receipient) { - Mail::send( - [], - [], - fn (Message $message) => $message - ->from( - data_get($notifiable, 'smtp_from_address'), - data_get($notifiable, 'smtp_from_name'), - ) - ->to($receipient) - ->subject($mailMessage->subject) - ->html((string)$mailMessage->render()) - ); - } - } else { - Mail::send( - [], - [], - fn (Message $message) => $message - ->from( - data_get($notifiable, 'smtp_from_address'), - data_get($notifiable, 'smtp_from_name'), - ) - ->bcc($recepients) - ->subject($mailMessage->subject) - ->html((string)$mailMessage->render()) - ); - } + // if ($this->isResend) { + Mail::send( + [], + [], + fn (Message $message) => $message + ->from( + data_get($notifiable, 'smtp_from_address'), + data_get($notifiable, 'smtp_from_name'), + ) + ->to($recepients) + ->subject($mailMessage->subject) + ->html((string)$mailMessage->render()) + ); + // } else { + // Mail::send( + // [], + // [], + // fn (Message $message) => $message + // ->from( + // data_get($notifiable, 'smtp_from_address'), + // data_get($notifiable, 'smtp_from_name'), + // ) + // ->bcc($recepients) + // ->subject($mailMessage->subject) + // ->html((string)$mailMessage->render()) + // ); + // } } private function bootConfigs($notifiable): void diff --git a/app/Notifications/Channels/TransactionalEmailChannel.php b/app/Notifications/Channels/TransactionalEmailChannel.php index 23fe28700..aa5541dee 100644 --- a/app/Notifications/Channels/TransactionalEmailChannel.php +++ b/app/Notifications/Channels/TransactionalEmailChannel.php @@ -26,33 +26,33 @@ public function send(User $notifiable, Notification $notification): void } $this->bootConfigs(); $mailMessage = $notification->toMail($notifiable); - if ($this->isResend) { - Mail::send( - [], - [], - fn (Message $message) => $message - ->from( - data_get($settings, 'smtp_from_address'), - data_get($settings, 'smtp_from_name'), - ) - ->to($email) - ->subject($mailMessage->subject) - ->html((string)$mailMessage->render()) - ); - } else { - Mail::send( - [], - [], - fn (Message $message) => $message - ->from( - data_get($settings, 'smtp_from_address'), - data_get($settings, 'smtp_from_name'), - ) - ->bcc($email) - ->subject($mailMessage->subject) - ->html((string)$mailMessage->render()) - ); - } + // if ($this->isResend) { + Mail::send( + [], + [], + fn (Message $message) => $message + ->from( + data_get($settings, 'smtp_from_address'), + data_get($settings, 'smtp_from_name'), + ) + ->to($email) + ->subject($mailMessage->subject) + ->html((string)$mailMessage->render()) + ); + // } else { + // Mail::send( + // [], + // [], + // fn (Message $message) => $message + // ->from( + // data_get($settings, 'smtp_from_address'), + // data_get($settings, 'smtp_from_name'), + // ) + // ->bcc($email) + // ->subject($mailMessage->subject) + // ->html((string)$mailMessage->render()) + // ); + // } } private function bootConfigs(): void diff --git a/app/Notifications/Database/BackupFailed.php b/app/Notifications/Database/BackupFailed.php index dda0b4884..79fd9405d 100644 --- a/app/Notifications/Database/BackupFailed.php +++ b/app/Notifications/Database/BackupFailed.php @@ -14,12 +14,13 @@ class BackupFailed extends Notification implements ShouldQueue { use Queueable; - public string $message = 'Backup FAILED'; - + public string $name; + public string $frequency; public function __construct(ScheduledDatabaseBackup $backup, public $database, public $output) { - $this->message = "❌ Database backup for {$database->name} with frequency of $backup->frequency was FAILED.\n\nReason: $output"; + $this->name = $database->name; + $this->frequency = $backup->frequency; } public function via(object $notifiable): array @@ -36,20 +37,23 @@ public function via(object $notifiable): array if ($isDiscordEnabled && $isSubscribedToDiscordEvent) { $channels[] = DiscordChannel::class; } - ray($channels); return $channels; } public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("❌ Backup FAILED for {$this->database->name}"); - $mail->line($this->message); + $mail->subject("❌ [ACTION REQUIRED] Backup FAILED for {$this->database->name}"); + $mail->view('emails.backup-failed', [ + 'name' => $this->name, + 'frequency' => $this->frequency, + 'output' => $this->output, + ]); return $mail; } public function toDiscord(): string { - return $this->message; + return "❌ Database backup for {$this->name} with frequency of {$this->frequency} was FAILED.\n\nReason: {$this->output}"; } } diff --git a/app/Notifications/Database/BackupSuccess.php b/app/Notifications/Database/BackupSuccess.php index dad3ee060..1b279d632 100644 --- a/app/Notifications/Database/BackupSuccess.php +++ b/app/Notifications/Database/BackupSuccess.php @@ -14,12 +14,13 @@ class BackupSuccess extends Notification implements ShouldQueue { use Queueable; - public string $message = 'Backup Success'; - + public string $name; + public string $frequency; public function __construct(ScheduledDatabaseBackup $backup, public $database) { - $this->message = "✅ Database backup for {$database->name} with frequency of $backup->frequency was successful."; + $this->name = $database->name; + $this->frequency = $backup->frequency; } public function via(object $notifiable): array @@ -42,13 +43,16 @@ public function via(object $notifiable): array public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("✅ Backup success for {$this->database->name}"); - $mail->line($this->message); + $mail->subject("✅ Backup successfully done for {$this->database->name}"); + $mail->view('emails.backup-success', [ + 'name' => $this->name, + 'frequency' => $this->frequency, + ]); return $mail; } public function toDiscord(): string { - return $this->message; + return "✅ Database backup for {$this->name} with frequency of {$this->frequency} was successful."; } } diff --git a/app/Notifications/Test.php b/app/Notifications/Test.php index eb266d0f9..36f0e1053 100644 --- a/app/Notifications/Test.php +++ b/app/Notifications/Test.php @@ -36,7 +36,7 @@ public function via(object $notifiable): array public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("Coolify Test Notification"); + $mail->subject("Test Email"); $mail->view('emails.test'); return $mail; } diff --git a/app/Notifications/TransactionalEmails/InvitationLink.php b/app/Notifications/TransactionalEmails/InvitationLink.php index 409234fd5..96157c7e6 100644 --- a/app/Notifications/TransactionalEmails/InvitationLink.php +++ b/app/Notifications/TransactionalEmails/InvitationLink.php @@ -20,16 +20,19 @@ public function via(): array return [TransactionalEmailChannel::class]; } - public function toMail(User $user): MailMessage + public function __construct(public User $user) { - $invitation = TeamInvitation::whereEmail($user->email)->first(); + } + public function toMail(): MailMessage + { + $invitation = TeamInvitation::whereEmail($this->user->email)->first(); $invitation_team = Team::find($invitation->team->id); $mail = new MailMessage(); $mail->subject('Invitation for ' . $invitation_team->name); $mail->view('emails.invitation-link', [ 'team' => $invitation_team->name, - 'email' => $user->email, + 'email' => $this->user->email, 'invitation_link' => $invitation->link, ]); return $mail; diff --git a/app/Notifications/TransactionalEmails/Test.php b/app/Notifications/TransactionalEmails/Test.php index f5962fc2a..3f3a009bb 100644 --- a/app/Notifications/TransactionalEmails/Test.php +++ b/app/Notifications/TransactionalEmails/Test.php @@ -24,7 +24,7 @@ public function via(): array public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject('Test Notification'); + $mail->subject('Test Email'); $mail->view('emails.test'); return $mail; } diff --git a/composer.json b/composer.json index b4164bade..c8acddbe5 100644 --- a/composer.json +++ b/composer.json @@ -15,6 +15,7 @@ "laravel/fortify": "^v1.16.0", "laravel/framework": "^v10.7.1", "laravel/horizon": "^5.15", + "laravel/prompts": "^0.1.6", "laravel/sanctum": "^v3.2.1", "laravel/tinker": "^v2.8.1", "laravel/ui": "^4.2", diff --git a/composer.lock b/composer.lock index 3ab2d9fa4..cef0f8b2b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "dbb08df7a80c46ce2b9b9fa397ed71c1", + "content-hash": "0603276b60e77cd859fabacdaaf31550", "packages": [ { "name": "aws/aws-crt-php", diff --git a/config/app.php b/config/app.php index 690029fd6..246ad1f99 100644 --- a/config/app.php +++ b/config/app.php @@ -17,7 +17,7 @@ | */ - 'name' => env('APP_NAME', 'Laravel'), + 'name' => env('APP_NAME', 'Coolify'), /* |-------------------------------------------------------------------------- diff --git a/config/auth.php b/config/auth.php index 9548c15de..83c36c0d3 100644 --- a/config/auth.php +++ b/config/auth.php @@ -94,7 +94,7 @@ 'users' => [ 'provider' => 'users', 'table' => 'password_reset_tokens', - 'expire' => 60, + 'expire' => 10, 'throttle' => 60, ], ], diff --git a/resources/views/components/emails/footer.blade.php b/resources/views/components/emails/footer.blade.php new file mode 100644 index 000000000..ae189c21c --- /dev/null +++ b/resources/views/components/emails/footer.blade.php @@ -0,0 +1,6 @@ + +Thank you.
+{{ config('app.name') ?? 'Coolify' }} + +{{ Illuminate\Mail\Markdown::parse('---') }} +{{ Illuminate\Mail\Markdown::parse('[Contact Support](https://docs.coollabs.io)') }} diff --git a/resources/views/components/emails/header.blade.php b/resources/views/components/emails/header.blade.php new file mode 100644 index 000000000..552085f0e --- /dev/null +++ b/resources/views/components/emails/header.blade.php @@ -0,0 +1 @@ +Hello, diff --git a/resources/views/components/emails/layout.blade.php b/resources/views/components/emails/layout.blade.php new file mode 100644 index 000000000..b9ecb355b --- /dev/null +++ b/resources/views/components/emails/layout.blade.php @@ -0,0 +1,6 @@ + +{{ Illuminate\Mail\Markdown::parse($slot) }} + + + + diff --git a/resources/views/emails/application-deployment-failed.blade.php b/resources/views/emails/application-deployment-failed.blade.php index c9a35860d..defe52e4f 100644 --- a/resources/views/emails/application-deployment-failed.blade.php +++ b/resources/views/emails/application-deployment-failed.blade.php @@ -1,8 +1,11 @@ -@if ($pull_request_id !== 0) - Pull Request #{{ $pull_request_id }} of {{ $name }} ({{ $fqdn }}) deployment failed: -@else - Deployment failed of {{ $name }} ({{ $fqdn }}): -@endif + + @if ($pull_request_id === 0) + Failed to deploy a new version of {{ $name }} at [{{ $fqdn }}]({{ $fqdn }}) . + @else + Failed to deploy a pull request #{{ $pull_request_id }} of {{ $name }} at + [{{ $fqdn }}]({{ $fqdn }}). + @endif -View Deployment Logs

+[View Deployment Logs]({{ $deployment_url }}) + +
diff --git a/resources/views/emails/application-deployment-success.blade.php b/resources/views/emails/application-deployment-success.blade.php index ae52aa913..d8426e33c 100644 --- a/resources/views/emails/application-deployment-success.blade.php +++ b/resources/views/emails/application-deployment-success.blade.php @@ -1,8 +1,10 @@ -@if ($pull_request_id === 0) - A new version of {{ $fqdn }} is available: -@else - Pull request #{{ $pull_request_id }} of {{ $name }} deployed successfully: Application Link | -@endif -View - Deployment Logs

+ + @if ($pull_request_id === 0) + A new version of {{ $name }} is available at [{{ $fqdn }}]({{ $fqdn }}) . + @else + Pull request #{{ $pull_request_id }} of {{ $name }} deployed successfully [{{ $fqdn }}]({{ $fqdn }}). + @endif + +[View Deployment Logs]({{ $deployment_url }}) + + diff --git a/resources/views/emails/application-status-changes.blade.php b/resources/views/emails/application-status-changes.blade.php index c2b73ef92..918a4aa55 100644 --- a/resources/views/emails/application-status-changes.blade.php +++ b/resources/views/emails/application-status-changes.blade.php @@ -1,2 +1,9 @@ -{{ $name }} has been stopped.

-Open in Coolify

+ + +{{ $name }} has been stopped. + +If it was your intention to stop this application, you can ignore this email. + +If not, [check what is going on]({{ $application_url }}). + + diff --git a/resources/views/emails/backup-failed.blade.php b/resources/views/emails/backup-failed.blade.php new file mode 100644 index 000000000..712777ef5 --- /dev/null +++ b/resources/views/emails/backup-failed.blade.php @@ -0,0 +1,8 @@ + +Database backup for {{ $name }} with frequency of {{ $frequency }} was FAILED. + +### Reason + +{{ $output }} + + diff --git a/resources/views/emails/backup-success.blade.php b/resources/views/emails/backup-success.blade.php new file mode 100644 index 000000000..0d54a254c --- /dev/null +++ b/resources/views/emails/backup-success.blade.php @@ -0,0 +1,3 @@ + +Database backup for {{ $name }} with frequency of {{ $frequency }} was successful. + diff --git a/resources/views/emails/invitation-link.blade.php b/resources/views/emails/invitation-link.blade.php index cdeccc974..05c36bb8a 100644 --- a/resources/views/emails/invitation-link.blade.php +++ b/resources/views/emails/invitation-link.blade.php @@ -1,13 +1,11 @@ -Hello,

+ -You have been invited to "{{ $team }}" on "{{ config('app.name') }}".

+You have been invited to "{{ $team }}" on "{{ config('app.name') }}". -Please click here to accept the invitation: Accept Invitation
-
+Please [click here]({{ $invitation_link }}) to accept the invitation. If you have any questions, please contact the team owner.

-If it was not you who requested this invitation, please ignore this ema il, or instantly revoke the invitation by -clicking here: Revoke Invitation

+If it was not you who requested this invitation, please ignore this email, or instantly revoke the invitation by clicking [here]({{ $invitation_link }}/revoke). -Thank you. +
diff --git a/resources/views/emails/reset-password.blade.php b/resources/views/emails/reset-password.blade.php index 30c7b9429..a50aa9eca 100644 --- a/resources/views/emails/reset-password.blade.php +++ b/resources/views/emails/reset-password.blade.php @@ -1,6 +1,7 @@ -A password reset requested for your email address on "{{ config('app.name') }}".

+ +A password reset has been requested for this email address on [{{ config('app.name') }}]({{ config('app.url') }}). -Please click the following link to reset your password: Password - Reset

+Click [here]({{ $url }}) to reset your password. -This password reset link will expire in {{ $count }} minutes. +This link will expire in {{ $count }} minutes. +
diff --git a/resources/views/emails/subscription-invoice-failed.blade.php b/resources/views/emails/subscription-invoice-failed.blade.php index 9d04eebd4..93103dc67 100644 --- a/resources/views/emails/subscription-invoice-failed.blade.php +++ b/resources/views/emails/subscription-invoice-failed.blade.php @@ -1,4 +1,6 @@ -Your last invoice has failed to be paid for Coolify Cloud. Please update payment details on your Stripe Customer Portal. -

-Thanks,
-Coolify Cloud + +Your last invoice has failed to be paid for Coolify Cloud. + +Please update payment details [here]({{$stripeCustomerPortal}}). + + diff --git a/resources/views/emails/test.blade.php b/resources/views/emails/test.blade.php index 63b0b45cc..a845efee5 100644 --- a/resources/views/emails/test.blade.php +++ b/resources/views/emails/test.blade.php @@ -1 +1,3 @@ -If you are seeing this, it means that your SMTP settings are correct. + +If you are seeing this, it means that your Email settings are correct. + diff --git a/resources/views/emails/waitlist-confirmation.blade.php b/resources/views/emails/waitlist-confirmation.blade.php index 2d7e3d6da..363f0b82f 100644 --- a/resources/views/emails/waitlist-confirmation.blade.php +++ b/resources/views/emails/waitlist-confirmation.blade.php @@ -1,4 +1,9 @@ -Someone added this email to the Coolify Cloud's waitlist. -
-Click here to confirm! The link will expire in {{config('constants.waitlist.expiration')}} minutes.

-You have no idea what Coolify Cloud is or this waitlist? Click here to remove you from the waitlist. + +Someone added this email to the Coolify Cloud's waitlist. [Click here]({{ $confirmation_url }}) to confirm! + +The link will expire in {{config('constants.waitlist.expiration')}} minutes. + + +You have no idea what [Coolify Cloud](https://coolify.io) is or this waitlist? [Click here]({{ $cancel_url }}) to remove you from the waitlist. + + diff --git a/resources/views/emails/waitlist-invitation.blade.php b/resources/views/emails/waitlist-invitation.blade.php index 4274fba13..89ee8fa52 100644 --- a/resources/views/emails/waitlist-invitation.blade.php +++ b/resources/views/emails/waitlist-invitation.blade.php @@ -1,13 +1,19 @@ -You have been invited to join the Coolify Cloud. Login here -
-
+ +You have been invited to join the Coolify Cloud. + +[Login here]({{base_url()}}/login) + Here is your initial login information. -
-Email:
-{{ $email }} -

-Password:
-{{ $password }} -

+ +Email: + +**{{ $email }}** + +Initial Password: + +**{{ $password }}** + (You will forced to change it on first login.) +
+ From 06057727150218c881c285aee9adc5195f42fc79 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 1 Sep 2023 15:55:55 +0200 Subject: [PATCH 5/5] better emails --- resources/views/components/emails/footer.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/components/emails/footer.blade.php b/resources/views/components/emails/footer.blade.php index ae189c21c..31077fabf 100644 --- a/resources/views/components/emails/footer.blade.php +++ b/resources/views/components/emails/footer.blade.php @@ -1,6 +1,6 @@ +{{ Illuminate\Mail\Markdown::parse('---') }} Thank you.
{{ config('app.name') ?? 'Coolify' }} -{{ Illuminate\Mail\Markdown::parse('---') }} {{ Illuminate\Mail\Markdown::parse('[Contact Support](https://docs.coollabs.io)') }}