feat(backend): add dynamic CORS origin validator supporting newwhats.clube67.com and subdomains
continuous-integration/webhook Deploy de clube67_newwhats.local concluido com sucesso (VPS 4)
continuous-integration/webhook Deploy de clube67_newwhats.local concluido com sucesso (VPS 4)
This commit is contained in:
@@ -43,7 +43,32 @@ async function bootstrap() {
|
|||||||
const app = express()
|
const app = express()
|
||||||
|
|
||||||
app.use(helmet({ crossOriginResourcePolicy: { policy: 'cross-origin' } }))
|
app.use(helmet({ crossOriginResourcePolicy: { policy: 'cross-origin' } }))
|
||||||
app.use(cors({ origin: env.FRONTEND_URL, credentials: true }))
|
|
||||||
|
const allowedOrigins = [
|
||||||
|
env.FRONTEND_URL,
|
||||||
|
'https://newwhats.clube67.com',
|
||||||
|
'https://clube67.com',
|
||||||
|
'https://www.clube67.com'
|
||||||
|
].filter(Boolean)
|
||||||
|
|
||||||
|
app.use(cors({
|
||||||
|
origin: (origin, callback) => {
|
||||||
|
// Permitir requisições sem origem (como apps mobile ou chamadas backend-to-backend)
|
||||||
|
if (!origin) return callback(null, true)
|
||||||
|
|
||||||
|
const isAllowed = allowedOrigins.some(allowed => {
|
||||||
|
return allowed === origin || origin.endsWith('.clube67.com')
|
||||||
|
}) || origin.startsWith('http://localhost')
|
||||||
|
|
||||||
|
if (isAllowed) {
|
||||||
|
callback(null, true)
|
||||||
|
} else {
|
||||||
|
logger.warn({ origin }, 'CORS bloqueado para a origem')
|
||||||
|
callback(new Error('Not allowed by CORS'))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
credentials: true
|
||||||
|
}))
|
||||||
app.use(express.json({ limit: '10mb' }))
|
app.use(express.json({ limit: '10mb' }))
|
||||||
|
|
||||||
// Servir arquivos de mídia baixados (ambos os prefixos: acesso direto e via proxy nginx)
|
// Servir arquivos de mídia baixados (ambos os prefixos: acesso direto e via proxy nginx)
|
||||||
|
|||||||
Reference in New Issue
Block a user