diff --git a/app/Console/Commands/TestEmail.php b/app/Console/Commands/TestEmail.php index 435cd59b2..682848a05 100644 --- a/app/Console/Commands/TestEmail.php +++ b/app/Console/Commands/TestEmail.php @@ -2,12 +2,14 @@ namespace App\Console\Commands; +use App\Jobs\SendConfirmationForWaitlistJob; use App\Models\Application; use App\Models\ApplicationPreview; use App\Models\ScheduledDatabaseBackup; use App\Models\StandalonePostgresql; use App\Models\TeamInvitation; use App\Models\User; +use App\Models\Waitlist; use App\Notifications\Application\DeploymentFailed; use App\Notifications\Application\DeploymentSuccess; use App\Notifications\Application\StatusChanged; @@ -19,6 +21,7 @@ use Illuminate\Console\Command; use Illuminate\Mail\Message; use Illuminate\Notifications\Messages\MailMessage; +use Illuminate\Support\Facades\Process; use Mail; use Str; @@ -148,23 +151,20 @@ public function handle() case 'waitlist-invitation-link': $this->mail = new MailMessage(); $this->mail->view('emails.waitlist-invitation', [ - 'email' => 'test2@example.com', - 'password' => "supersecretpassword", + 'loginLink' => 'https://coolify.io', ]); $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(); + $found = Waitlist::where('email', $this->email)->first(); + if ($found) { + SendConfirmationForWaitlistJob::dispatch($this->email, $found->uuid); + + } else { + throw new Exception('Waitlist not found'); + } + break; } } diff --git a/app/Console/Commands/WaitlistInvite.php b/app/Console/Commands/WaitlistInvite.php index a3b47089a..61d0bac18 100644 --- a/app/Console/Commands/WaitlistInvite.php +++ b/app/Console/Commands/WaitlistInvite.php @@ -91,8 +91,6 @@ private function send_email() $loginLink = route('auth.link', ['token' => $token]); $mail = new MailMessage(); $mail->view('emails.waitlist-invitation', [ - 'email' => $this->next_patient->email, - 'password' => $this->password, 'loginLink' => $loginLink, ]); $mail->subject('Congratulations! You are invited to join Coolify Cloud.'); diff --git a/app/Jobs/CleanupInstanceStuffsJob.php b/app/Jobs/CleanupInstanceStuffsJob.php index 1275839d9..96fd490ba 100644 --- a/app/Jobs/CleanupInstanceStuffsJob.php +++ b/app/Jobs/CleanupInstanceStuffsJob.php @@ -27,7 +27,7 @@ public function __construct() public function handle(): void { try { - $this->cleanup_waitlist(); + // $this->cleanup_waitlist(); } catch (\Exception $e) { send_internal_notification('CleanupInstanceStuffsJob failed with error: ' . $e->getMessage()); ray($e->getMessage()); diff --git a/app/Jobs/SendConfirmationForWaitlistJob.php b/app/Jobs/SendConfirmationForWaitlistJob.php index 041b418ec..a8790f27f 100755 --- a/app/Jobs/SendConfirmationForWaitlistJob.php +++ b/app/Jobs/SendConfirmationForWaitlistJob.php @@ -25,10 +25,8 @@ public function handle() { try { $mail = new MailMessage(); - $confirmation_url = base_url() . '/webhooks/waitlist/confirm?email=' . $this->email . '&confirmation_code=' . $this->uuid; $cancel_url = base_url() . '/webhooks/waitlist/cancel?email=' . $this->email . '&confirmation_code=' . $this->uuid; - $mail->view('emails.waitlist-confirmation', [ 'confirmation_url' => $confirmation_url, @@ -37,7 +35,7 @@ public function handle() $mail->subject('You are on the waitlist!'); send_user_an_email($mail, $this->email); } catch (\Throwable $th) { - send_internal_notification("SendConfirmationForWaitlistJob failed for {$mail} with error: " . $th->getMessage()); + send_internal_notification("SendConfirmationForWaitlistJob failed for {$this->email} with error: " . $th->getMessage()); ray($th->getMessage()); throw $th; } diff --git a/routes/webhooks.php b/routes/webhooks.php index 51ab33166..f05df9c5a 100644 --- a/routes/webhooks.php +++ b/routes/webhooks.php @@ -181,14 +181,24 @@ ray($email, $confirmation_code); try { $found = Waitlist::where('uuid', $confirmation_code)->where('email', $email)->first(); - if ($found && !$found->verified && $found->created_at > now()->subMinutes(config('constants.waitlist.expiration'))) { - $found->verified = true; - $found->save(); - send_internal_notification('Waitlist confirmed: ' . $email); - return 'Thank you for confirming your email address. We will notify you when you are next in line.'; + if ($found) { + if (!$found->verified) { + if ($found->created_at > now()->subMinutes(config('constants.waitlist.expiration'))) { + $found->verified = true; + $found->save(); + send_internal_notification('Waitlist confirmed: ' . $email); + return 'Thank you for confirming your email address. We will notify you when you are next in line.'; + } else { + $found->delete(); + send_internal_notification('Waitlist expired: ' . $email); + return 'Your confirmation code has expired. Please sign up again.'; + } + } } return redirect()->route('dashboard'); - } catch (error) { + } catch (Exception $e) { + send_internal_notification('Waitlist confirmation failed: ' . $e->getMessage()); + ray($e->getMessage()); return redirect()->route('dashboard'); } })->name('webhooks.waitlist.confirm'); @@ -203,7 +213,9 @@ return 'Your email address has been removed from the waitlist.'; } return redirect()->route('dashboard'); - } catch (error) { + } catch (Exception $e) { + send_internal_notification('Waitlist cancellation failed: ' . $e->getMessage()); + ray($e->getMessage()); return redirect()->route('dashboard'); } })->name('webhooks.waitlist.cancel'); @@ -225,7 +237,7 @@ ]); $type = data_get($event, 'type'); $data = data_get($event, 'data.object'); - ray('Event: '. $type); + ray('Event: ' . $type); switch ($type) { case 'checkout.session.completed': $clientReferenceId = data_get($data, 'client_reference_id'); @@ -263,13 +275,13 @@ 'stripe_invoice_paid' => true, ]); break; - // case 'invoice.payment_failed': - // $customerId = data_get($data, 'customer'); - // $subscription = Subscription::where('stripe_customer_id', $customerId)->first(); - // if ($subscription) { - // SubscriptionInvoiceFailedJob::dispatch($subscription->team); - // } - // break; + // case 'invoice.payment_failed': + // $customerId = data_get($data, 'customer'); + // $subscription = Subscription::where('stripe_customer_id', $customerId)->first(); + // if ($subscription) { + // SubscriptionInvoiceFailedJob::dispatch($subscription->team); + // } + // break; case 'customer.subscription.updated': $customerId = data_get($data, 'customer'); $subscription = Subscription::where('stripe_customer_id', $customerId)->firstOrFail(); @@ -287,9 +299,9 @@ ]); ray($feedback, $comment, $alreadyCancelAtPeriodEnd, $cancelAtPeriodEnd); if ($feedback) { - $reason = "Cancellation feedback for {$subscription->team->id}: '" . $feedback ."'"; + $reason = "Cancellation feedback for {$subscription->team->id}: '" . $feedback . "'"; if ($comment) { - $reason .= ' with comment: \'' . $comment ."'"; + $reason .= ' with comment: \'' . $comment . "'"; } send_internal_notification($reason); } @@ -307,7 +319,7 @@ $subscription = Subscription::where('stripe_customer_id', $customerId)->firstOrFail(); $subscription->update([ 'stripe_subscription_id' => null, - 'stripe_plan_id'=> null, + 'stripe_plan_id' => null, 'stripe_cancel_at_period_end' => false, 'stripe_invoice_paid' => false, ]);