fix: test notifications to only send it to the right channel

This commit is contained in:
Andras Bacsai
2024-12-11 11:57:56 +01:00
parent c08423395c
commit b442965976
7 changed files with 99 additions and 73 deletions

View File

@@ -154,7 +154,7 @@ class Discord extends Component
public function sendTestNotification() public function sendTestNotification()
{ {
try { try {
$this->team->notify(new Test); $this->team->notify(new Test(channel: 'discord'));
$this->dispatch('success', 'Test notification sent.'); $this->dispatch('success', 'Test notification sent.');
} catch (\Throwable $e) { } catch (\Throwable $e) {
return handleError($e, $this); return handleError($e, $this);

View File

@@ -106,6 +106,7 @@ class Email extends Component
$this->emails = auth()->user()->email; $this->emails = auth()->user()->email;
$this->settings = $this->team->emailNotificationSettings; $this->settings = $this->team->emailNotificationSettings;
$this->syncData(); $this->syncData();
$this->testEmailAddress = auth()->user()->email;
} catch (\Throwable $e) { } catch (\Throwable $e) {
return handleError($e, $this); return handleError($e, $this);
} }
@@ -317,7 +318,7 @@ class Email extends Component
'test-email:'.$this->team->id, 'test-email:'.$this->team->id,
$perMinute = 0, $perMinute = 0,
function () { function () {
$this->team?->notify(new Test($this->testEmailAddress)); $this->team?->notify(new Test($this->testEmailAddress, 'email'));
$this->dispatch('success', 'Test Email sent.'); $this->dispatch('success', 'Test Email sent.');
}, },
$decaySeconds = 10, $decaySeconds = 10,

View File

@@ -154,7 +154,7 @@ class Slack extends Component
public function sendTestNotification() public function sendTestNotification()
{ {
try { try {
$this->team->notify(new Test); $this->team->notify(new Test(channel: 'slack'));
$this->dispatch('success', 'Test notification sent.'); $this->dispatch('success', 'Test notification sent.');
} catch (\Throwable $e) { } catch (\Throwable $e) {
return handleError($e, $this); return handleError($e, $this);

View File

@@ -223,7 +223,7 @@ class Telegram extends Component
public function sendTestNotification() public function sendTestNotification()
{ {
try { try {
$this->team->notify(new Test); $this->team->notify(new Test(channel: 'telegram'));
$this->dispatch('success', 'Test notification sent.'); $this->dispatch('success', 'Test notification sent.');
} catch (\Throwable $e) { } catch (\Throwable $e) {
return handleError($e, $this); return handleError($e, $this);

View File

@@ -3,8 +3,10 @@
namespace App\Livewire; namespace App\Livewire;
use App\Models\InstanceSettings; use App\Models\InstanceSettings;
use App\Models\Team;
use App\Notifications\Test; use App\Notifications\Test;
use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\RateLimiter;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate; use Livewire\Attributes\Validate;
use Livewire\Component; use Livewire\Component;
@@ -12,6 +14,9 @@ class SettingsEmail extends Component
{ {
public InstanceSettings $settings; public InstanceSettings $settings;
#[Locked]
public Team $team;
#[Validate(['boolean'])] #[Validate(['boolean'])]
public bool $smtpEnabled = false; public bool $smtpEnabled = false;
@@ -58,6 +63,8 @@ class SettingsEmail extends Component
} }
$this->settings = instanceSettings(); $this->settings = instanceSettings();
$this->syncData(); $this->syncData();
$this->team = auth()->user()->currentTeam();
$this->testEmailAddress = auth()->user()->email;
} }
public function syncData(bool $toModel = false) public function syncData(bool $toModel = false)
@@ -219,7 +226,7 @@ class SettingsEmail extends Component
'test-email:'.$this->team->id, 'test-email:'.$this->team->id,
$perMinute = 0, $perMinute = 0,
function () { function () {
$this->team?->notify(new Test($this->testEmailAddress)); $this->team?->notify(new Test($this->testEmailAddress, 'email'));
$this->dispatch('success', 'Test Email sent.'); $this->dispatch('success', 'Test Email sent.');
}, },
$decaySeconds = 10, $decaySeconds = 10,

View File

@@ -2,7 +2,10 @@
namespace App\Notifications; namespace App\Notifications;
use App\Notifications\Channels\DiscordChannel;
use App\Notifications\Channels\EmailChannel; use App\Notifications\Channels\EmailChannel;
use App\Notifications\Channels\SlackChannel;
use App\Notifications\Channels\TelegramChannel;
use App\Notifications\Dto\DiscordMessage; use App\Notifications\Dto\DiscordMessage;
use App\Notifications\Dto\SlackMessage; use App\Notifications\Dto\SlackMessage;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
@@ -17,14 +20,26 @@ class Test extends Notification implements ShouldQueue
public $tries = 5; public $tries = 5;
public function __construct(public ?string $emails = null) public function __construct(public ?string $emails = null, public ?string $channel = null)
{ {
$this->onQueue('high'); $this->onQueue('high');
} }
public function via(object $notifiable): array public function via(object $notifiable): array
{ {
return $notifiable->getEnabledChannels('test'); if ($this->channel) {
$channels = match ($this->channel) {
'email' => [EmailChannel::class],
'discord' => [DiscordChannel::class],
'telegram' => [TelegramChannel::class],
'slack' => [SlackChannel::class],
default => [],
};
} else {
$channels = $notifiable->getEnabledChannels('test');
}
return $channels;
} }
public function middleware(object $notifiable, string $channel) public function middleware(object $notifiable, string $channel)

View File

@@ -12,7 +12,8 @@
@if (is_transactional_emails_enabled() && auth()->user()->isAdminFromSession()) @if (is_transactional_emails_enabled() && auth()->user()->isAdminFromSession())
<x-modal-input buttonTitle="Send Test Email" title="Send Test Email"> <x-modal-input buttonTitle="Send Test Email" title="Send Test Email">
<form wire:submit.prevent="sendTestEmail" class="flex flex-col w-full gap-2"> <form wire:submit.prevent="sendTestEmail" class="flex flex-col w-full gap-2">
<x-forms.input wire:model="testEmailAddress" placeholder="test@example.com" id="testEmailAddress" label="Recipients" required /> <x-forms.input wire:model="testEmailAddress" placeholder="test@example.com" id="testEmailAddress"
label="Recipients" required />
<x-forms.button type="submit" @click="modalOpen=false"> <x-forms.button type="submit" @click="modalOpen=false">
Send Email Send Email
</x-forms.button> </x-forms.button>
@@ -50,7 +51,8 @@
</div> </div>
<div class="flex flex-col w-full gap-2 xl:flex-row"> <div class="flex flex-col w-full gap-2 xl:flex-row">
<x-forms.input id="smtpUsername" label="SMTP Username" /> <x-forms.input id="smtpUsername" label="SMTP Username" />
<x-forms.input id="smtpPassword" type="password" label="SMTP Password" autocomplete="new-password" /> <x-forms.input id="smtpPassword" type="password" label="SMTP Password"
autocomplete="new-password" />
<x-forms.input id="smtpTimeout" helper="Timeout value for sending emails." label="Timeout" /> <x-forms.input id="smtpTimeout" helper="Timeout value for sending emails." label="Timeout" />
</div> </div>
</div> </div>
@@ -69,7 +71,8 @@
</div> </div>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="flex flex-col w-full gap-2 xl:flex-row"> <div class="flex flex-col w-full gap-2 xl:flex-row">
<x-forms.input type="password" id="resendApiKey" placeholder="API key" required label="API Key" autocomplete="new-password" /> <x-forms.input type="password" id="resendApiKey" placeholder="API key" required label="API Key"
autocomplete="new-password" />
</div> </div>
</div> </div>
</form> </form>