mirror of
https://github.com/stablyai/orca.git
synced 2026-10-21 16:03:26 +00:00
fix(server): validate detected Tailscale addresses
This commit is contained in:
@@ -23,4 +23,14 @@ describe('discoverServerPairingAddress', () => {
|
||||
source: 'loopback'
|
||||
})
|
||||
})
|
||||
|
||||
it.each(['999.999.999.999', '256.0.0.1', '01.2.3.4'])(
|
||||
'stays on loopback for invalid Tailscale IPv4 output %s',
|
||||
async (address) => {
|
||||
await expect(discoverServerPairingAddress(undefined, async () => address)).resolves.toEqual({
|
||||
address: '127.0.0.1',
|
||||
source: 'loopback'
|
||||
})
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { execFile } from 'node:child_process'
|
||||
import { isIPv4 } from 'node:net'
|
||||
|
||||
const TAILSCALE_ADDRESS_TIMEOUT_MS = 1_500
|
||||
|
||||
@@ -10,7 +11,7 @@ export async function discoverServerPairingAddress(
|
||||
return { address: explicitAddress, source: 'explicit' }
|
||||
}
|
||||
const tailscaleAddress = await readTailscaleAddress()
|
||||
return tailscaleAddress
|
||||
return tailscaleAddress && isIPv4(tailscaleAddress)
|
||||
? { address: tailscaleAddress, source: 'tailscale' }
|
||||
: { address: '127.0.0.1', source: 'loopback' }
|
||||
}
|
||||
@@ -27,7 +28,7 @@ function readTailscaleIpv4(): Promise<string | null> {
|
||||
return
|
||||
}
|
||||
const address = stdout.trim().split(/\s+/)[0]
|
||||
resolve(/^\d{1,3}(?:\.\d{1,3}){3}$/.test(address ?? '') ? address : null)
|
||||
resolve(address ?? null)
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user