38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { defineEventHandler, proxyRequest } from 'h3'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const config = useRuntimeConfig()
|
|
const targetBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1'
|
|
|
|
// Extract path suffix after /visit-api
|
|
const suffix = event.path.replace(/^\/visit-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 = '10.10.123.135:8084'
|
|
}
|
|
|
|
// Spoof the origin and referer to match the server's trusted/whitelisted client origin
|
|
headers.origin = 'http://10.10.150.175:3000'
|
|
headers.referer = 'http://10.10.150.175:3000/'
|
|
|
|
console.log(`[Proxy Visit-API] Forwarding ${event.node.req.method} to: ${targetUrl}`)
|
|
console.log(`[Proxy Visit-API] Headers - Host: ${headers.host}, Origin: ${headers.origin}`)
|
|
|
|
try {
|
|
return await proxyRequest(event, targetUrl, {
|
|
headers
|
|
})
|
|
} catch (error: any) {
|
|
console.error(`[Proxy Visit-API] Error forwarding to ${targetUrl}:`, error)
|
|
throw error
|
|
}
|
|
})
|