CluPilotCloud/app/Support/HostnamePattern.php

30 lines
1.1 KiB
PHP

<?php
namespace App\Support;
/**
* Ob eine Zeichenkette ein Hostname sein kann — an EINER Stelle geprüft.
*
* Vorher stand das Muster nur in `BindHosts::isHost()`. `PublishTunnelNames`
* liest dieselben `.env`-Werte weiter, nachdem `bind-hosts` sie schon
* geschrieben hat — und auf einer Produktivmaschine stand dort bereits
* `SITE_HOST=[www.clupilot.com](https://www.clupilot.com)`, ein Markdown-Link
* aus einem Kopiervorgang, von VOR dieser Prüfung. `bind-hosts` weist einen
* neuen Wert dieser Form inzwischen zurück, ändert aber nichts an einem, der
* schon in der Datei steht — und ohne dieselbe Prüfung beim Veröffentlichen
* würde genau dieser Unsinn in `platform.hosts` landen.
*
* Hier statt in `BindHosts` oder `PublishTunnelNames` selbst: beide Befehle
* brauchen das Muster, und keiner der beiden soll den anderen kennen müssen,
* nur um daran zu kommen.
*/
final class HostnamePattern
{
private const PATTERN = '/^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)+$/';
public static function matches(string $name): bool
{
return (bool) preg_match(self::PATTERN, $name);
}
}