64 lines
4.0 KiB
PHP
64 lines
4.0 KiB
PHP
<div class="mx-auto max-w-3xl space-y-6">
|
|
<div class="animate-rise">
|
|
<h1 class="text-2xl font-bold tracking-tight text-ink">{{ __('infrastructure.title') }}</h1>
|
|
<p class="mt-1 text-sm text-muted">{{ __('infrastructure.subtitle') }}</p>
|
|
</div>
|
|
|
|
{{-- One page, one save: every field here is a plain deployment setting —
|
|
no password re-confirmation, no per-field confirm modal (R23 governs
|
|
destructive actions; saving a URL is not one), unlike Zugangsdaten. --}}
|
|
<form wire:submit="save" class="space-y-6">
|
|
<div class="space-y-4 rounded-lg border border-line bg-surface p-6 shadow-xs animate-rise">
|
|
<div>
|
|
<h2 class="font-semibold text-ink">{{ __('infrastructure.dns_title') }}</h2>
|
|
<p class="mt-1 text-sm text-muted">{{ __('infrastructure.dns_body') }}</p>
|
|
</div>
|
|
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
|
<x-ui.input name="dnsZone" wire:model="dnsZone" :label="__('infrastructure.dns_zone')" :hint="__('infrastructure.dns_zone_hint')" />
|
|
<x-ui.input name="traefikDynamicPath" wire:model="traefikDynamicPath" :label="__('infrastructure.traefik_path')" :hint="__('infrastructure.traefik_path_hint')" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="space-y-4 rounded-lg border border-line bg-surface p-6 shadow-xs animate-rise [animation-delay:30ms]">
|
|
<div>
|
|
<h2 class="font-semibold text-ink">{{ __('infrastructure.wg_title') }}</h2>
|
|
<p class="mt-1 text-sm text-muted">{{ __('infrastructure.wg_body') }}</p>
|
|
</div>
|
|
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
|
<x-ui.input name="wgEndpoint" wire:model="wgEndpoint" :label="__('infrastructure.wg_endpoint')" :hint="__('infrastructure.wg_endpoint_hint')" placeholder="vpn.clupilot.com:51820" />
|
|
<x-ui.input name="wgHubPubkey" wire:model="wgHubPubkey" :label="__('infrastructure.wg_hub_pubkey')" :hint="__('infrastructure.wg_hub_pubkey_hint')" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="space-y-4 rounded-lg border border-line bg-surface p-6 shadow-xs animate-rise [animation-delay:60ms]">
|
|
<div>
|
|
<h2 class="font-semibold text-ink">{{ __('infrastructure.ssh_title') }}</h2>
|
|
<p class="mt-1 text-sm text-muted">{{ __('infrastructure.ssh_body') }}</p>
|
|
</div>
|
|
<div>
|
|
<label for="sshPublicKey" class="block text-sm font-medium text-body">{{ __('infrastructure.ssh_public_key') }}</label>
|
|
<textarea id="sshPublicKey" name="sshPublicKey" rows="3" autocomplete="off" spellcheck="false"
|
|
wire:model="sshPublicKey"
|
|
class="mt-1.5 block w-full rounded border border-line bg-surface px-3.5 py-2.5 font-mono text-xs text-ink placeholder:text-faint transition"
|
|
placeholder="ssh-ed25519 AAAA... clupilot"></textarea>
|
|
<p class="mt-1.5 text-xs text-muted">{{ __('infrastructure.ssh_public_key_hint') }}</p>
|
|
@error('sshPublicKey')<p class="mt-1.5 text-xs text-danger">{{ $message }}</p>@enderror
|
|
</div>
|
|
</div>
|
|
|
|
<div class="space-y-4 rounded-lg border border-line bg-surface p-6 shadow-xs animate-rise [animation-delay:90ms]">
|
|
<div>
|
|
<h2 class="font-semibold text-ink">{{ __('infrastructure.monitoring_title') }}</h2>
|
|
<p class="mt-1 text-sm text-muted">{{ __('infrastructure.monitoring_body') }}</p>
|
|
</div>
|
|
<x-ui.input name="monitoringUrl" type="url" wire:model="monitoringUrl" :label="__('infrastructure.monitoring_url')" :hint="__('infrastructure.monitoring_url_hint')" placeholder="http://kuma-bridge:8080" />
|
|
</div>
|
|
|
|
<div class="flex justify-end">
|
|
<x-ui.button type="submit" variant="primary" wire:loading.attr="disabled" wire:target="save">
|
|
{{ __('infrastructure.save') }}
|
|
</x-ui.button>
|
|
</div>
|
|
</form>
|
|
</div>
|