From e96f4c1c1af47f3620b72d559e789cd6435b780a Mon Sep 17 00:00:00 2001 From: nexxo Date: Sat, 25 Jul 2026 23:56:50 +0200 Subject: [PATCH] fix(datacenters): a code becomes a DNS label, so validate it as one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit alpha_dash accepted eu_west, -edge and edge-, none of which are valid DNS labels — every host in such a datacenter would have failed registration and, because DNS is non-fatal, silently ended up without a name. The console now requires a proper label, and the step normalises anything created before that rule so existing rows still get a usable name. Co-Authored-By: Claude Opus 4.8 --- app/Livewire/Admin/Datacenters.php | 7 +++++-- app/Provisioning/Steps/Host/RegisterHostDns.php | 6 +++++- tests/Feature/Provisioning/HostStepsTest.php | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/app/Livewire/Admin/Datacenters.php b/app/Livewire/Admin/Datacenters.php index 3003204..a7e3c66 100644 --- a/app/Livewire/Admin/Datacenters.php +++ b/app/Livewire/Admin/Datacenters.php @@ -11,7 +11,7 @@ use Livewire\Component; #[Layout('layouts.admin')] class Datacenters extends Component { - #[Validate('required|string|max:8|alpha_dash|unique:datacenters,code')] + #[Validate(['required', 'string', 'max:8', 'regex:/^[a-z0-9]([a-z0-9-]{0,6}[a-z0-9])?$/', 'unique:datacenters,code'])] public string $code = ''; #[Validate('required|string|max:255')] @@ -31,7 +31,10 @@ class Datacenters extends Component // Country must be one of the curated list — a forged request can bypass // the