30 lines
1.1 KiB
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);
|
|
}
|
|
}
|