@@ -962,3 +962,57 @@ describe('Dev Browser JWT when redirecting to cross origin for page requests', f
962962 expect ( ( await clerkClient ( ) ) . authenticateRequest ) . toBeCalled ( ) ;
963963 } ) ;
964964} ) ;
965+
966+ describe ( 'contentSecurityPolicy option' , ( ) => {
967+ it ( 'forwards CSP headers as request headers when strict mode is enabled' , async ( ) => {
968+ const resp = await clerkMiddleware ( {
969+ contentSecurityPolicy : { strict : true } ,
970+ } ) ( mockRequest ( { url : '/test' } ) , { } as NextFetchEvent ) ;
971+
972+ expect ( resp ?. status ) . toEqual ( 200 ) ;
973+
974+ // Verify CSP response header is set
975+ const cspHeader = resp ?. headers . get ( 'content-security-policy' ) ;
976+ expect ( cspHeader ) . toBeTruthy ( ) ;
977+ expect ( cspHeader ) . toContain ( "'strict-dynamic'" ) ;
978+ expect ( cspHeader ) . toContain ( "'nonce-" ) ;
979+
980+ // Verify nonce response header is set
981+ const nonceHeader = resp ?. headers . get ( 'x-nonce' ) ;
982+ expect ( nonceHeader ) . toBeTruthy ( ) ;
983+
984+ // Verify CSP headers are forwarded as request headers via x-middleware-override-headers
985+ const overrideHeaders = resp ?. headers . get ( 'x-middleware-override-headers' ) ;
986+ expect ( overrideHeaders ) . toContain ( 'content-security-policy' ) ;
987+ expect ( overrideHeaders ) . toContain ( 'x-nonce' ) ;
988+
989+ // Verify the actual request header values are set
990+ const requestCSP = resp ?. headers . get ( 'x-middleware-request-content-security-policy' ) ;
991+ expect ( requestCSP ) . toEqual ( cspHeader ) ;
992+
993+ const requestNonce = resp ?. headers . get ( 'x-middleware-request-x-nonce' ) ;
994+ expect ( requestNonce ) . toEqual ( nonceHeader ) ;
995+ } ) ;
996+
997+ it ( 'forwards CSP headers as request headers when not in strict mode' , async ( ) => {
998+ const resp = await clerkMiddleware ( {
999+ contentSecurityPolicy : { } ,
1000+ } ) ( mockRequest ( { url : '/test' } ) , { } as NextFetchEvent ) ;
1001+
1002+ expect ( resp ?. status ) . toEqual ( 200 ) ;
1003+
1004+ // Verify CSP response header is set
1005+ const cspHeader = resp ?. headers . get ( 'content-security-policy' ) ;
1006+ expect ( cspHeader ) . toBeTruthy ( ) ;
1007+
1008+ // No nonce in non-strict mode
1009+ expect ( resp ?. headers . get ( 'x-nonce' ) ) . toBeNull ( ) ;
1010+
1011+ // Verify CSP header is forwarded as request header
1012+ const overrideHeaders = resp ?. headers . get ( 'x-middleware-override-headers' ) ;
1013+ expect ( overrideHeaders ) . toContain ( 'content-security-policy' ) ;
1014+
1015+ const requestCSP = resp ?. headers . get ( 'x-middleware-request-content-security-policy' ) ;
1016+ expect ( requestCSP ) . toEqual ( cspHeader ) ;
1017+ } ) ;
1018+ } ) ;
0 commit comments