Commit d559ad9
fix(plugins): propagate HTTP status codes and headers from plugin violations
Add support for plugins to specify HTTP status codes (e.g., 429 for rate
limiting) and custom headers (e.g., Retry-After) in PluginViolation responses.
- Add http_status_code and http_headers fields to PluginViolation model
- Implement PLUGIN_VIOLATION_CODE_MAPPING for common violation types
- Update plugin_violation_exception_handler to use explicit status codes
with fallback to code mapping, defaulting to 200 for JSON-RPC compliance
- Add RFC 9110 header validation to prevent header injection
- Enhance rate limiter plugin with multi-dimensional rate limiting,
proper HTTP 429 responses, and X-RateLimit-* / Retry-After headers
- Add comprehensive test coverage for status code precedence, header
propagation, and header validation
Fixes #2668
Signed-off-by: Jitesh Nair <jiteshnair@ibm.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>1 parent 4420a7e commit d559ad9
File tree
9 files changed
+1934
-48
lines changed- mcpgateway
- plugins/framework
- plugins/rate_limiter
- tests
- integration
- unit/mcpgateway
- plugins
- framework
- plugins/rate_limiter
9 files changed
+1934
-48
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
36 | 37 | | |
37 | 38 | | |
38 | 39 | | |
| |||
86 | 87 | | |
87 | 88 | | |
88 | 89 | | |
| 90 | + | |
89 | 91 | | |
90 | 92 | | |
91 | 93 | | |
| |||
1450 | 1452 | | |
1451 | 1453 | | |
1452 | 1454 | | |
| 1455 | + | |
| 1456 | + | |
| 1457 | + | |
| 1458 | + | |
| 1459 | + | |
| 1460 | + | |
| 1461 | + | |
| 1462 | + | |
| 1463 | + | |
| 1464 | + | |
| 1465 | + | |
| 1466 | + | |
| 1467 | + | |
| 1468 | + | |
| 1469 | + | |
| 1470 | + | |
| 1471 | + | |
| 1472 | + | |
| 1473 | + | |
| 1474 | + | |
| 1475 | + | |
| 1476 | + | |
| 1477 | + | |
| 1478 | + | |
| 1479 | + | |
| 1480 | + | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + | |
| 1484 | + | |
| 1485 | + | |
| 1486 | + | |
| 1487 | + | |
| 1488 | + | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + | |
| 1492 | + | |
| 1493 | + | |
| 1494 | + | |
| 1495 | + | |
| 1496 | + | |
| 1497 | + | |
| 1498 | + | |
| 1499 | + | |
1453 | 1500 | | |
1454 | 1501 | | |
1455 | 1502 | | |
| |||
1464 | 1511 | | |
1465 | 1512 | | |
1466 | 1513 | | |
1467 | | - | |
| 1514 | + | |
| 1515 | + | |
| 1516 | + | |
1468 | 1517 | | |
1469 | 1518 | | |
1470 | 1519 | | |
| |||
1482 | 1531 | | |
1483 | 1532 | | |
1484 | 1533 | | |
1485 | | - | |
| 1534 | + | |
1486 | 1535 | | |
1487 | 1536 | | |
1488 | 1537 | | |
| |||
1496 | 1545 | | |
1497 | 1546 | | |
1498 | 1547 | | |
| 1548 | + | |
1499 | 1549 | | |
1500 | 1550 | | |
1501 | 1551 | | |
| |||
1505 | 1555 | | |
1506 | 1556 | | |
1507 | 1557 | | |
| 1558 | + | |
| 1559 | + | |
| 1560 | + | |
| 1561 | + | |
| 1562 | + | |
| 1563 | + | |
| 1564 | + | |
| 1565 | + | |
| 1566 | + | |
| 1567 | + | |
| 1568 | + | |
| 1569 | + | |
| 1570 | + | |
| 1571 | + | |
1508 | 1572 | | |
1509 | | - | |
| 1573 | + | |
| 1574 | + | |
| 1575 | + | |
| 1576 | + | |
| 1577 | + | |
| 1578 | + | |
| 1579 | + | |
| 1580 | + | |
| 1581 | + | |
| 1582 | + | |
1510 | 1583 | | |
1511 | 1584 | | |
1512 | 1585 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
13 | 18 | | |
14 | 19 | | |
15 | 20 | | |
| |||
43 | 48 | | |
44 | 49 | | |
45 | 50 | | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1231 | 1231 | | |
1232 | 1232 | | |
1233 | 1233 | | |
| 1234 | + | |
| 1235 | + | |
1234 | 1236 | | |
1235 | 1237 | | |
1236 | 1238 | | |
| |||
1254 | 1256 | | |
1255 | 1257 | | |
1256 | 1258 | | |
| 1259 | + | |
| 1260 | + | |
1257 | 1261 | | |
1258 | 1262 | | |
1259 | 1263 | | |
| |||
1327 | 1331 | | |
1328 | 1332 | | |
1329 | 1333 | | |
| 1334 | + | |
1330 | 1335 | | |
1331 | 1336 | | |
1332 | 1337 | | |
| |||
1355 | 1360 | | |
1356 | 1361 | | |
1357 | 1362 | | |
| 1363 | + | |
1358 | 1364 | | |
1359 | 1365 | | |
1360 | 1366 | | |
| |||
0 commit comments