fix: handle registration keys on headscale 0.29+

Closes HP-555.
This commit is contained in:
Aarnav Tale
2026-07-04 00:07:53 -04:00
parent 990e1e9ff5
commit 948cfad58c
11 changed files with 206 additions and 15 deletions
+46
View File
@@ -0,0 +1,46 @@
const authRequestKeyPattern = /^hskey-authreq-[A-Za-z0-9_-]{16,}$/;
const authRequestKeySearchPattern = /hskey-authreq-[A-Za-z0-9_-]{16,}/;
const legacyMachineKeyPattern = /^mkey:[A-Za-z0-9_-]{16,}$/;
const registerUrlPattern = /\/register\/([^\s?#]+)/;
const registrationKeySuffixPattern = /^[A-Za-z0-9_-]{24,}$/;
export function normalizeRegistrationKey(value: string): string | null {
const trimmed = value.trim();
if (trimmed.length === 0) {
return null;
}
const registerUrlMatch = trimmed.match(registerUrlPattern);
if (registerUrlMatch) {
const token = normalizeRegistrationToken(registerUrlMatch[1]);
if (token) {
return token;
}
}
const authRequestKeyMatch = trimmed.match(authRequestKeySearchPattern);
if (authRequestKeyMatch) {
return authRequestKeyMatch[0];
}
return normalizeRegistrationToken(trimmed);
}
function normalizeRegistrationToken(value: string): string | null {
let token: string;
try {
token = decodeURIComponent(value.trim());
} catch {
return null;
}
if (authRequestKeyPattern.test(token) || legacyMachineKeyPattern.test(token)) {
return token;
}
if (registrationKeySuffixPattern.test(token)) {
return `hskey-authreq-${token}`;
}
return null;
}