@@ -463,7 +463,7 @@ impl CspRaw {
463
463
}
464
464
465
465
fn get_tags ( & self , effective_directive : CspDirective ) -> Tags {
466
- Tags ( PairList :: from ( vec ! [
466
+ let mut tags = vec ! [
467
467
Annotated :: new( TagEntry (
468
468
Annotated :: new( "effective-directive" . to_string( ) ) ,
469
469
Annotated :: new( effective_directive. to_string( ) ) ,
@@ -472,7 +472,18 @@ impl CspRaw {
472
472
Annotated :: new( "blocked-uri" . to_string( ) ) ,
473
473
Annotated :: new( self . sanitized_blocked_uri( ) ) ,
474
474
) ) ,
475
- ] ) )
475
+ ] ;
476
+
477
+ if let Ok ( url) = Url :: parse ( & self . blocked_uri ) {
478
+ if let ( "http" | "https" , Some ( host) ) = ( url. scheme ( ) , url. host_str ( ) ) {
479
+ tags. push ( Annotated :: new ( TagEntry (
480
+ Annotated :: new ( "blocked-host" . to_string ( ) ) ,
481
+ Annotated :: new ( host. to_owned ( ) ) ,
482
+ ) ) ) ;
483
+ }
484
+ }
485
+
486
+ Tags ( PairList :: from ( tags) )
476
487
}
477
488
478
489
fn get_request ( & self ) -> Request {
@@ -1251,7 +1262,7 @@ mod tests {
1251
1262
let mut event = Event :: default ( ) ;
1252
1263
Csp :: apply_to_event ( json. as_bytes ( ) , & mut event) . unwrap ( ) ;
1253
1264
1254
- assert_annotated_snapshot ! ( Annotated :: new( event) , @r#"
1265
+ assert_annotated_snapshot ! ( Annotated :: new( event) , @r### "
1255
1266
{
1256
1267
"culprit": "style-src cdn.example.com",
1257
1268
"logentry": {
@@ -1268,6 +1279,10 @@ mod tests {
1268
1279
[
1269
1280
"blocked-uri",
1270
1281
"http://example.com/lol.css"
1282
+ ],
1283
+ [
1284
+ "blocked-host",
1285
+ "example.com"
1271
1286
]
1272
1287
],
1273
1288
"csp": {
@@ -1278,7 +1293,7 @@ mod tests {
1278
1293
"violated_directive": "style-src cdn.example.com"
1279
1294
}
1280
1295
}
1281
- "# ) ;
1296
+ "### ) ;
1282
1297
}
1283
1298
1284
1299
#[ test]
@@ -1337,7 +1352,7 @@ mod tests {
1337
1352
let mut event = Event :: default ( ) ;
1338
1353
Csp :: apply_to_event ( json. as_bytes ( ) , & mut event) . unwrap ( ) ;
1339
1354
1340
- assert_annotated_snapshot ! ( Annotated :: new( event) , @r#"
1355
+ assert_annotated_snapshot ! ( Annotated :: new( event) , @r### "
1341
1356
{
1342
1357
"culprit": "default-src self",
1343
1358
"logentry": {
@@ -1360,6 +1375,10 @@ mod tests {
1360
1375
[
1361
1376
"blocked-uri",
1362
1377
"http://evilhackerscripts.com"
1378
+ ],
1379
+ [
1380
+ "blocked-host",
1381
+ "evilhackerscripts.com"
1363
1382
]
1364
1383
],
1365
1384
"csp": {
@@ -1371,7 +1390,7 @@ mod tests {
1371
1390
"violated_directive": "default-src self"
1372
1391
}
1373
1392
}
1374
- "# ) ;
1393
+ "### ) ;
1375
1394
}
1376
1395
1377
1396
#[ test]
@@ -1396,7 +1415,7 @@ mod tests {
1396
1415
let mut event = Event :: default ( ) ;
1397
1416
Csp :: apply_to_event ( json. as_bytes ( ) , & mut event) . unwrap ( ) ;
1398
1417
1399
- assert_annotated_snapshot ! ( Annotated :: new( event) , @r#"
1418
+ assert_annotated_snapshot ! ( Annotated :: new( event) , @r### "
1400
1419
{
1401
1420
"culprit": "script-src",
1402
1421
"logentry": {
@@ -1419,6 +1438,10 @@ mod tests {
1419
1438
[
1420
1439
"blocked-uri",
1421
1440
"http://baddomain.com/test.js?_=1515535030116"
1441
+ ],
1442
+ [
1443
+ "blocked-host",
1444
+ "baddomain.com"
1422
1445
]
1423
1446
],
1424
1447
"csp": {
@@ -1436,7 +1459,7 @@ mod tests {
1436
1459
"disposition": "enforce"
1437
1460
}
1438
1461
}
1439
- "# ) ;
1462
+ "### ) ;
1440
1463
}
1441
1464
1442
1465
#[ test]
@@ -1559,7 +1582,7 @@ mod tests {
1559
1582
1560
1583
let mut event = Event :: default ( ) ;
1561
1584
Csp :: apply_to_event ( json. as_bytes ( ) , & mut event) . unwrap ( ) ;
1562
- insta:: assert_debug_snapshot!( event. tags, @r#"
1585
+ insta:: assert_debug_snapshot!( event. tags, @r### "
1563
1586
Tags(
1564
1587
PairList(
1565
1588
[
@@ -1571,10 +1594,14 @@ mod tests {
1571
1594
"blocked-uri",
1572
1595
"https://api.stripe.com/v1/tokens",
1573
1596
),
1597
+ TagEntry(
1598
+ "blocked-host",
1599
+ "api.stripe.com",
1600
+ ),
1574
1601
],
1575
1602
),
1576
1603
)
1577
- "# ) ;
1604
+ "### ) ;
1578
1605
}
1579
1606
1580
1607
#[ test]
0 commit comments