array_values(array_filter(array_map( fn ($host) => strtolower(trim($host)), explode(',', (string) env('ADMIN_HOSTS', '')) ))), /* | Whether the console's hostname serves ONLY the console. | | Off by default, and deliberately separate from having a hostname at all: a | development machine lists its own IP in ADMIN_HOSTS so the console works | without DNS, and that same address still has to serve the portal. Switch | it on only where the console really has a hostname to itself. */ 'exclusive' => (bool) env('ADMIN_HOST_EXCLUSIVE', false), /* | Key for VPN configs stored at rest (32 bytes, base64). Separate from | APP_KEY on purpose — see App\Services\Wireguard\ConfigVault. Empty means | storing configs is switched off, and the console says so rather than | quietly writing credentials in the clear. | | Generate with: head -c 32 /dev/urandom | base64 */ 'vpn_config_key' => env('VPN_CONFIG_KEY', ''), /* | Networks that count as "us" while the public site is hidden | (PublicSiteGate). The WireGuard management subnet by default, so anyone on | the VPN sees the real site while the outside world sees a placeholder. | | Note this is compared against the CLIENT address, which is only correct | because TrustProxies is configured — behind an untrusted proxy every | request would look like it came from the proxy. */ 'trusted_ranges' => array_values(array_filter(array_map( 'trim', explode(',', (string) env('TRUSTED_RANGES', '10.66.0.0/24,127.0.0.1')), ))), ];