*/ public function via(object $notifiable): array { $preferences = $notifiable->notification_preferences ?? []; $channels = $preferences['ssl'] ?? ['mail']; return $channels; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { $message = (new MailMessage) ->subject($this->isExpired ? "🔴 SSL Certificate Expired: {$this->site->name}" : "⚠️ SSL Certificate Expiring Soon: {$this->site->name}") ->line($this->isExpired ? "The SSL certificate for **{$this->site->name}** has **expired**." : "The SSL certificate for **{$this->site->name}** is expiring soon.") ->line("URL: {$this->site->url}") ->line("Issuer: {$this->issuer}") ->line($this->isExpired ? "Expired on: {$this->expiresAt->format('Y-m-d')}" : "Expires on: {$this->expiresAt->format('Y-m-d')} ({$this->daysRemaining} days remaining)") ->action('View Site Details', url("/sites/{$this->site->id}")); if ($this->isExpired) { $message->error(); $message->line('⚠️ Your site visitors may see security warnings. Please renew the certificate immediately.'); } else { $message->warning(); $message->line('Please renew the certificate before it expires to avoid service disruption.'); } return $message; } /** * Get the Slack representation of the notification. */ public function toSlack(object $notifiable): SlackMessage { $color = $this->isExpired ? 'danger' : 'warning'; $emoji = $this->isExpired ? '🔴' : '⚠️'; return (new SlackMessage) ->from('Site Monitor') ->to(config('services.slack.channel')) ->content($this->isExpired ? "{$emoji} SSL Certificate Expired!" : "{$emoji} SSL Certificate Expiring Soon!") ->attachment(function ($attachment) use ($color) { $attachment ->color($color) ->title($this->site->name, url("/sites/{$this->site->id}")) ->fields([ 'URL' => $this->site->url, 'Issuer' => $this->issuer, 'Expires' => $this->expiresAt->format('Y-m-d'), 'Status' => $this->isExpired ? 'EXPIRED' : "{$this->daysRemaining} days remaining", ]); }); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { return [ 'site_id' => $this->site->id, 'site_name' => $this->site->name, 'site_url' => $this->site->url, 'issuer' => $this->issuer, 'expires_at' => $this->expiresAt->toDateTimeString(), 'days_remaining' => $this->daysRemaining, 'is_expired' => $this->isExpired, ]; } }