diff --git a/CHANGELOG.md b/CHANGELOG.md index 86c4837..978ad14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - Added automatic role assignment for new OIDC users via `oidc.default_role` and IdP-provided role claims via `oidc.role_claim` (closes [#352](https://github.com/tale/headplane/issues/352)). - Fixed the DNS page crashing when Headscale has no Split DNS nameservers configured (closes [#570](https://github.com/tale/headplane/issues/570)). - User lists now show Headscale display names while preserving usernames as secondary text (closes [#571](https://github.com/tale/headplane/issues/571)). +- Fixed the Register Machine Key dialog so it accepts registration URLs and full `hskey-authreq-...` registration keys (closes [#579](https://github.com/tale/headplane/issues/579)). --- diff --git a/app/routes/machines/dialogs/new.tsx b/app/routes/machines/dialogs/new.tsx index 523b723..41f4dc2 100644 --- a/app/routes/machines/dialogs/new.tsx +++ b/app/routes/machines/dialogs/new.tsx @@ -12,10 +12,11 @@ import Text from "~/components/text"; import Title from "~/components/title"; import { useForm } from "~/hooks/use-form"; import type { User } from "~/types"; +import { normalizeRegistrationKey } from "~/utils/register-key"; import { getUserDisplayName } from "~/utils/user"; const registerSchema = type({ - register_key: "string == 24", + register_key: "string > 0", user: "string > 0", }); @@ -28,7 +29,16 @@ export interface NewMachineProps { export default function NewMachine(data: NewMachineProps) { const [pushDialog, setPushDialog] = useState(false); - const form = useForm({ schema: registerSchema }); + const form = useForm({ + schema: registerSchema, + validate: (values) => + normalizeRegistrationKey(String(values.register_key ?? "")) + ? undefined + : { + register_key: + "Paste the registration URL or full hskey-authreq-... key from tailscale up.", + }, + }); const navigate = useNavigate(); return ( @@ -43,7 +53,8 @@ export default function NewMachine(data: NewMachineProps) { {...form.field("register_key")} required label="Machine Key" - placeholder="AbCd..." + placeholder="hskey-authreq-XXXXXXXXXXXXXXXXXXXXXXXX" + description="Paste the registration URL or full key shown by tailscale up." />