mirror of
https://github.com/purocean/yn.git
synced 2026-10-16 15:41:46 +08:00
25 lines
1.0 KiB
TypeScript
25 lines
1.0 KiB
TypeScript
import type { ProxyOptions } from 'vite'
|
|
import { createRequestOriginGuard } from '../src/main/server/request-origin'
|
|
|
|
export function createDevProxy (target: string): ProxyOptions {
|
|
const backend = new URL(target)
|
|
return {
|
|
target,
|
|
changeOrigin: true,
|
|
// Vite runs bypass before both HTTP proxying and WebSocket upgrades. Validate
|
|
// first: blindly rewriting Origin would turn Vite into a cross-site gateway.
|
|
bypass (req) {
|
|
const { localAddress, localPort } = req.socket
|
|
if (!localAddress || !localPort) return false
|
|
const checkOrigin = createRequestOriginGuard(localPort, localAddress)
|
|
if (!checkOrigin(req.headers, false, req.headers.upgrade?.toLowerCase() === 'websocket')) return false
|
|
|
|
if (req.headers.origin?.startsWith('http')) req.headers.origin = backend.origin
|
|
if (req.headers.referer?.startsWith('http')) {
|
|
const referer = new URL(req.headers.referer)
|
|
req.headers.referer = backend.origin + referer.pathname + referer.search
|
|
}
|
|
}
|
|
}
|
|
}
|