import { Switch } from '@headlessui/react' import { type ActionFunctionArgs } from '@remix-run/node' import { json, useFetcher, useLoaderData } from '@remix-run/react' import clsx from 'clsx' import { useState } from 'react' import { getConfig, patchConfig } from '~/utils/config' import Domains from './domains' import MagicModal from './magic' import RenameModal from './rename' // We do not want to expose every config value export async function loader() { const config = await getConfig() const dns = { prefixes: config.prefixes, magicDns: config.dns_config.magic_dns, baseDomain: config.dns_config.base_domain, overrideLocal: config.dns_config.override_local_dns, nameservers: config.dns_config.nameservers, splitDns: config.dns_config.restricted_nameservers, searchDomains: config.dns_config.domains, extraRecords: config.dns_config.extra_records } return dns } export async function action({ request }: ActionFunctionArgs) { const data = await request.json() as Record console.log(data) await patchConfig(data) return json({ success: true }) } export default function Page() { const data = useLoaderData() const fetcher = useFetcher({ key: 'dns-page' }) const [localOverride, setLocalOverride] = useState(data.overrideLocal) const [ns, setNs] = useState('') return (

Tailnet Name

This is the base domain name of your Tailnet. Devices are accessible at {' '} [device].[user].{data.baseDomain} {' '} when Magic DNS is enabled.

{ event.target.select() }} />

Nameservers

Set the nameservers used by devices on the Tailnet to resolve DNS queries.

Global Nameservers

Override local DNS { fetcher.submit({ // eslint-disable-next-line @typescript-eslint/naming-convention 'dns_config.override_local_dns': !localOverride }, { method: 'PATCH', encType: 'application/json' }) setLocalOverride(!localOverride) }} > Override local DNS
{data.nameservers.map((ns, index) => (

{ns}

))}
{ setNs(event.target.value) }} />
{/* TODO: Split DNS and Custom A Records */}

Magic DNS

Automaticall register domain names for each device on the tailnet. Devices will be accessible at {' '} [device].[user].{data.baseDomain} {' '} when Magic DNS is enabled.

) }