Fix register endpoint to prefer same-origin URL (#516)
This commit is contained in:
parent
37be131d0c
commit
80a0bcb680
@ -45,15 +45,47 @@ function ensureHttpsForSameHost(url: string): string {
|
||||
}
|
||||
}
|
||||
|
||||
const LOCAL_HOSTNAMES = new Set(['localhost', '127.0.0.1', '[::1]'])
|
||||
|
||||
function preferSameOrigin(url: string): string {
|
||||
if (typeof window === 'undefined') {
|
||||
return url
|
||||
}
|
||||
|
||||
try {
|
||||
const currentOrigin = window.location.origin
|
||||
const parsed = new URL(url, currentOrigin)
|
||||
|
||||
const parsedHostname = parsed.hostname.toLowerCase()
|
||||
const browserHostname = window.location.hostname.toLowerCase()
|
||||
|
||||
const parsedIsLocal = LOCAL_HOSTNAMES.has(parsedHostname)
|
||||
const browserIsLocal = LOCAL_HOSTNAMES.has(browserHostname)
|
||||
|
||||
if (!browserIsLocal && parsedIsLocal) {
|
||||
return `${parsed.pathname}${parsed.search}${parsed.hash}` || '/api/auth/register'
|
||||
}
|
||||
|
||||
if (parsed.origin === currentOrigin) {
|
||||
return `${parsed.pathname}${parsed.search}${parsed.hash}` || '/api/auth/register'
|
||||
}
|
||||
|
||||
return parsed.toString()
|
||||
} catch (error) {
|
||||
console.warn('Failed to prefer same-origin register URL, falling back to provided value', error)
|
||||
return url
|
||||
}
|
||||
}
|
||||
|
||||
function coerceRegisterUrlOverride(rawValue: string | undefined | null, accountServiceBaseUrl: string): string {
|
||||
const fallbackUrl = `${accountServiceBaseUrl}/api/auth/register`
|
||||
if (!rawValue) {
|
||||
return ensureHttpsForSameHost(fallbackUrl)
|
||||
return preferSameOrigin(ensureHttpsForSameHost(fallbackUrl))
|
||||
}
|
||||
|
||||
const trimmed = rawValue.trim()
|
||||
if (!trimmed) {
|
||||
return ensureHttpsForSameHost(fallbackUrl)
|
||||
return preferSameOrigin(ensureHttpsForSameHost(fallbackUrl))
|
||||
}
|
||||
|
||||
const rewritePathname = (pathname: string) => {
|
||||
@ -69,20 +101,20 @@ function coerceRegisterUrlOverride(rawValue: string | undefined | null, accountS
|
||||
const rewritten = rewritePathname(parsed.pathname)
|
||||
if (rewritten) {
|
||||
parsed.pathname = rewritten
|
||||
return ensureHttpsForSameHost(parsed.toString())
|
||||
return preferSameOrigin(ensureHttpsForSameHost(parsed.toString()))
|
||||
}
|
||||
return ensureHttpsForSameHost(parsed.toString())
|
||||
return preferSameOrigin(ensureHttpsForSameHost(parsed.toString()))
|
||||
} catch (error) {
|
||||
try {
|
||||
const parsed = new URL(trimmed, 'http://localhost')
|
||||
const rewritten = rewritePathname(parsed.pathname)
|
||||
if (rewritten) {
|
||||
return ensureHttpsForSameHost(`${rewritten}${parsed.search}${parsed.hash}`)
|
||||
return preferSameOrigin(ensureHttpsForSameHost(`${rewritten}${parsed.search}${parsed.hash}`))
|
||||
}
|
||||
} catch (relativeError) {
|
||||
console.warn('Failed to parse register URL override', relativeError)
|
||||
}
|
||||
return ensureHttpsForSameHost(trimmed)
|
||||
return preferSameOrigin(ensureHttpsForSameHost(trimmed))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user