ux(wg): endpoint field is host-only (no apparent double port) (v0.9.47)

The server config showed a "Port" and an "Endpoint" that repeated the same
:51820, so it looked like the port had to be entered twice. It never did (since
0.9.43 a bare host gets the listen port appended) — but the UI didn't say so.
Now the field is labelled "Public endpoint (host)", the placeholder shows only
the host (port stripped via Str::before), and the hint explains the port is
taken from the listen port automatically; a different port is only needed for
port-forwarding (host:port). Display/copy only — no behaviour change.

Pint clean, /wireguard server tab loads 200 with no console errors, lang
parity 89/89, 354 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat/v1-foundation v0.9.47
boban 2026-06-21 23:25:44 +02:00
parent 645d7dd4a4
commit c89b28e1ef
5 changed files with 16 additions and 9 deletions

View File

@ -13,7 +13,14 @@ getaggte Releases (Kanal `stable`, optional `beta`) — niemals Entwicklungs-Bui
_Keine offenen Änderungen — der nächste Stand wird hier gesammelt und als `vX.Y.Z` getaggt._ _Keine offenen Änderungen — der nächste Stand wird hier gesammelt und als `vX.Y.Z` getaggt._
## [0.9.46] - 2026-06-21 ## [0.9.47] - 2026-06-21
### Geändert
- **Endpoint-Feld ist jetzt „nur Host".** Es wirkte, als müsse man den Port zweimal eintragen (einmal
als Listen-Port, einmal im Endpoint). Tatsächlich genügt der Host: Label heißt jetzt „Öffentlicher
Endpoint (Host)", der Platzhalter zeigt nur den Host (ohne `:Port`), und der Hinweis erklärt, dass
der Port automatisch vom Listen-Port kommt. Ein abweichender Port ist nur bei Portweiterleitung
nötig (`host:port`). Funktion war seit 0.9.43 schon so — jetzt ist es auch in der Oberfläche klar.
### Behoben ### Behoben
- **Traffic-Kopfzeile zeigte 0 B, obwohl der Peer Traffic hatte.** „Empfangen/Gesendet" oben speiste - **Traffic-Kopfzeile zeigte 0 B, obwohl der Peer Traffic hatte.** „Empfangen/Gesendet" oben speiste

View File

