import http from 'node:http' import type { AddressInfo } from 'node:net' import { expect, test } from '@playwright/test' import { openContentControlPlane, resolveContentControlPlaneBaseUrl } from './content-control-plane' const listen = (server: http.Server): Promise => new Promise((resolve, reject) => { server.once('error', reject) server.listen(0, '127.0.0.1', () => resolve((server.address() as AddressInfo).port)) }) const close = (server: http.Server): Promise => new Promise((resolve, reject) => { server.close((error) => (error ? reject(error) : resolve())) }) test('content control plane never forwards login bodies across redirects', async () => { let redirectedRequests = 0 const redirectTarget = http.createServer((_request, response) => { redirectedRequests += 1 response.writeHead(204).end() }) const targetPort = await listen(redirectTarget) const gateway = http.createServer((_request, response) => { response.writeHead(307, { Location: `http://127.0.0.1:${targetPort}/captured` }).end() }) const gatewayPort = await listen(gateway) const request = await openContentControlPlane(`http://127.0.0.1:${gatewayPort}`) try { const response = await request.post('/login', { data: { username: 'redirect-sentinel', password: 'must-not-be-forwarded' }, }) expect(response.status()).toBe(307) expect(redirectedRequests).toBe(0) } finally { await request.dispose() await close(gateway) await close(redirectTarget) } }) test('content control plane rejects local/remote drift and cleartext remote UI', () => { expect(() => resolveContentControlPlaneBaseUrl({ BASE_URL: 'https://ui.example.test', E2E_API_BASE_URL: 'http://127.0.0.1:6100', })).toThrow(/cross the local\/remote boundary/) expect(() => resolveContentControlPlaneBaseUrl({ BASE_URL: 'http://ui.example.test', E2E_API_BASE_URL: 'https://api.example.test', })).toThrow(/Remote BASE_URL must use HTTPS/) })