diff --git a/app/Jobs/RegenerateSslCertJob.php b/app/Jobs/RegenerateSslCertJob.php new file mode 100644 index 000000000..387408b89 --- /dev/null +++ b/app/Jobs/RegenerateSslCertJob.php @@ -0,0 +1,66 @@ +server_id) { + $query->where('server_id', $this->server_id); + } + + if (! $this->force_regeneration) { + $query->where('valid_until', '<=', now()->addDays(14)); + } + + $certificates = $query->get(); + + if ($certificates->isEmpty()) { + return; + } + + $regenerated = collect(); + + foreach ($certificates as $certificate) { + try { + SSLHelper::generateSslCertificate( + commonName: $certificate->common_name, + subjectAlternativeNames: $certificate->subject_alternative_names, + resourceType: $certificate->resource_type, + resourceId: $certificate->resource_id, + serverId: $certificate->server_id, + validityDays: 365 + ); + $regenerated->push($certificate); + } catch (\Exception $e) { + Log::error('Failed to regenerate SSL certificate: '.$e->getMessage()); + } + } + + if ($regenerated->isNotEmpty()) { + $this->team?->notify(new SslExpirationNotification($regenerated)); + } + } +}