@ -2,7 +2,7 @@
return [ return [
// First tagged release is v0.1.0 (semantic, not -dev). // First tagged release is v0.1.0 (semantic, not -dev).
'version' => '0.9.46', 'version' => '0.9.47',
// Deployed commit + branch. install.sh bakes these into .env from the host's .git (the prod // Deployed commit + branch. install.sh bakes these into .env from the host's .git (the prod
// image ships no .git); the Versions page prefers them and falls back to a live .git read in // image ships no .git); the Versions page prefers them and falls back to a live .git read in

View File

@ -68,8 +68,8 @@ return [
'ssh_lock_on_body' => 'Danach ist Port 22 nur noch über den Tunnel erreichbar. Geht dein WG-Zugang verloren, sperrst du dich selbst per SSH aus — Rettung nur über die Server-Konsole. Empfehlung: vorher einen zweiten WG-Peer als Backup anlegen. Bestehende SSH-Sitzungen bleiben verbunden.', 'ssh_lock_on_body' => 'Danach ist Port 22 nur noch über den Tunnel erreichbar. Geht dein WG-Zugang verloren, sperrst du dich selbst per SSH aus — Rettung nur über die Server-Konsole. Empfehlung: vorher einen zweiten WG-Peer als Backup anlegen. Bestehende SSH-Sitzungen bleiben verbunden.',
'ssh_lock_off_title' => 'SSH-Sperre aufheben?', 'ssh_lock_off_title' => 'SSH-Sperre aufheben?',
'ssh_lock_off_body' => 'Port 22 wird danach wieder normal erreichbar (vorbehaltlich einer Cloud-/Host-Firewall).', 'ssh_lock_off_body' => 'Port 22 wird danach wieder normal erreichbar (vorbehaltlich einer Cloud-/Host-Firewall).',
'endpoint_label' => 'Öffentlicher Endpoint', 'endpoint_label' => 'Öffentlicher Endpoint (Host)',
'endpoint_hint' => 'IP oder Host (Port optional — sonst Listen-Port). Betrifft nur künftige Peer-Configs.', 'endpoint_hint' => 'Nur den Host eintragen (z. B. 10.10.90.165) — der Port kommt automatisch vom Listen-Port. Einen abweichenden Port nur bei Portweiterleitung angeben (host:port). Betrifft nur künftige Peer-Configs.',
'dns_label' => 'DNS-Server', 'dns_label' => 'DNS-Server',
'dns_hint' => 'DNS für neue Peer-Configs (z. B. dein eigenes Gateway 10.0.0.1). Mehrere durch Komma. Betrifft nur künftige Clients.', 'dns_hint' => 'DNS für neue Peer-Configs (z. B. dein eigenes Gateway 10.0.0.1). Mehrere durch Komma. Betrifft nur künftige Clients.',
'dns_invalid' => 'Ungültige DNS-Adresse(n) — nur IPv4, kommagetrennt.', 'dns_invalid' => 'Ungültige DNS-Adresse(n) — nur IPv4, kommagetrennt.',
@ -89,7 +89,7 @@ return [
'setup_subnet' => 'Subnetz', 'setup_subnet' => 'Subnetz',
'setup_port' => 'Listen-Port (UDP)', 'setup_port' => 'Listen-Port (UDP)',
'setup_endpoint' => 'Öffentlicher Endpoint (optional)', 'setup_endpoint' => 'Öffentlicher Endpoint (optional)',
'setup_endpoint_hint' => 'Leer = automatisch erkannte öffentliche IP. Format host:port (z. B. 10.10.90.165:51820) — fehlt der Port, wird der Listen-Port ergänzt.', 'setup_endpoint_hint' => 'Leer = automatisch erkannte öffentliche IP. Sonst nur den Host (z. B. 10.10.90.165) — der Port kommt automatisch vom Listen-Port.',
'setup_peer' => 'Name des ersten Clients', 'setup_peer' => 'Name des ersten Clients',
'setup_submit' => 'Einrichten', 'setup_submit' => 'Einrichten',
'no_host_response' => 'Keine Antwort vom Host — der WireGuard-Host-Dienst läuft nicht. Stack aktualisieren (Version-Seite) und erneut versuchen.', 'no_host_response' => 'Keine Antwort vom Host — der WireGuard-Host-Dienst läuft nicht. Stack aktualisieren (Version-Seite) und erneut versuchen.',

View File

@ -68,8 +68,8 @@ return [
'ssh_lock_on_body' => 'Port 22 will then only be reachable through the tunnel. If you lose your WG access you lock yourself out of SSH — recovery only via the server console. Recommended: create a second WG peer as a backup first. Existing SSH sessions stay connected.', 'ssh_lock_on_body' => 'Port 22 will then only be reachable through the tunnel. If you lose your WG access you lock yourself out of SSH — recovery only via the server console. Recommended: create a second WG peer as a backup first. Existing SSH sessions stay connected.',
'ssh_lock_off_title' => 'Unlock SSH?', 'ssh_lock_off_title' => 'Unlock SSH?',
'ssh_lock_off_body' => 'Port 22 becomes reachable normally again (subject to any cloud/host firewall).', 'ssh_lock_off_body' => 'Port 22 becomes reachable normally again (subject to any cloud/host firewall).',
'endpoint_label' => 'Public endpoint', 'endpoint_label' => 'Public endpoint (host)',
'endpoint_hint' => 'IP or host (port optional — otherwise the listen port). Affects only future peer configs.', 'endpoint_hint' => 'Enter just the host (e.g. 10.10.90.165) — the port comes from the listen port automatically. Only set a different port for port-forwarding (host:port). Affects only future peer configs.',
'dns_label' => 'DNS server', 'dns_label' => 'DNS server',
'dns_hint' => 'DNS for new peer configs (e.g. your own gateway 10.0.0.1). Multiple comma-separated. Only affects future clients.', 'dns_hint' => 'DNS for new peer configs (e.g. your own gateway 10.0.0.1). Multiple comma-separated. Only affects future clients.',
'dns_invalid' => 'Invalid DNS address(es) — IPv4 only, comma-separated.', 'dns_invalid' => 'Invalid DNS address(es) — IPv4 only, comma-separated.',
@ -89,7 +89,7 @@ return [
'setup_subnet' => 'Subnet', 'setup_subnet' => 'Subnet',
'setup_port' => 'Listen port (UDP)', 'setup_port' => 'Listen port (UDP)',
'setup_endpoint' => 'Public endpoint (optional)', 'setup_endpoint' => 'Public endpoint (optional)',
'setup_endpoint_hint' => 'Empty = auto-detected public IP. Format host:port (e.g. 10.10.90.165:51820) — if the port is missing the listen port is appended.', 'setup_endpoint_hint' => 'Empty = auto-detected public IP. Otherwise just the host (e.g. 10.10.90.165) — the port comes from the listen port automatically.',
'setup_peer' => 'First client name', 'setup_peer' => 'First client name',
'setup_submit' => 'Set up', 'setup_submit' => 'Set up',
'no_host_response' => 'No response from the host — the WireGuard host service is not running. Update the stack (Versions page) and try again.', 'no_host_response' => 'No response from the host — the WireGuard host service is not running. Update the stack (Versions page) and try again.',

View File

@ -134,7 +134,7 @@
<label class="block font-mono text-[11px] text-ink-3">{{ __('wireguard.endpoint_label') }}</label> <label class="block font-mono text-[11px] text-ink-3">{{ __('wireguard.endpoint_label') }}</label>
<div class="flex flex-wrap items-center gap-2"> <div class="flex flex-wrap items-center gap-2">
<input wire:model="newEndpoint" type="text" maxlength="128" <input wire:model="newEndpoint" type="text" maxlength="128"
placeholder="{{ $status['server']['endpoint'] ?: 'host:51820' }}" placeholder="{{ \Illuminate\Support\Str::before($status['server']['endpoint'], ':') ?: $status['server']['server_ip'] ?: 'host' }}"
class="min-w-0 flex-1 rounded-md border border-line bg-inset px-3 py-1.5 font-mono text-sm text-ink placeholder:text-ink-4 focus:border-accent/40 focus:outline-none" /> class="min-w-0 flex-1 rounded-md border border-line bg-inset px-3 py-1.5 font-mono text-sm text-ink placeholder:text-ink-4 focus:border-accent/40 focus:outline-none" />
<x-btn variant="primary" type="submit" wire:loading.attr="disabled" wire:target="setEndpoint">{{ __('wireguard.apply') }}</x-btn> <x-btn variant="primary" type="submit" wire:loading.attr="disabled" wire:target="setEndpoint">{{ __('wireguard.apply') }}</x-btn>
</div> </div>