thuban 0.3.4 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/README.md +2 -0
- package/dist/cli.js +1 -1
- package/dist/packages/crucible/.golden/golden-master.json +414 -0
- package/dist/packages/crucible/badge-generator.js +1 -0
- package/dist/packages/crucible/banner.js +1 -0
- package/dist/packages/crucible/ci-integration.js +1 -0
- package/dist/packages/crucible/golden-master.js +1 -0
- package/dist/packages/crucible/index.js +1 -0
- package/dist/packages/crucible/kenny-mode.js +1 -0
- package/dist/packages/crucible/leaderboard.js +1 -0
- package/dist/packages/crucible/mutation-engine.js +1 -0
- package/dist/packages/crucible/pattern-learner.js +1 -0
- package/dist/packages/crucible/report-generator.js +1 -0
- package/dist/packages/crucible/rule-loader.js +1 -0
- package/dist/packages/crucible/seeding-engine.js +1 -0
- package/dist/packages/crucible/seeds/csharp/seed-001.cs +28 -0
- package/dist/packages/crucible/seeds/csharp/seed-002.cs +24 -0
- package/dist/packages/crucible/seeds/csharp/seed-003.cs +30 -0
- package/dist/packages/crucible/seeds/csharp/seed-004.cs +31 -0
- package/dist/packages/crucible/seeds/csharp/seed-005.cs +28 -0
- package/dist/packages/crucible/seeds/csharp/seed-006.cs +25 -0
- package/dist/packages/crucible/seeds/csharp/seed-007.cs +34 -0
- package/dist/packages/crucible/seeds/csharp/seed-008.cs +23 -0
- package/dist/packages/crucible/seeds/csharp/seed-009.cs +27 -0
- package/dist/packages/crucible/seeds/csharp/seed-010.cs +29 -0
- package/dist/packages/crucible/seeds/csharp/seed-011.cs +32 -0
- package/dist/packages/crucible/seeds/csharp/seed-012.cs +27 -0
- package/dist/packages/crucible/seeds/csharp/seed-013.cs +27 -0
- package/dist/packages/crucible/seeds/csharp/seed-014.cs +26 -0
- package/dist/packages/crucible/seeds/csharp/seed-015.cs +33 -0
- package/dist/packages/crucible/seeds/csharp/seed-016.cs +25 -0
- package/dist/packages/crucible/seeds/csharp/seed-017.cs +22 -0
- package/dist/packages/crucible/seeds/csharp/seed-018.cs +26 -0
- package/dist/packages/crucible/seeds/csharp/seed-019.cs +25 -0
- package/dist/packages/crucible/seeds/csharp/seed-020.cs +22 -0
- package/dist/packages/crucible/seeds/csharp/seed-021.cs +28 -0
- package/dist/packages/crucible/seeds/csharp/seed-022.cs +25 -0
- package/dist/packages/crucible/seeds/csharp/seed-023.cs +33 -0
- package/dist/packages/crucible/seeds/csharp/seed-024.cs +31 -0
- package/dist/packages/crucible/seeds/csharp/seed-025.cs +31 -0
- package/dist/packages/crucible/seeds/csharp/seed-026.cs +25 -0
- package/dist/packages/crucible/seeds/csharp/seed-027.cs +29 -0
- package/dist/packages/crucible/seeds/csharp/seed-028.cs +25 -0
- package/dist/packages/crucible/seeds/csharp/seed-029.cs +27 -0
- package/dist/packages/crucible/seeds/csharp/seed-030.cs +27 -0
- package/dist/packages/crucible/seeds/csharp/seed-031.cs +28 -0
- package/dist/packages/crucible/seeds/csharp/seed-032.cs +30 -0
- package/dist/packages/crucible/seeds/csharp/seed-033.cs +27 -0
- package/dist/packages/crucible/seeds/csharp/seed-034.cs +25 -0
- package/dist/packages/crucible/seeds/csharp/seed-035.cs +32 -0
- package/dist/packages/crucible/seeds/csharp/seed-036.cs +28 -0
- package/dist/packages/crucible/seeds/csharp/seed-037.cs +29 -0
- package/dist/packages/crucible/seeds/csharp/seed-038.cs +28 -0
- package/dist/packages/crucible/seeds/csharp/seed-039.cs +29 -0
- package/dist/packages/crucible/seeds/csharp/seed-040.cs +28 -0
- package/dist/packages/crucible/seeds/csharp/seed-041.cs +33 -0
- package/dist/packages/crucible/seeds/csharp/seed-042.cs +27 -0
- package/dist/packages/crucible/seeds/csharp/seed-043.cs +27 -0
- package/dist/packages/crucible/seeds/csharp/seed-044.cs +25 -0
- package/dist/packages/crucible/seeds/csharp/seed-045.cs +30 -0
- package/dist/packages/crucible/seeds/csharp/seed-046.cs +29 -0
- package/dist/packages/crucible/seeds/csharp/seed-047.cs +26 -0
- package/dist/packages/crucible/seeds/csharp/seed-048.cs +31 -0
- package/dist/packages/crucible/seeds/csharp/seed-049.cs +27 -0
- package/dist/packages/crucible/seeds/csharp/seed-050.cs +30 -0
- package/dist/packages/crucible/seeds/csharp/seed-051.cs +34 -0
- package/dist/packages/crucible/seeds/csharp/seed-052.cs +36 -0
- package/dist/packages/crucible/seeds/go/seed-001.go +29 -0
- package/dist/packages/crucible/seeds/go/seed-002.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-003.go +31 -0
- package/dist/packages/crucible/seeds/go/seed-004.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-005.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-006.go +29 -0
- package/dist/packages/crucible/seeds/go/seed-007.go +24 -0
- package/dist/packages/crucible/seeds/go/seed-008.go +25 -0
- package/dist/packages/crucible/seeds/go/seed-009.go +30 -0
- package/dist/packages/crucible/seeds/go/seed-010.go +35 -0
- package/dist/packages/crucible/seeds/go/seed-011.go +24 -0
- package/dist/packages/crucible/seeds/go/seed-012.go +24 -0
- package/dist/packages/crucible/seeds/go/seed-013.go +31 -0
- package/dist/packages/crucible/seeds/go/seed-014.go +35 -0
- package/dist/packages/crucible/seeds/go/seed-015.go +25 -0
- package/dist/packages/crucible/seeds/go/seed-016.go +19 -0
- package/dist/packages/crucible/seeds/go/seed-017.go +23 -0
- package/dist/packages/crucible/seeds/go/seed-018.go +23 -0
- package/dist/packages/crucible/seeds/go/seed-019.go +22 -0
- package/dist/packages/crucible/seeds/go/seed-020.go +31 -0
- package/dist/packages/crucible/seeds/go/seed-021.go +22 -0
- package/dist/packages/crucible/seeds/go/seed-022.go +29 -0
- package/dist/packages/crucible/seeds/go/seed-023.go +26 -0
- package/dist/packages/crucible/seeds/go/seed-024.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-025.go +23 -0
- package/dist/packages/crucible/seeds/go/seed-026.go +29 -0
- package/dist/packages/crucible/seeds/go/seed-027.go +26 -0
- package/dist/packages/crucible/seeds/go/seed-028.go +23 -0
- package/dist/packages/crucible/seeds/go/seed-029.go +28 -0
- package/dist/packages/crucible/seeds/go/seed-030.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-031.go +28 -0
- package/dist/packages/crucible/seeds/go/seed-032.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-033.go +29 -0
- package/dist/packages/crucible/seeds/go/seed-034.go +22 -0
- package/dist/packages/crucible/seeds/go/seed-035.go +32 -0
- package/dist/packages/crucible/seeds/go/seed-036.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-037.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-038.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-039.go +26 -0
- package/dist/packages/crucible/seeds/go/seed-040.go +37 -0
- package/dist/packages/crucible/seeds/go/seed-041.go +23 -0
- package/dist/packages/crucible/seeds/go/seed-042.go +32 -0
- package/dist/packages/crucible/seeds/go/seed-043.go +35 -0
- package/dist/packages/crucible/seeds/go/seed-044.go +25 -0
- package/dist/packages/crucible/seeds/go/seed-045.go +26 -0
- package/dist/packages/crucible/seeds/go/seed-046.go +34 -0
- package/dist/packages/crucible/seeds/go/seed-047.go +26 -0
- package/dist/packages/crucible/seeds/go/seed-048.go +29 -0
- package/dist/packages/crucible/seeds/go/seed-049.go +24 -0
- package/dist/packages/crucible/seeds/go/seed-050.go +27 -0
- package/dist/packages/crucible/seeds/go/seed-051.go +38 -0
- package/dist/packages/crucible/seeds/go/seed-052.go +27 -0
- package/dist/packages/crucible/seeds/java/seed-001.java +23 -0
- package/dist/packages/crucible/seeds/java/seed-002.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-003.java +28 -0
- package/dist/packages/crucible/seeds/java/seed-004.java +26 -0
- package/dist/packages/crucible/seeds/java/seed-005.java +33 -0
- package/dist/packages/crucible/seeds/java/seed-006.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-007.java +21 -0
- package/dist/packages/crucible/seeds/java/seed-008.java +29 -0
- package/dist/packages/crucible/seeds/java/seed-009.java +24 -0
- package/dist/packages/crucible/seeds/java/seed-010.java +30 -0
- package/dist/packages/crucible/seeds/java/seed-011.java +25 -0
- package/dist/packages/crucible/seeds/java/seed-012.java +20 -0
- package/dist/packages/crucible/seeds/java/seed-013.java +26 -0
- package/dist/packages/crucible/seeds/java/seed-014.java +23 -0
- package/dist/packages/crucible/seeds/java/seed-015.java +25 -0
- package/dist/packages/crucible/seeds/java/seed-016.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-017.java +24 -0
- package/dist/packages/crucible/seeds/java/seed-018.java +24 -0
- package/dist/packages/crucible/seeds/java/seed-019.java +38 -0
- package/dist/packages/crucible/seeds/java/seed-020.java +24 -0
- package/dist/packages/crucible/seeds/java/seed-021.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-022.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-023.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-024.java +25 -0
- package/dist/packages/crucible/seeds/java/seed-025.java +27 -0
- package/dist/packages/crucible/seeds/java/seed-026.java +25 -0
- package/dist/packages/crucible/seeds/java/seed-027.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-028.java +21 -0
- package/dist/packages/crucible/seeds/java/seed-029.java +28 -0
- package/dist/packages/crucible/seeds/java/seed-030.java +27 -0
- package/dist/packages/crucible/seeds/java/seed-031.java +23 -0
- package/dist/packages/crucible/seeds/java/seed-032.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-033.java +24 -0
- package/dist/packages/crucible/seeds/java/seed-034.java +24 -0
- package/dist/packages/crucible/seeds/java/seed-035.java +29 -0
- package/dist/packages/crucible/seeds/java/seed-036.java +25 -0
- package/dist/packages/crucible/seeds/java/seed-037.java +30 -0
- package/dist/packages/crucible/seeds/java/seed-038.java +29 -0
- package/dist/packages/crucible/seeds/java/seed-039.java +26 -0
- package/dist/packages/crucible/seeds/java/seed-040.java +31 -0
- package/dist/packages/crucible/seeds/java/seed-041.java +20 -0
- package/dist/packages/crucible/seeds/java/seed-042.java +26 -0
- package/dist/packages/crucible/seeds/java/seed-043.java +31 -0
- package/dist/packages/crucible/seeds/java/seed-044.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-045.java +25 -0
- package/dist/packages/crucible/seeds/java/seed-046.java +22 -0
- package/dist/packages/crucible/seeds/java/seed-047.java +26 -0
- package/dist/packages/crucible/seeds/java/seed-048.java +24 -0
- package/dist/packages/crucible/seeds/java/seed-049.java +28 -0
- package/dist/packages/crucible/seeds/java/seed-050.java +29 -0
- package/dist/packages/crucible/seeds/java/seed-051.java +25 -0
- package/dist/packages/crucible/seeds/java/seed-052.java +32 -0
- package/dist/packages/crucible/seeds/js/seed-001.js +27 -0
- package/dist/packages/crucible/seeds/js/seed-002.js +28 -0
- package/dist/packages/crucible/seeds/js/seed-003.js +30 -0
- package/dist/packages/crucible/seeds/js/seed-004.js +28 -0
- package/dist/packages/crucible/seeds/js/seed-005.js +31 -0
- package/dist/packages/crucible/seeds/js/seed-006.js +28 -0
- package/dist/packages/crucible/seeds/js/seed-007.js +26 -0
- package/dist/packages/crucible/seeds/js/seed-008.js +30 -0
- package/dist/packages/crucible/seeds/js/seed-009.js +30 -0
- package/dist/packages/crucible/seeds/js/seed-010.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-011.js +34 -0
- package/dist/packages/crucible/seeds/js/seed-012.js +32 -0
- package/dist/packages/crucible/seeds/js/seed-013.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-014.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-015.js +31 -0
- package/dist/packages/crucible/seeds/js/seed-016.js +31 -0
- package/dist/packages/crucible/seeds/js/seed-017.js +30 -0
- package/dist/packages/crucible/seeds/js/seed-018.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-019.js +32 -0
- package/dist/packages/crucible/seeds/js/seed-020.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-021.js +31 -0
- package/dist/packages/crucible/seeds/js/seed-022.js +31 -0
- package/dist/packages/crucible/seeds/js/seed-023.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-024.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-025.js +34 -0
- package/dist/packages/crucible/seeds/js/seed-026.js +31 -0
- package/dist/packages/crucible/seeds/js/seed-027.js +31 -0
- package/dist/packages/crucible/seeds/js/seed-028.js +33 -0
- package/dist/packages/crucible/seeds/js/seed-029.js +33 -0
- package/dist/packages/crucible/seeds/js/seed-030.js +30 -0
- package/dist/packages/crucible/seeds/js/seed-031.js +31 -0
- package/dist/packages/crucible/seeds/js/seed-032.js +34 -0
- package/dist/packages/crucible/seeds/js/seed-033.js +33 -0
- package/dist/packages/crucible/seeds/js/seed-034.js +33 -0
- package/dist/packages/crucible/seeds/js/seed-035.js +30 -0
- package/dist/packages/crucible/seeds/js/seed-036.js +30 -0
- package/dist/packages/crucible/seeds/js/seed-037.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-038.js +31 -0
- package/dist/packages/crucible/seeds/js/seed-039.js +34 -0
- package/dist/packages/crucible/seeds/js/seed-040.js +35 -0
- package/dist/packages/crucible/seeds/js/seed-041.js +32 -0
- package/dist/packages/crucible/seeds/js/seed-042.js +32 -0
- package/dist/packages/crucible/seeds/js/seed-043.js +27 -0
- package/dist/packages/crucible/seeds/js/seed-044.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-045.js +33 -0
- package/dist/packages/crucible/seeds/js/seed-046.js +33 -0
- package/dist/packages/crucible/seeds/js/seed-047.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-048.js +29 -0
- package/dist/packages/crucible/seeds/js/seed-049.js +34 -0
- package/dist/packages/crucible/seeds/js/seed-050.js +34 -0
- package/dist/packages/crucible/seeds/js/seed-051.js +30 -0
- package/dist/packages/crucible/seeds/js/seed-052.js +30 -0
- package/dist/packages/crucible/seeds/js/seed-053.js +26 -0
- package/dist/packages/crucible/seeds/js/seed-054.js +35 -0
- package/dist/packages/crucible/seeds/js/seed-055.js +33 -0
- package/dist/packages/crucible/seeds/kotlin/seed-001.kt +24 -0
- package/dist/packages/crucible/seeds/kotlin/seed-002.kt +27 -0
- package/dist/packages/crucible/seeds/kotlin/seed-003.kt +29 -0
- package/dist/packages/crucible/seeds/kotlin/seed-004.kt +24 -0
- package/dist/packages/crucible/seeds/kotlin/seed-005.kt +29 -0
- package/dist/packages/crucible/seeds/kotlin/seed-006.kt +21 -0
- package/dist/packages/crucible/seeds/kotlin/seed-007.kt +23 -0
- package/dist/packages/crucible/seeds/kotlin/seed-008.kt +25 -0
- package/dist/packages/crucible/seeds/kotlin/seed-009.kt +21 -0
- package/dist/packages/crucible/seeds/kotlin/seed-010.kt +28 -0
- package/dist/packages/crucible/seeds/kotlin/seed-011.kt +22 -0
- package/dist/packages/crucible/seeds/kotlin/seed-012.kt +25 -0
- package/dist/packages/crucible/seeds/kotlin/seed-013.kt +30 -0
- package/dist/packages/crucible/seeds/kotlin/seed-014.kt +27 -0
- package/dist/packages/crucible/seeds/kotlin/seed-015.kt +24 -0
- package/dist/packages/crucible/seeds/kotlin/seed-016.kt +28 -0
- package/dist/packages/crucible/seeds/kotlin/seed-017.kt +33 -0
- package/dist/packages/crucible/seeds/kotlin/seed-018.kt +31 -0
- package/dist/packages/crucible/seeds/kotlin/seed-019.kt +28 -0
- package/dist/packages/crucible/seeds/kotlin/seed-020.kt +31 -0
- package/dist/packages/crucible/seeds/kotlin/seed-021.kt +34 -0
- package/dist/packages/crucible/seeds/kotlin/seed-022.kt +29 -0
- package/dist/packages/crucible/seeds/kotlin/seed-023.kt +20 -0
- package/dist/packages/crucible/seeds/kotlin/seed-024.kt +23 -0
- package/dist/packages/crucible/seeds/kotlin/seed-025.kt +23 -0
- package/dist/packages/crucible/seeds/kotlin/seed-026.kt +26 -0
- package/dist/packages/crucible/seeds/kotlin/seed-027.kt +29 -0
- package/dist/packages/crucible/seeds/kotlin/seed-028.kt +24 -0
- package/dist/packages/crucible/seeds/kotlin/seed-029.kt +27 -0
- package/dist/packages/crucible/seeds/kotlin/seed-030.kt +26 -0
- package/dist/packages/crucible/seeds/kotlin/seed-031.kt +28 -0
- package/dist/packages/crucible/seeds/kotlin/seed-032.kt +29 -0
- package/dist/packages/crucible/seeds/kotlin/seed-033.kt +30 -0
- package/dist/packages/crucible/seeds/kotlin/seed-034.kt +26 -0
- package/dist/packages/crucible/seeds/kotlin/seed-035.kt +33 -0
- package/dist/packages/crucible/seeds/kotlin/seed-036.kt +25 -0
- package/dist/packages/crucible/seeds/kotlin/seed-037.kt +26 -0
- package/dist/packages/crucible/seeds/kotlin/seed-038.kt +25 -0
- package/dist/packages/crucible/seeds/kotlin/seed-039.kt +29 -0
- package/dist/packages/crucible/seeds/kotlin/seed-040.kt +28 -0
- package/dist/packages/crucible/seeds/kotlin/seed-041.kt +31 -0
- package/dist/packages/crucible/seeds/kotlin/seed-042.kt +27 -0
- package/dist/packages/crucible/seeds/kotlin/seed-043.kt +26 -0
- package/dist/packages/crucible/seeds/kotlin/seed-044.kt +27 -0
- package/dist/packages/crucible/seeds/kotlin/seed-045.kt +27 -0
- package/dist/packages/crucible/seeds/kotlin/seed-046.kt +33 -0
- package/dist/packages/crucible/seeds/kotlin/seed-047.kt +32 -0
- package/dist/packages/crucible/seeds/kotlin/seed-048.kt +20 -0
- package/dist/packages/crucible/seeds/kotlin/seed-049.kt +23 -0
- package/dist/packages/crucible/seeds/kotlin/seed-050.kt +19 -0
- package/dist/packages/crucible/seeds/php/seed-001.php +23 -0
- package/dist/packages/crucible/seeds/php/seed-002.php +18 -0
- package/dist/packages/crucible/seeds/php/seed-003.php +25 -0
- package/dist/packages/crucible/seeds/php/seed-004.php +21 -0
- package/dist/packages/crucible/seeds/php/seed-005.php +21 -0
- package/dist/packages/crucible/seeds/php/seed-006.php +21 -0
- package/dist/packages/crucible/seeds/php/seed-007.php +18 -0
- package/dist/packages/crucible/seeds/php/seed-008.php +19 -0
- package/dist/packages/crucible/seeds/php/seed-009.php +24 -0
- package/dist/packages/crucible/seeds/php/seed-010.php +24 -0
- package/dist/packages/crucible/seeds/php/seed-011.php +18 -0
- package/dist/packages/crucible/seeds/php/seed-012.php +24 -0
- package/dist/packages/crucible/seeds/php/seed-013.php +23 -0
- package/dist/packages/crucible/seeds/php/seed-014.php +20 -0
- package/dist/packages/crucible/seeds/php/seed-015.php +18 -0
- package/dist/packages/crucible/seeds/php/seed-016.php +18 -0
- package/dist/packages/crucible/seeds/php/seed-017.php +18 -0
- package/dist/packages/crucible/seeds/php/seed-018.php +17 -0
- package/dist/packages/crucible/seeds/php/seed-019.php +24 -0
- package/dist/packages/crucible/seeds/php/seed-020.php +19 -0
- package/dist/packages/crucible/seeds/php/seed-021.php +22 -0
- package/dist/packages/crucible/seeds/php/seed-022.php +15 -0
- package/dist/packages/crucible/seeds/php/seed-023.php +24 -0
- package/dist/packages/crucible/seeds/php/seed-024.php +22 -0
- package/dist/packages/crucible/seeds/php/seed-025.php +20 -0
- package/dist/packages/crucible/seeds/php/seed-026.php +22 -0
- package/dist/packages/crucible/seeds/php/seed-027.php +15 -0
- package/dist/packages/crucible/seeds/php/seed-028.php +15 -0
- package/dist/packages/crucible/seeds/php/seed-029.php +21 -0
- package/dist/packages/crucible/seeds/php/seed-030.php +21 -0
- package/dist/packages/crucible/seeds/php/seed-031.php +23 -0
- package/dist/packages/crucible/seeds/php/seed-032.php +18 -0
- package/dist/packages/crucible/seeds/php/seed-033.php +18 -0
- package/dist/packages/crucible/seeds/php/seed-034.php +24 -0
- package/dist/packages/crucible/seeds/php/seed-035.php +22 -0
- package/dist/packages/crucible/seeds/php/seed-036.php +17 -0
- package/dist/packages/crucible/seeds/php/seed-037.php +19 -0
- package/dist/packages/crucible/seeds/php/seed-038.php +20 -0
- package/dist/packages/crucible/seeds/php/seed-039.php +15 -0
- package/dist/packages/crucible/seeds/php/seed-040.php +21 -0
- package/dist/packages/crucible/seeds/php/seed-041.php +20 -0
- package/dist/packages/crucible/seeds/php/seed-042.php +21 -0
- package/dist/packages/crucible/seeds/php/seed-043.php +21 -0
- package/dist/packages/crucible/seeds/php/seed-044.php +25 -0
- package/dist/packages/crucible/seeds/php/seed-045.php +25 -0
- package/dist/packages/crucible/seeds/php/seed-046.php +20 -0
- package/dist/packages/crucible/seeds/php/seed-047.php +21 -0
- package/dist/packages/crucible/seeds/php/seed-048.php +19 -0
- package/dist/packages/crucible/seeds/php/seed-049.php +18 -0
- package/dist/packages/crucible/seeds/php/seed-050.php +20 -0
- package/dist/packages/crucible/seeds/python/seed-001.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-002.py +39 -0
- package/dist/packages/crucible/seeds/python/seed-003.py +31 -0
- package/dist/packages/crucible/seeds/python/seed-004.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-005.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-006.py +34 -0
- package/dist/packages/crucible/seeds/python/seed-007.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-008.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-009.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-010.py +42 -0
- package/dist/packages/crucible/seeds/python/seed-011.py +30 -0
- package/dist/packages/crucible/seeds/python/seed-012.py +35 -0
- package/dist/packages/crucible/seeds/python/seed-013.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-014.py +40 -0
- package/dist/packages/crucible/seeds/python/seed-015.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-016.py +34 -0
- package/dist/packages/crucible/seeds/python/seed-017.py +34 -0
- package/dist/packages/crucible/seeds/python/seed-018.py +30 -0
- package/dist/packages/crucible/seeds/python/seed-019.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-020.py +37 -0
- package/dist/packages/crucible/seeds/python/seed-021 2.py +37 -0
- package/dist/packages/crucible/seeds/python/seed-021.py +37 -0
- package/dist/packages/crucible/seeds/python/seed-022 2.py +34 -0
- package/dist/packages/crucible/seeds/python/seed-022.py +34 -0
- package/dist/packages/crucible/seeds/python/seed-023 2.py +37 -0
- package/dist/packages/crucible/seeds/python/seed-023.py +37 -0
- package/dist/packages/crucible/seeds/python/seed-024 2.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-024.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-025 2.py +40 -0
- package/dist/packages/crucible/seeds/python/seed-025.py +40 -0
- package/dist/packages/crucible/seeds/python/seed-026 2.py +35 -0
- package/dist/packages/crucible/seeds/python/seed-026.py +35 -0
- package/dist/packages/crucible/seeds/python/seed-027 2.py +35 -0
- package/dist/packages/crucible/seeds/python/seed-027.py +35 -0
- package/dist/packages/crucible/seeds/python/seed-028 2.py +42 -0
- package/dist/packages/crucible/seeds/python/seed-028.py +42 -0
- package/dist/packages/crucible/seeds/python/seed-029.py +42 -0
- package/dist/packages/crucible/seeds/python/seed-030 2.py +37 -0
- package/dist/packages/crucible/seeds/python/seed-030.py +37 -0
- package/dist/packages/crucible/seeds/python/seed-031 2.py +34 -0
- package/dist/packages/crucible/seeds/python/seed-031.py +34 -0
- package/dist/packages/crucible/seeds/python/seed-032.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-033.py +32 -0
- package/dist/packages/crucible/seeds/python/seed-034.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-035.py +35 -0
- package/dist/packages/crucible/seeds/python/seed-036 2.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-036.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-037 2.py +41 -0
- package/dist/packages/crucible/seeds/python/seed-037.py +41 -0
- package/dist/packages/crucible/seeds/python/seed-038 2.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-038.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-039 2.py +39 -0
- package/dist/packages/crucible/seeds/python/seed-039.py +39 -0
- package/dist/packages/crucible/seeds/python/seed-040 2.py +39 -0
- package/dist/packages/crucible/seeds/python/seed-040.py +39 -0
- package/dist/packages/crucible/seeds/python/seed-041 2.py +37 -0
- package/dist/packages/crucible/seeds/python/seed-041.py +37 -0
- package/dist/packages/crucible/seeds/python/seed-042 2.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-042.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-043 2.py +32 -0
- package/dist/packages/crucible/seeds/python/seed-043.py +32 -0
- package/dist/packages/crucible/seeds/python/seed-044 2.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-044.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-045 2.py +36 -0
- package/dist/packages/crucible/seeds/python/seed-045.py +36 -0
- package/dist/packages/crucible/seeds/python/seed-046 2.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-046.py +33 -0
- package/dist/packages/crucible/seeds/python/seed-047 2.py +44 -0
- package/dist/packages/crucible/seeds/python/seed-047.py +44 -0
- package/dist/packages/crucible/seeds/python/seed-048 2.py +35 -0
- package/dist/packages/crucible/seeds/python/seed-048.py +35 -0
- package/dist/packages/crucible/seeds/python/seed-049 2.py +39 -0
- package/dist/packages/crucible/seeds/python/seed-049.py +39 -0
- package/dist/packages/crucible/seeds/python/seed-050 2.py +39 -0
- package/dist/packages/crucible/seeds/python/seed-050.py +39 -0
- package/dist/packages/crucible/seeds/python/seed-051 2.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-051.py +38 -0
- package/dist/packages/crucible/seeds/python/seed-052 2.py +41 -0
- package/dist/packages/crucible/seeds/python/seed-052.py +41 -0
- package/dist/packages/crucible/seeds/ruby/seed-001 2.rb +15 -0
- package/dist/packages/crucible/seeds/ruby/seed-001.rb +15 -0
- package/dist/packages/crucible/seeds/ruby/seed-002 2.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-002.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-003 2.rb +25 -0
- package/dist/packages/crucible/seeds/ruby/seed-003.rb +25 -0
- package/dist/packages/crucible/seeds/ruby/seed-004 2.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-004.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-005 2.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-005.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-006 2.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-006.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-007 2.rb +16 -0
- package/dist/packages/crucible/seeds/ruby/seed-007.rb +16 -0
- package/dist/packages/crucible/seeds/ruby/seed-008 2.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-008.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-009 2.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-009.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-010 2.rb +24 -0
- package/dist/packages/crucible/seeds/ruby/seed-010.rb +24 -0
- package/dist/packages/crucible/seeds/ruby/seed-011 2.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-011.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-012 2.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-012.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-013 2.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-013.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-014 2.rb +16 -0
- package/dist/packages/crucible/seeds/ruby/seed-014.rb +16 -0
- package/dist/packages/crucible/seeds/ruby/seed-015 2.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-015.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-016 2.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-016.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-017 2.rb +25 -0
- package/dist/packages/crucible/seeds/ruby/seed-017.rb +25 -0
- package/dist/packages/crucible/seeds/ruby/seed-018 2.rb +23 -0
- package/dist/packages/crucible/seeds/ruby/seed-018.rb +23 -0
- package/dist/packages/crucible/seeds/ruby/seed-019 2.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-019.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-020 2.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-020.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-021 2.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-021.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-022 2.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-022.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-023 2.rb +19 -0
- package/dist/packages/crucible/seeds/ruby/seed-023.rb +19 -0
- package/dist/packages/crucible/seeds/ruby/seed-024 2.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-024.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-025 2.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-025.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-026 2.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-026.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-027 2.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-027.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-028 2.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-028.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-029 2.rb +19 -0
- package/dist/packages/crucible/seeds/ruby/seed-029.rb +19 -0
- package/dist/packages/crucible/seeds/ruby/seed-030 2.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-030.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-031 2.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-031.rb +17 -0
- package/dist/packages/crucible/seeds/ruby/seed-032 2.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-032.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-033 2.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-033.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-034 2.rb +19 -0
- package/dist/packages/crucible/seeds/ruby/seed-034.rb +19 -0
- package/dist/packages/crucible/seeds/ruby/seed-035 2.rb +19 -0
- package/dist/packages/crucible/seeds/ruby/seed-035.rb +19 -0
- package/dist/packages/crucible/seeds/ruby/seed-036 2.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-036.rb +18 -0
- package/dist/packages/crucible/seeds/ruby/seed-037 2.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-037.rb +21 -0
- package/dist/packages/crucible/seeds/ruby/seed-038 2.rb +24 -0
- package/dist/packages/crucible/seeds/ruby/seed-038.rb +24 -0
- package/dist/packages/crucible/seeds/ruby/seed-039 2.rb +24 -0
- package/dist/packages/crucible/seeds/ruby/seed-039.rb +24 -0
- package/dist/packages/crucible/seeds/ruby/seed-040 2.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-040.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-041 2.rb +23 -0
- package/dist/packages/crucible/seeds/ruby/seed-041.rb +23 -0
- package/dist/packages/crucible/seeds/ruby/seed-042 2.rb +25 -0
- package/dist/packages/crucible/seeds/ruby/seed-042.rb +25 -0
- package/dist/packages/crucible/seeds/ruby/seed-043 2.rb +23 -0
- package/dist/packages/crucible/seeds/ruby/seed-043.rb +23 -0
- package/dist/packages/crucible/seeds/ruby/seed-044 2.rb +16 -0
- package/dist/packages/crucible/seeds/ruby/seed-044.rb +16 -0
- package/dist/packages/crucible/seeds/ruby/seed-045 2.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-045.rb +22 -0
- package/dist/packages/crucible/seeds/ruby/seed-046 2.rb +27 -0
- package/dist/packages/crucible/seeds/ruby/seed-046.rb +27 -0
- package/dist/packages/crucible/seeds/ruby/seed-047 2.rb +26 -0
- package/dist/packages/crucible/seeds/ruby/seed-047.rb +26 -0
- package/dist/packages/crucible/seeds/ruby/seed-048 2.rb +24 -0
- package/dist/packages/crucible/seeds/ruby/seed-048.rb +24 -0
- package/dist/packages/crucible/seeds/ruby/seed-049 2.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-049.rb +20 -0
- package/dist/packages/crucible/seeds/ruby/seed-050 2.rb +27 -0
- package/dist/packages/crucible/seeds/ruby/seed-050.rb +27 -0
- package/dist/packages/crucible/seeds/rust/seed-001 2.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-001.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-002 2.rs +20 -0
- package/dist/packages/crucible/seeds/rust/seed-002.rs +20 -0
- package/dist/packages/crucible/seeds/rust/seed-003 2.rs +23 -0
- package/dist/packages/crucible/seeds/rust/seed-003.rs +23 -0
- package/dist/packages/crucible/seeds/rust/seed-004 2.rs +21 -0
- package/dist/packages/crucible/seeds/rust/seed-004.rs +21 -0
- package/dist/packages/crucible/seeds/rust/seed-005 2.rs +21 -0
- package/dist/packages/crucible/seeds/rust/seed-005.rs +21 -0
- package/dist/packages/crucible/seeds/rust/seed-006 2.rs +24 -0
- package/dist/packages/crucible/seeds/rust/seed-006.rs +24 -0
- package/dist/packages/crucible/seeds/rust/seed-007 2.rs +20 -0
- package/dist/packages/crucible/seeds/rust/seed-007.rs +20 -0
- package/dist/packages/crucible/seeds/rust/seed-008 2.rs +19 -0
- package/dist/packages/crucible/seeds/rust/seed-008.rs +19 -0
- package/dist/packages/crucible/seeds/rust/seed-009 2.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-009.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-010 2.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-010.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-011 2.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-011.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-012 2.rs +31 -0
- package/dist/packages/crucible/seeds/rust/seed-012.rs +31 -0
- package/dist/packages/crucible/seeds/rust/seed-013 2.rs +27 -0
- package/dist/packages/crucible/seeds/rust/seed-013.rs +27 -0
- package/dist/packages/crucible/seeds/rust/seed-014 2.rs +30 -0
- package/dist/packages/crucible/seeds/rust/seed-014.rs +30 -0
- package/dist/packages/crucible/seeds/rust/seed-015 2.rs +33 -0
- package/dist/packages/crucible/seeds/rust/seed-015.rs +33 -0
- package/dist/packages/crucible/seeds/rust/seed-016 2.rs +22 -0
- package/dist/packages/crucible/seeds/rust/seed-016.rs +22 -0
- package/dist/packages/crucible/seeds/rust/seed-017 2.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-017.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-018 2.rs +21 -0
- package/dist/packages/crucible/seeds/rust/seed-018.rs +21 -0
- package/dist/packages/crucible/seeds/rust/seed-019 2.rs +36 -0
- package/dist/packages/crucible/seeds/rust/seed-019.rs +36 -0
- package/dist/packages/crucible/seeds/rust/seed-020 2.rs +27 -0
- package/dist/packages/crucible/seeds/rust/seed-020.rs +27 -0
- package/dist/packages/crucible/seeds/rust/seed-021 2.rs +26 -0
- package/dist/packages/crucible/seeds/rust/seed-021.rs +26 -0
- package/dist/packages/crucible/seeds/rust/seed-022 2.rs +23 -0
- package/dist/packages/crucible/seeds/rust/seed-022.rs +23 -0
- package/dist/packages/crucible/seeds/rust/seed-023 2.rs +22 -0
- package/dist/packages/crucible/seeds/rust/seed-023.rs +22 -0
- package/dist/packages/crucible/seeds/rust/seed-024 2.rs +24 -0
- package/dist/packages/crucible/seeds/rust/seed-024.rs +24 -0
- package/dist/packages/crucible/seeds/rust/seed-025 2.rs +29 -0
- package/dist/packages/crucible/seeds/rust/seed-025.rs +29 -0
- package/dist/packages/crucible/seeds/rust/seed-026 2.rs +23 -0
- package/dist/packages/crucible/seeds/rust/seed-026.rs +23 -0
- package/dist/packages/crucible/seeds/rust/seed-027 2.rs +24 -0
- package/dist/packages/crucible/seeds/rust/seed-027.rs +24 -0
- package/dist/packages/crucible/seeds/rust/seed-028 2.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-028.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-029 2.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-029.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-030 2.rs +30 -0
- package/dist/packages/crucible/seeds/rust/seed-030.rs +30 -0
- package/dist/packages/crucible/seeds/rust/seed-031 2.rs +22 -0
- package/dist/packages/crucible/seeds/rust/seed-031.rs +22 -0
- package/dist/packages/crucible/seeds/rust/seed-032 2.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-032.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-033 2.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-033.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-034 2.rs +20 -0
- package/dist/packages/crucible/seeds/rust/seed-034.rs +20 -0
- package/dist/packages/crucible/seeds/rust/seed-035 2.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-035.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-036 2.rs +26 -0
- package/dist/packages/crucible/seeds/rust/seed-036.rs +26 -0
- package/dist/packages/crucible/seeds/rust/seed-037 2.rs +31 -0
- package/dist/packages/crucible/seeds/rust/seed-037.rs +31 -0
- package/dist/packages/crucible/seeds/rust/seed-038 2.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-038.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-039 2.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-039.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-040 2.rs +27 -0
- package/dist/packages/crucible/seeds/rust/seed-040.rs +27 -0
- package/dist/packages/crucible/seeds/rust/seed-041 2.rs +32 -0
- package/dist/packages/crucible/seeds/rust/seed-041.rs +32 -0
- package/dist/packages/crucible/seeds/rust/seed-042 2.rs +27 -0
- package/dist/packages/crucible/seeds/rust/seed-042.rs +27 -0
- package/dist/packages/crucible/seeds/rust/seed-043 2.rs +29 -0
- package/dist/packages/crucible/seeds/rust/seed-043.rs +29 -0
- package/dist/packages/crucible/seeds/rust/seed-044 2.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-044.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-045 2.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-045.rs +28 -0
- package/dist/packages/crucible/seeds/rust/seed-046 2.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-046.rs +25 -0
- package/dist/packages/crucible/seeds/rust/seed-047 2.rs +34 -0
- package/dist/packages/crucible/seeds/rust/seed-047.rs +34 -0
- package/dist/packages/crucible/seeds/rust/seed-048 2.rs +21 -0
- package/dist/packages/crucible/seeds/rust/seed-048.rs +21 -0
- package/dist/packages/crucible/seeds/rust/seed-049 2.rs +26 -0
- package/dist/packages/crucible/seeds/rust/seed-049.rs +26 -0
- package/dist/packages/crucible/seeds/rust/seed-050 2.rs +23 -0
- package/dist/packages/crucible/seeds/rust/seed-050.rs +23 -0
- package/dist/packages/crucible/seeds/ts/seed-001 2.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-001.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-002 2.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-002.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-003 2.ts +28 -0
- package/dist/packages/crucible/seeds/ts/seed-003.ts +28 -0
- package/dist/packages/crucible/seeds/ts/seed-004 2.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-004.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-005 2.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-005.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-006 2.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-006.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-007 2.ts +28 -0
- package/dist/packages/crucible/seeds/ts/seed-007.ts +28 -0
- package/dist/packages/crucible/seeds/ts/seed-008 2.ts +40 -0
- package/dist/packages/crucible/seeds/ts/seed-008.ts +40 -0
- package/dist/packages/crucible/seeds/ts/seed-009 2.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-009.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-010 2.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-010.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-011 2.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-011.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-012 2.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-012.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-013 2.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-013.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-014 2.ts +36 -0
- package/dist/packages/crucible/seeds/ts/seed-014.ts +36 -0
- package/dist/packages/crucible/seeds/ts/seed-015 2.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-015.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-016 2.ts +37 -0
- package/dist/packages/crucible/seeds/ts/seed-016.ts +37 -0
- package/dist/packages/crucible/seeds/ts/seed-017 2.ts +44 -0
- package/dist/packages/crucible/seeds/ts/seed-017.ts +44 -0
- package/dist/packages/crucible/seeds/ts/seed-018 2.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-018.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-019 2.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-019.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-020 2.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-020.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-021 2.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-021.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-022 2.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-022.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-023 2.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-023.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-024 2.ts +35 -0
- package/dist/packages/crucible/seeds/ts/seed-024.ts +35 -0
- package/dist/packages/crucible/seeds/ts/seed-025 2.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-025.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-026 2.ts +36 -0
- package/dist/packages/crucible/seeds/ts/seed-026.ts +36 -0
- package/dist/packages/crucible/seeds/ts/seed-027 2.ts +30 -0
- package/dist/packages/crucible/seeds/ts/seed-027.ts +30 -0
- package/dist/packages/crucible/seeds/ts/seed-028 2.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-028.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-029 2.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-029.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-030 2.ts +37 -0
- package/dist/packages/crucible/seeds/ts/seed-030.ts +37 -0
- package/dist/packages/crucible/seeds/ts/seed-031 2.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-031.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-032 2.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-032.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-033 2.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-033.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-034 2.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-034.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-035 2.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-035.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-036 2.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-036.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-037 2.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-037.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-038 2.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-038.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-039 2.ts +35 -0
- package/dist/packages/crucible/seeds/ts/seed-039.ts +35 -0
- package/dist/packages/crucible/seeds/ts/seed-040 2.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-040.ts +31 -0
- package/dist/packages/crucible/seeds/ts/seed-041 2.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-041.ts +29 -0
- package/dist/packages/crucible/seeds/ts/seed-042 2.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-042.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-043 2.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-043.ts +32 -0
- package/dist/packages/crucible/seeds/ts/seed-044 2.ts +36 -0
- package/dist/packages/crucible/seeds/ts/seed-044.ts +36 -0
- package/dist/packages/crucible/seeds/ts/seed-045 2.ts +39 -0
- package/dist/packages/crucible/seeds/ts/seed-045.ts +39 -0
- package/dist/packages/crucible/seeds/ts/seed-046 2.ts +41 -0
- package/dist/packages/crucible/seeds/ts/seed-046.ts +41 -0
- package/dist/packages/crucible/seeds/ts/seed-047 2.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-047.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-048 2.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-048.ts +33 -0
- package/dist/packages/crucible/seeds/ts/seed-049 2.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-049.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-050 2.ts +41 -0
- package/dist/packages/crucible/seeds/ts/seed-050.ts +41 -0
- package/dist/packages/crucible/seeds/ts/seed-051 2.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-051.ts +34 -0
- package/dist/packages/crucible/seeds/ts/seed-052 2.ts +36 -0
- package/dist/packages/crucible/seeds/ts/seed-052.ts +36 -0
- package/dist/packages/crucible/self-attack.js +1 -0
- package/dist/packages/scanner/ai-confidence-scorer.js +1 -1
- package/dist/packages/scanner/alert-manager.js +1 -1
- package/dist/packages/scanner/ast-analyzer.js +1 -0
- package/dist/packages/scanner/baseline-manager.js +1 -1
- package/dist/packages/scanner/cfg-analyzer.js +1 -0
- package/dist/packages/scanner/code-scanner.js +1 -1
- package/dist/packages/scanner/dependency-graph.js +1 -1
- package/dist/packages/scanner/drift-detector.js +1 -1
- package/dist/packages/scanner/executive-report.js +1 -1
- package/dist/packages/scanner/export-verifier.js +1 -0
- package/dist/packages/scanner/file-collector.js +1 -1
- package/dist/packages/scanner/file-watcher.js +1 -1
- package/dist/packages/scanner/ghost-code-detector.js +1 -1
- package/dist/packages/scanner/go-ast-analyzer.js +1 -0
- package/dist/packages/scanner/hallucination-detector.js +1 -1
- package/dist/packages/scanner/html-report.js +1 -1
- package/dist/packages/scanner/license-manager.js +1 -1
- package/dist/packages/scanner/master-health-checker.js +1 -1
- package/dist/packages/scanner/monitor-service.js +1 -1
- package/dist/packages/scanner/monitor-store.js +1 -1
- package/dist/packages/scanner/python-ast-analyzer.js +1 -0
- package/dist/packages/scanner/secret-scanner.js +1 -1
- package/dist/packages/scanner/sentinel-core.js +1 -1
- package/dist/packages/scanner/taint-tracker.js +1 -0
- package/dist/packages/scanner/tech-debt-analyzer.js +1 -1
- package/dist/packages/scanner/tech-debt-cost.js +1 -1
- package/dist/packages/scanner/widget-generator.js +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: path_traversal
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Path traversal via file write using user-supplied output path
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import javax.servlet.http.*;
|
|
9
|
+
|
|
10
|
+
public class ReportWriterServlet extends HttpServlet {
|
|
11
|
+
private static final String REPORT_BASE = "/var/reports/";
|
|
12
|
+
|
|
13
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
14
|
+
throws IOException {
|
|
15
|
+
String reportName = req.getParameter("reportName");
|
|
16
|
+
String content = req.getParameter("content");
|
|
17
|
+
// Vulnerable: reportName can traverse directories (../../etc/cron.d/backdoor)
|
|
18
|
+
File out = new File(REPORT_BASE + reportName + ".txt");
|
|
19
|
+
try (FileWriter fw = new FileWriter(out)) {
|
|
20
|
+
fw.write(content);
|
|
21
|
+
}
|
|
22
|
+
resp.getWriter().println("Report saved.");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: MD5 used for password hashing via MessageDigest
|
|
6
|
+
|
|
7
|
+
import java.security.MessageDigest;
|
|
8
|
+
import java.security.NoSuchAlgorithmException;
|
|
9
|
+
|
|
10
|
+
public class PasswordHasher {
|
|
11
|
+
public static String hashPassword(String password) throws NoSuchAlgorithmException {
|
|
12
|
+
// Vulnerable: MD5 is cryptographically broken and unsalted
|
|
13
|
+
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
14
|
+
byte[] hash = md.digest(password.getBytes());
|
|
15
|
+
StringBuilder sb = new StringBuilder();
|
|
16
|
+
for (byte b : hash) sb.append(String.format("%02x", b));
|
|
17
|
+
return sb.toString();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public static boolean verifyPassword(String password, String storedHash)
|
|
21
|
+
throws NoSuchAlgorithmException {
|
|
22
|
+
return hashPassword(password).equals(storedHash);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: DES cipher used for data encryption (56-bit key, broken algorithm)
|
|
6
|
+
|
|
7
|
+
import javax.crypto.*;
|
|
8
|
+
import javax.crypto.spec.SecretKeySpec;
|
|
9
|
+
import java.util.Base64;
|
|
10
|
+
|
|
11
|
+
public class DataEncryptor {
|
|
12
|
+
// Vulnerable: DES uses only 56-bit key, broken since 1999
|
|
13
|
+
private static final String ALGORITHM = "DES";
|
|
14
|
+
private static final byte[] KEY_BYTES = "8byteKey".getBytes();
|
|
15
|
+
|
|
16
|
+
public static String encrypt(String plaintext) throws Exception {
|
|
17
|
+
SecretKeySpec key = new SecretKeySpec(KEY_BYTES, ALGORITHM);
|
|
18
|
+
Cipher cipher = Cipher.getInstance(ALGORITHM);
|
|
19
|
+
cipher.init(Cipher.ENCRYPT_MODE, key);
|
|
20
|
+
return Base64.getEncoder().encodeToString(cipher.doFinal(plaintext.getBytes()));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public static String decrypt(String ciphertext) throws Exception {
|
|
24
|
+
SecretKeySpec key = new SecretKeySpec(KEY_BYTES, ALGORITHM);
|
|
25
|
+
Cipher cipher = Cipher.getInstance(ALGORITHM);
|
|
26
|
+
cipher.init(Cipher.DECRYPT_MODE, key);
|
|
27
|
+
return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: java.util.Random used for security token generation instead of SecureRandom
|
|
6
|
+
|
|
7
|
+
import java.util.Random;
|
|
8
|
+
|
|
9
|
+
public class TokenGenerator {
|
|
10
|
+
// Vulnerable: java.util.Random is not cryptographically secure
|
|
11
|
+
private static final Random RANDOM = new Random();
|
|
12
|
+
private static final String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
13
|
+
|
|
14
|
+
public static String generateSessionToken(int length) {
|
|
15
|
+
StringBuilder sb = new StringBuilder(length);
|
|
16
|
+
for (int i = 0; i < length; i++) {
|
|
17
|
+
sb.append(CHARS.charAt(RANDOM.nextInt(CHARS.length())));
|
|
18
|
+
}
|
|
19
|
+
return sb.toString();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public static String generatePasswordResetToken() {
|
|
23
|
+
return generateSessionToken(32);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: SHA-1 used for HMAC signature and MD5 for file integrity check
|
|
6
|
+
|
|
7
|
+
import java.security.MessageDigest;
|
|
8
|
+
import javax.crypto.Mac;
|
|
9
|
+
import javax.crypto.spec.SecretKeySpec;
|
|
10
|
+
|
|
11
|
+
public class IntegrityChecker {
|
|
12
|
+
public static String computeHmac(String data, String key) throws Exception {
|
|
13
|
+
// Vulnerable: HMAC-SHA1 is weak for new applications
|
|
14
|
+
Mac mac = Mac.getInstance("HmacSHA1");
|
|
15
|
+
mac.init(new SecretKeySpec(key.getBytes(), "HmacSHA1"));
|
|
16
|
+
byte[] raw = mac.doFinal(data.getBytes());
|
|
17
|
+
StringBuilder sb = new StringBuilder();
|
|
18
|
+
for (byte b : raw) sb.append(String.format("%02x", b));
|
|
19
|
+
return sb.toString();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public static String md5File(byte[] fileBytes) throws Exception {
|
|
23
|
+
// Vulnerable: MD5 used for file integrity — collision attacks possible
|
|
24
|
+
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
25
|
+
byte[] hash = md.digest(fileBytes);
|
|
26
|
+
StringBuilder sb = new StringBuilder();
|
|
27
|
+
for (byte b : hash) sb.append(String.format("%02x", b));
|
|
28
|
+
return sb.toString();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: insecure_crypto
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: AES-ECB mode used for encryption (ECB leaks patterns, no IV)
|
|
6
|
+
|
|
7
|
+
import javax.crypto.*;
|
|
8
|
+
import javax.crypto.spec.SecretKeySpec;
|
|
9
|
+
import java.util.Base64;
|
|
10
|
+
|
|
11
|
+
public class AesEcbEncryptor {
|
|
12
|
+
// Vulnerable: AES/ECB/PKCS5Padding does not use an IV and leaks data patterns
|
|
13
|
+
private static final String CIPHER_SPEC = "AES/ECB/PKCS5Padding";
|
|
14
|
+
private static final String SECRET_KEY = "1234567890abcdef"; // 16 bytes
|
|
15
|
+
|
|
16
|
+
public static String encrypt(String plaintext) throws Exception {
|
|
17
|
+
SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
|
|
18
|
+
Cipher cipher = Cipher.getInstance(CIPHER_SPEC);
|
|
19
|
+
cipher.init(Cipher.ENCRYPT_MODE, key);
|
|
20
|
+
return Base64.getEncoder().encodeToString(cipher.doFinal(plaintext.getBytes()));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public static String decrypt(String ct) throws Exception {
|
|
24
|
+
SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
|
|
25
|
+
Cipher cipher = Cipher.getInstance(CIPHER_SPEC);
|
|
26
|
+
cipher.init(Cipher.DECRYPT_MODE, key);
|
|
27
|
+
return new String(cipher.doFinal(Base64.getDecoder().decode(ct)));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: deserialization
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Unsafe deserialization via ObjectInputStream.readObject on untrusted data
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import javax.servlet.http.*;
|
|
9
|
+
|
|
10
|
+
public class SessionRestoreServlet extends HttpServlet {
|
|
11
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
12
|
+
throws IOException {
|
|
13
|
+
// Vulnerable: deserializes raw bytes from request body — no type checking
|
|
14
|
+
InputStream body = req.getInputStream();
|
|
15
|
+
ObjectInputStream ois = new ObjectInputStream(body);
|
|
16
|
+
Object sessionData;
|
|
17
|
+
try {
|
|
18
|
+
sessionData = ois.readObject();
|
|
19
|
+
} catch (ClassNotFoundException e) {
|
|
20
|
+
resp.sendError(400, "Unknown class");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
req.getSession().setAttribute("data", sessionData);
|
|
24
|
+
resp.getWriter().println("Session restored");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: deserialization
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Unsafe deserialization of Base64-decoded cookie value via ObjectInputStream
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import java.util.Base64;
|
|
9
|
+
import javax.servlet.http.*;
|
|
10
|
+
|
|
11
|
+
public class RememberMeServlet extends HttpServlet {
|
|
12
|
+
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
|
13
|
+
throws IOException {
|
|
14
|
+
Cookie[] cookies = req.getCookies();
|
|
15
|
+
for (Cookie c : cookies) {
|
|
16
|
+
if ("rememberMe".equals(c.getName())) {
|
|
17
|
+
byte[] data = Base64.getDecoder().decode(c.getValue());
|
|
18
|
+
// Vulnerable: deserializes attacker-controlled cookie bytes
|
|
19
|
+
try (ObjectInputStream ois = new ObjectInputStream(
|
|
20
|
+
new ByteArrayInputStream(data))) {
|
|
21
|
+
Object principal = ois.readObject();
|
|
22
|
+
req.getSession().setAttribute("user", principal);
|
|
23
|
+
} catch (ClassNotFoundException e) {
|
|
24
|
+
resp.sendError(400);
|
|
25
|
+
}
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
resp.sendRedirect("/dashboard");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: deserialization
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Unsafe deserialization via XMLDecoder on user-supplied XML
|
|
6
|
+
|
|
7
|
+
import java.beans.XMLDecoder;
|
|
8
|
+
import java.io.*;
|
|
9
|
+
import javax.servlet.http.*;
|
|
10
|
+
|
|
11
|
+
public class XmlConfigServlet extends HttpServlet {
|
|
12
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
13
|
+
throws IOException {
|
|
14
|
+
// Vulnerable: XMLDecoder can execute arbitrary Java code via crafted XML
|
|
15
|
+
XMLDecoder decoder = new XMLDecoder(req.getInputStream());
|
|
16
|
+
Object config = decoder.readObject();
|
|
17
|
+
decoder.close();
|
|
18
|
+
resp.getWriter().println("Loaded config: " + config.getClass().getName());
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: deserialization
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Unsafe deserialization in JMS message listener via ObjectMessage
|
|
6
|
+
|
|
7
|
+
import javax.jms.*;
|
|
8
|
+
|
|
9
|
+
public class OrderMessageListener implements MessageListener {
|
|
10
|
+
@Override
|
|
11
|
+
public void onMessage(Message message) {
|
|
12
|
+
try {
|
|
13
|
+
if (message instanceof ObjectMessage) {
|
|
14
|
+
// Vulnerable: ObjectMessage.getObject() deserializes untrusted JMS payload
|
|
15
|
+
Object payload = ((ObjectMessage) message).getObject();
|
|
16
|
+
processOrder(payload);
|
|
17
|
+
}
|
|
18
|
+
} catch (JMSException e) {
|
|
19
|
+
e.printStackTrace();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private void processOrder(Object order) {
|
|
24
|
+
System.out.println("Processing: " + order);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: deserialization
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Unsafe deserialization via ObjectInputStream reading from Redis cache
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import java.util.Base64;
|
|
9
|
+
import redis.clients.jedis.Jedis;
|
|
10
|
+
|
|
11
|
+
public class CacheService {
|
|
12
|
+
private final Jedis jedis;
|
|
13
|
+
|
|
14
|
+
public CacheService(Jedis jedis) { this.jedis = jedis; }
|
|
15
|
+
|
|
16
|
+
public Object get(String key) throws Exception {
|
|
17
|
+
String raw = jedis.get(key);
|
|
18
|
+
if (raw == null) return null;
|
|
19
|
+
byte[] bytes = Base64.getDecoder().decode(raw);
|
|
20
|
+
// Vulnerable: deserializes data from Redis without class allowlist
|
|
21
|
+
try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes))) {
|
|
22
|
+
return ois.readObject();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public void put(String key, Serializable value) throws Exception {
|
|
27
|
+
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
28
|
+
new ObjectOutputStream(bos).writeObject(value);
|
|
29
|
+
jedis.set(key, Base64.getEncoder().encodeToString(bos.toByteArray()));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: xxe
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: XXE via XMLReader without disabling external entities or DOCTYPE processing
|
|
6
|
+
|
|
7
|
+
import org.xml.sax.*;
|
|
8
|
+
import org.xml.sax.helpers.XMLReaderFactory;
|
|
9
|
+
import java.io.StringReader;
|
|
10
|
+
import javax.servlet.http.*;
|
|
11
|
+
|
|
12
|
+
public class XmlImportServlet extends HttpServlet {
|
|
13
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
14
|
+
throws Exception {
|
|
15
|
+
String xmlBody = new String(req.getInputStream().readAllBytes());
|
|
16
|
+
// Vulnerable: XMLReader with default settings processes external entities
|
|
17
|
+
XMLReader reader = XMLReaderFactory.createXMLReader();
|
|
18
|
+
reader.setContentHandler(new org.xml.sax.helpers.DefaultHandler());
|
|
19
|
+
reader.parse(new InputSource(new StringReader(xmlBody)));
|
|
20
|
+
resp.getWriter().println("XML processed");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: xxe
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: XXE via DocumentBuilderFactory without disabling external entity expansion
|
|
6
|
+
|
|
7
|
+
import javax.xml.parsers.*;
|
|
8
|
+
import org.w3c.dom.*;
|
|
9
|
+
import java.io.*;
|
|
10
|
+
import javax.servlet.http.*;
|
|
11
|
+
|
|
12
|
+
public class DataImportServlet extends HttpServlet {
|
|
13
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
14
|
+
throws Exception {
|
|
15
|
+
// Vulnerable: DocumentBuilderFactory default allows XXE
|
|
16
|
+
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
|
17
|
+
DocumentBuilder db = dbf.newDocumentBuilder();
|
|
18
|
+
Document doc = db.parse(req.getInputStream());
|
|
19
|
+
NodeList items = doc.getElementsByTagName("item");
|
|
20
|
+
PrintWriter out = resp.getWriter();
|
|
21
|
+
for (int i = 0; i < items.getLength(); i++) {
|
|
22
|
+
out.println("Item: " + items.item(i).getTextContent());
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: xxe
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: XXE via SAXParser without secure processing feature enabled
|
|
6
|
+
|
|
7
|
+
import javax.xml.parsers.*;
|
|
8
|
+
import org.xml.sax.helpers.DefaultHandler;
|
|
9
|
+
import java.io.*;
|
|
10
|
+
import javax.servlet.http.*;
|
|
11
|
+
|
|
12
|
+
public class FeedParserServlet extends HttpServlet {
|
|
13
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
14
|
+
throws Exception {
|
|
15
|
+
// Vulnerable: SAXParserFactory default config allows external entity inclusion
|
|
16
|
+
SAXParserFactory factory = SAXParserFactory.newInstance();
|
|
17
|
+
SAXParser parser = factory.newSAXParser();
|
|
18
|
+
DefaultHandler handler = new DefaultHandler();
|
|
19
|
+
parser.parse(req.getInputStream(), handler);
|
|
20
|
+
resp.getWriter().println("Feed parsed");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: xxe
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: XXE via JAXB Unmarshaller processing user-supplied XML without secure settings
|
|
6
|
+
|
|
7
|
+
import javax.xml.bind.*;
|
|
8
|
+
import java.io.*;
|
|
9
|
+
import javax.servlet.http.*;
|
|
10
|
+
|
|
11
|
+
public class OrderUnmarshalServlet extends HttpServlet {
|
|
12
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
13
|
+
throws Exception {
|
|
14
|
+
// Vulnerable: JAXB uses DocumentBuilderFactory internally; XXE possible by default
|
|
15
|
+
JAXBContext ctx = JAXBContext.newInstance(Order.class);
|
|
16
|
+
Unmarshaller um = ctx.createUnmarshaller();
|
|
17
|
+
Object result = um.unmarshal(req.getInputStream());
|
|
18
|
+
resp.getWriter().println("Received order: " + result);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static class Order {
|
|
22
|
+
public String id;
|
|
23
|
+
public String product;
|
|
24
|
+
public int quantity;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: ssrf
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: SSRF via URL.openConnection with user-supplied URL parameter
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import java.net.*;
|
|
9
|
+
import javax.servlet.http.*;
|
|
10
|
+
|
|
11
|
+
public class ProxyServlet extends HttpServlet {
|
|
12
|
+
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
|
13
|
+
throws IOException {
|
|
14
|
+
String targetUrl = req.getParameter("url");
|
|
15
|
+
// Vulnerable: opens connection to any URL including internal services
|
|
16
|
+
URL url = new URL(targetUrl);
|
|
17
|
+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
|
18
|
+
conn.setConnectTimeout(5000);
|
|
19
|
+
conn.setReadTimeout(5000);
|
|
20
|
+
InputStream is = conn.getInputStream();
|
|
21
|
+
resp.setContentType(conn.getContentType());
|
|
22
|
+
is.transferTo(resp.getOutputStream());
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: ssrf
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: SSRF via URL.openStream with user-controlled webhook URL
|
|
6
|
+
|
|
7
|
+
import java.io.*;
|
|
8
|
+
import java.net.*;
|
|
9
|
+
import javax.servlet.http.*;
|
|
10
|
+
|
|
11
|
+
public class WebhookTesterServlet extends HttpServlet {
|
|
12
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
13
|
+
throws IOException {
|
|
14
|
+
String webhookUrl = req.getParameter("webhook_url");
|
|
15
|
+
String payload = req.getParameter("payload");
|
|
16
|
+
// Vulnerable: attacker can direct the server to POST to internal endpoints
|
|
17
|
+
URL url = new URL(webhookUrl);
|
|
18
|
+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
|
19
|
+
conn.setRequestMethod("POST");
|
|
20
|
+
conn.setDoOutput(true);
|
|
21
|
+
conn.setRequestProperty("Content-Type", "application/json");
|
|
22
|
+
try (OutputStream os = conn.getOutputStream()) {
|
|
23
|
+
os.write(payload.getBytes());
|
|
24
|
+
}
|
|
25
|
+
int code = conn.getResponseCode();
|
|
26
|
+
resp.getWriter().println("Webhook responded: " + code);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: ssrf
|
|
3
|
+
// severity: high
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: SSRF via HttpClient built from user-supplied base URL for metadata fetch
|
|
6
|
+
|
|
7
|
+
import java.net.*;
|
|
8
|
+
import java.net.http.*;
|
|
9
|
+
import java.time.Duration;
|
|
10
|
+
import javax.servlet.http.*;
|
|
11
|
+
import java.io.*;
|
|
12
|
+
|
|
13
|
+
public class MetadataFetcherServlet extends HttpServlet {
|
|
14
|
+
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
|
15
|
+
throws IOException, InterruptedException {
|
|
16
|
+
String endpoint = req.getParameter("endpoint");
|
|
17
|
+
// Vulnerable: endpoint could be http://169.254.169.254/latest/meta-data/
|
|
18
|
+
HttpClient client = HttpClient.newBuilder()
|
|
19
|
+
.connectTimeout(Duration.ofSeconds(3))
|
|
20
|
+
.build();
|
|
21
|
+
HttpRequest httpReq = HttpRequest.newBuilder()
|
|
22
|
+
.uri(URI.create(endpoint))
|
|
23
|
+
.GET()
|
|
24
|
+
.build();
|
|
25
|
+
HttpResponse<String> response = client.send(httpReq, HttpResponse.BodyHandlers.ofString());
|
|
26
|
+
resp.setContentType("text/plain");
|
|
27
|
+
resp.getWriter().write(response.body());
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: log_injection
|
|
3
|
+
// severity: medium
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Log injection via logger.info with unvalidated user input enabling log forging
|
|
6
|
+
|
|
7
|
+
import org.slf4j.Logger;
|
|
8
|
+
import org.slf4j.LoggerFactory;
|
|
9
|
+
import javax.servlet.http.*;
|
|
10
|
+
import java.io.IOException;
|
|
11
|
+
|
|
12
|
+
public class LoginAuditServlet extends HttpServlet {
|
|
13
|
+
private static final Logger logger = LoggerFactory.getLogger(LoginAuditServlet.class);
|
|
14
|
+
|
|
15
|
+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
16
|
+
throws IOException {
|
|
17
|
+
String username = req.getParameter("username");
|
|
18
|
+
String ip = req.getHeader("X-Forwarded-For");
|
|
19
|
+
// Vulnerable: attacker-controlled input logged without sanitization
|
|
20
|
+
// e.g. username = "admin\nINFO: Successful login for admin"
|
|
21
|
+
logger.info("Login attempt for user: " + username + " from IP: " + ip);
|
|
22
|
+
// ... authentication logic
|
|
23
|
+
resp.getWriter().println("Login processed");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: log_injection
|
|
3
|
+
// severity: medium
|
|
4
|
+
// language: java
|
|
5
|
+
// expected: Log injection via logger.error with exception message containing user input
|
|
6
|
+
|
|
7
|
+
import org.apache.log4j.Logger;
|
|
8
|
+
import javax.servlet.http.*;
|
|
9
|
+
import java.io.IOException;
|
|
10
|
+
|
|
11
|
+
public class ApiGatewayServlet extends HttpServlet {
|
|
12
|
+
private static final Logger log = Logger.getLogger(ApiGatewayServlet.class);
|
|
13
|
+
|
|
14
|
+
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
|
15
|
+
throws IOException {
|
|
16
|
+
String apiKey = req.getParameter("api_key");
|
|
17
|
+
String method = req.getParameter("method");
|
|
18
|
+
// Vulnerable: method and apiKey injected into log entries without stripping CR/LF
|
|
19
|
+
log.warn("API call - method: " + method + ", key: " + apiKey);
|
|
20
|
+
try {
|
|
21
|
+
dispatch(method, apiKey);
|
|
22
|
+
} catch (Exception e) {
|
|
23
|
+
// Vulnerable: exception message may contain user input
|
|
24
|
+
log.error("Dispatch failed for method: " + method + " - " + e.getMessage());
|
|
25
|
+
resp.sendError(500);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private void dispatch(String method, String key) throws Exception {
|
|
30
|
+
if (method == null) throw new Exception("Unknown method: " + method);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: hardcoded_secret
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: javascript
|
|
5
|
+
// expected: hardcoded API key AWS_SECRET_ACCESS_KEY
|
|
6
|
+
|
|
7
|
+
const AWS = require('aws-sdk');
|
|
8
|
+
|
|
9
|
+
// Production credentials - do not commit!
|
|
10
|
+
const credentials = {
|
|
11
|
+
accessKeyId: 'AKIAIOSFODNN7EXAMPLE',
|
|
12
|
+
secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
|
|
13
|
+
region: 'us-east-1'
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
AWS.config.update(credentials);
|
|
17
|
+
const s3 = new AWS.S3();
|
|
18
|
+
|
|
19
|
+
function uploadFile(buffer, key) {
|
|
20
|
+
return s3.putObject({
|
|
21
|
+
Bucket: 'my-production-bucket',
|
|
22
|
+
Key: key,
|
|
23
|
+
Body: buffer,
|
|
24
|
+
}).promise();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
module.exports = { s3, uploadFile };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: hardcoded_secret
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: javascript
|
|
5
|
+
// expected: hardcoded database password in connection string
|
|
6
|
+
|
|
7
|
+
const { Pool } = require('pg');
|
|
8
|
+
|
|
9
|
+
const pool = new Pool({
|
|
10
|
+
host: 'prod-db.internal.company.com',
|
|
11
|
+
port: 5432,
|
|
12
|
+
database: 'users_production',
|
|
13
|
+
user: 'db_admin',
|
|
14
|
+
password: 'Sup3rS3cr3tPa$$w0rd!',
|
|
15
|
+
ssl: { rejectUnauthorized: false },
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
async function getUser(id) {
|
|
19
|
+
const result = await pool.query('SELECT * FROM users WHERE id = $1', [id]);
|
|
20
|
+
return result.rows[0];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async function listUsers() {
|
|
24
|
+
const result = await pool.query('SELECT id, email, created_at FROM users');
|
|
25
|
+
return result.rows;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
module.exports = { pool, getUser, listUsers };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: hardcoded_secret
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: javascript
|
|
5
|
+
// expected: hardcoded JWT secret used to sign tokens
|
|
6
|
+
|
|
7
|
+
const jwt = require('jsonwebtoken');
|
|
8
|
+
|
|
9
|
+
const JWT_SECRET = 'my-super-secret-jwt-key-do-not-share-1234';
|
|
10
|
+
const JWT_REFRESH_SECRET = 'refresh-secret-key-also-private-5678';
|
|
11
|
+
|
|
12
|
+
function generateTokens(userId, role) {
|
|
13
|
+
const accessToken = jwt.sign(
|
|
14
|
+
{ userId, role },
|
|
15
|
+
JWT_SECRET,
|
|
16
|
+
{ expiresIn: '15m' }
|
|
17
|
+
);
|
|
18
|
+
const refreshToken = jwt.sign(
|
|
19
|
+
{ userId },
|
|
20
|
+
JWT_REFRESH_SECRET,
|
|
21
|
+
{ expiresIn: '7d' }
|
|
22
|
+
);
|
|
23
|
+
return { accessToken, refreshToken };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function verifyToken(token) {
|
|
27
|
+
return jwt.verify(token, JWT_SECRET);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
module.exports = { generateTokens, verifyToken };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// [CRUCIBLE-SEED]
|
|
2
|
+
// category: hardcoded_secret
|
|
3
|
+
// severity: critical
|
|
4
|
+
// language: javascript
|
|
5
|
+
// expected: hardcoded Stripe API secret key
|
|
6
|
+
|
|
7
|
+
const stripe = require('stripe');
|
|
8
|
+
|
|
9
|
+
// TODO: move this to env vars before going to prod
|
|
10
|
+
const STRIPE_SECRET_KEY = 'sk_live_51HqT3kLkjhGHJKL9mNoPqRstuvWxYz1234567890abcdef';
|
|
11
|
+
const STRIPE_WEBHOOK_SECRET = 'whsec_abcdefghijklmnopqrstuvwxyz1234567890ABCDEF';
|
|
12
|
+
|
|
13
|
+
const stripeClient = stripe(STRIPE_SECRET_KEY);
|
|
14
|
+
|
|
15
|
+
async function createPaymentIntent(amount, currency = 'usd') {
|
|
16
|
+
const intent = await stripeClient.paymentIntents.create({
|
|
17
|
+
amount,
|
|
18
|
+
currency,
|
|
19
|
+
automatic_payment_methods: { enabled: true },
|
|
20
|
+
});
|
|
21
|
+
return intent.client_secret;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function handleWebhook(payload, sig) {
|
|
25
|
+
return stripeClient.webhooks.constructEvent(payload, sig, STRIPE_WEBHOOK_SECRET);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
module.exports = { createPaymentIntent, handleWebhook };
|