39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import { defineEventHandler, proxyRequest } from 'h3'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const config = useRuntimeConfig(event)
|
|
const targetBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1'
|
|
|
|
// Extract path suffix after /stats-api
|
|
const suffix = event.path.replace(/^\/stats-api/, '')
|
|
const targetUrl = `${targetBase}${suffix}`
|
|
|
|
// Clone request headers and overwrite Host/Origin/Referer with backend-whitelisted values
|
|
const headers = { ...event.node.req.headers } as Record<string, string>
|
|
|
|
// Extract backend target host
|
|
try {
|
|
const urlObj = new URL(targetBase)
|
|
headers.host = urlObj.host
|
|
} catch (e) {
|
|
headers.host = config.proxyTargetHostFallback || '10.10.123.135:8084'
|
|
}
|
|
|
|
// Spoof the origin and referer to match the server's trusted/whitelisted client origin
|
|
const proxyOrigin = config.proxyClientOrigin as string
|
|
headers.origin = proxyOrigin
|
|
headers.referer = proxyOrigin.endsWith('/') ? proxyOrigin : `${proxyOrigin}/`
|
|
|
|
console.log(`[Proxy Stats-API] Forwarding ${event.node.req.method} to: ${targetUrl}`)
|
|
console.log(`[Proxy Stats-API] Headers - Host: ${headers.host}, Origin: ${headers.origin}`)
|
|
|
|
try {
|
|
return await proxyRequest(event, targetUrl, {
|
|
headers
|
|
})
|
|
} catch (error: any) {
|
|
console.error(`[Proxy Stats-API] Error forwarding to ${targetUrl}:`, error)
|
|
throw error
|
|
}
|
|
})
|