35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import type { Plugin } from 'vite'
|
|
|
|
export function cspPlugin(): Plugin {
|
|
return {
|
|
name: 'vite-plugin-csp',
|
|
transformIndexHtml(html) {
|
|
const isDev = process.env.NODE_ENV === 'development'
|
|
const apiUrl = process.env.VITE_APP_API || 'http://zsmartex.com:8080'
|
|
|
|
const devUrl = apiUrl
|
|
const prodUrl = apiUrl.replace(/^http:/, 'https:')
|
|
|
|
const cspContent = isDev
|
|
? `default-src 'self' blob: data:;
|
|
script-src 'self' 'wasm-unsafe-eval' blob:;
|
|
style-src 'self' 'unsafe-inline';
|
|
connect-src 'self' ${devUrl};
|
|
img-src 'self' data:;`
|
|
: `default-src 'self' blob: data:;
|
|
script-src 'self' 'wasm-unsafe-eval' blob:;
|
|
style-src 'self';
|
|
connect-src 'self' ${devUrl};
|
|
img-src 'self' data:;`
|
|
|
|
return html.replace(
|
|
/<meta\s+http-equiv="Content-Security-Policy"[\s\S]*?\/>/,
|
|
`<meta
|
|
http-equiv="Content-Security-Policy"
|
|
content="${cspContent}"
|
|
/>`
|
|
)
|
|
},
|
|
}
|
|
}
|