@atlashub/smartstack-cli 3.39.0 → 3.41.0
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/.documentation/apex.html +644 -644
- package/.documentation/css/styles.css +2320 -2320
- package/.documentation/init.html +1377 -1377
- package/.documentation/js/app.js +780 -780
- package/.documentation/prd-json-v2.0.0.md +396 -396
- package/.documentation/testing-ba-e2e.md +462 -462
- package/config/default-config.json +95 -95
- package/config/mcp-defaults.json +62 -62
- package/config/settings.json +53 -53
- package/config/settings.local.example.json +16 -16
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +6 -4
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +115 -115
- package/scripts/extract-api-endpoints.ts +325 -325
- package/scripts/extract-business-rules.ts +440 -440
- package/scripts/generate-doc-with-mock-ui.ts +804 -804
- package/scripts/health-check.sh +168 -168
- package/scripts/postinstall.js +18 -18
- package/templates/agents/action.md +37 -37
- package/templates/agents/ba-reader.md +378 -378
- package/templates/agents/ba-writer.md +861 -861
- package/templates/agents/code-reviewer.md +163 -163
- package/templates/agents/db-reader.md +149 -149
- package/templates/agents/docs-context-reader.md +143 -143
- package/templates/agents/docs-sync-checker.md +122 -122
- package/templates/agents/efcore/conflicts.md +95 -84
- package/templates/agents/efcore/db-deploy.md +85 -74
- package/templates/agents/efcore/db-reset.md +96 -85
- package/templates/agents/efcore/db-seed.md +72 -61
- package/templates/agents/efcore/db-status.md +97 -86
- package/templates/agents/efcore/migration.md +197 -186
- package/templates/agents/efcore/rebase-snapshot.md +119 -108
- package/templates/agents/efcore/scan.md +103 -92
- package/templates/agents/efcore/squash.md +172 -161
- package/templates/agents/explore-codebase.md +66 -66
- package/templates/agents/explore-docs.md +98 -98
- package/templates/agents/fix-grammar.md +50 -50
- package/templates/agents/gitflow/abort.md +45 -45
- package/templates/agents/gitflow/cleanup.md +96 -96
- package/templates/agents/gitflow/commit.md +236 -236
- package/templates/agents/gitflow/exec.md +48 -48
- package/templates/agents/gitflow/finish.md +146 -146
- package/templates/agents/gitflow/init-clone.md +199 -199
- package/templates/agents/gitflow/init-detect.md +137 -137
- package/templates/agents/gitflow/init-validate.md +225 -225
- package/templates/agents/gitflow/init.md +340 -340
- package/templates/agents/gitflow/merge.md +145 -145
- package/templates/agents/gitflow/plan.md +42 -42
- package/templates/agents/gitflow/pr.md +191 -191
- package/templates/agents/gitflow/review.md +49 -49
- package/templates/agents/gitflow/start.md +147 -147
- package/templates/agents/gitflow/status.md +95 -95
- package/templates/agents/mcp-healthcheck.md +163 -163
- package/templates/agents/snipper.md +37 -37
- package/templates/agents/websearch.md +46 -46
- package/templates/hooks/appsettings-guard.sh +76 -76
- package/templates/hooks/docs-drift-check.md +96 -96
- package/templates/hooks/ef-migration-check.md +139 -139
- package/templates/hooks/hooks.json +58 -58
- package/templates/hooks/mcp-check.md +64 -64
- package/templates/hooks/ralph-mcp-logger.sh +46 -46
- package/templates/hooks/ralph-session-end.sh +69 -69
- package/templates/hooks/stop-hook.sh +177 -177
- package/templates/hooks/wsl-dotnet-cleanup.sh +24 -24
- package/templates/mcp-scaffolding/component.tsx.hbs +318 -318
- package/templates/mcp-scaffolding/controller.cs.hbs +192 -192
- package/templates/mcp-scaffolding/entity-extension.cs.hbs +239 -239
- package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +116 -116
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -133
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -126
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +261 -261
- package/templates/mcp-scaffolding/service-extension.cs.hbs +53 -53
- package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +436 -436
- package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +239 -239
- package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +441 -441
- package/templates/mcp-scaffolding/tests/security.test.cs.hbs +442 -442
- package/templates/mcp-scaffolding/tests/service.test.cs.hbs +402 -402
- package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +428 -428
- package/templates/project/DependencyInjection.Application.cs.template +25 -25
- package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -61
- package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -70
- package/templates/project/ExampleEntity.cs.template +116 -116
- package/templates/project/ExampleEntityConfiguration.cs.template +64 -64
- package/templates/project/ExampleService.cs.template +146 -146
- package/templates/project/ExtensionsDbContext.cs.template +41 -41
- package/templates/project/IExtensionsDbContext.cs.template +22 -22
- package/templates/project/Program.cs.template +47 -47
- package/templates/project/README.md +79 -79
- package/templates/project/api.ts.template +12 -12
- package/templates/project/appsettings.json.template +170 -170
- package/templates/project/claude-settings.json.template +5 -5
- package/templates/project/test-frontend/msw/handlers.ts +58 -58
- package/templates/project/test-frontend/msw/server.ts +25 -25
- package/templates/project/test-frontend/setup.ts +16 -16
- package/templates/project/test-frontend/test-utils.tsx +59 -59
- package/templates/project/test-frontend/vitest.config.ts +31 -31
- package/templates/ralph/README.md +93 -93
- package/templates/ralph/ralph.config.yaml +113 -113
- package/templates/scripts/setup-ralph-loop.sh +173 -173
- package/templates/skills/_resources/config-safety.md +61 -61
- package/templates/skills/_resources/context-digest-template.md +53 -53
- package/templates/skills/_resources/doc-context-cache.md +60 -60
- package/templates/skills/_resources/docs-manifest-schema.md +155 -155
- package/templates/skills/_resources/formatting-guide.md +124 -124
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +181 -181
- package/templates/skills/_shared.md +228 -228
- package/templates/skills/admin/SKILL.md +48 -48
- package/templates/skills/ai-prompt/SKILL.md +107 -107
- package/templates/skills/ai-prompt/steps/step-00-init.md +47 -47
- package/templates/skills/ai-prompt/steps/step-01-implementation.md +122 -122
- package/templates/skills/apex/SKILL.md +168 -168
- package/templates/skills/apex/_shared.md +141 -141
- package/templates/skills/apex/references/agent-teams-protocol.md +164 -164
- package/templates/skills/apex/references/analysis-methods.md +141 -141
- package/templates/skills/apex/references/challenge-questions.md +145 -145
- package/templates/skills/apex/references/code-generation.md +412 -412
- package/templates/skills/apex/references/core-seed-data.md +1437 -1437
- package/templates/skills/apex/references/error-classification.md +144 -144
- package/templates/skills/apex/references/examine-build-validation.md +82 -82
- package/templates/skills/apex/references/execution-frontend-gates.md +177 -177
- package/templates/skills/apex/references/execution-frontend-patterns.md +105 -105
- package/templates/skills/apex/references/execution-layer1-rules.md +96 -96
- package/templates/skills/apex/references/initialization-challenge-flow.md +110 -110
- package/templates/skills/apex/references/planning-layer-mapping.md +151 -151
- package/templates/skills/apex/references/post-checks.md +1584 -1584
- package/templates/skills/apex/references/smartstack-api.md +1053 -1053
- package/templates/skills/apex/references/smartstack-frontend.md +1571 -1571
- package/templates/skills/apex/references/smartstack-layers.md +402 -402
- package/templates/skills/apex/steps/step-00-init.md +307 -307
- package/templates/skills/apex/steps/step-01-analyze.md +165 -165
- package/templates/skills/apex/steps/step-02-plan.md +144 -144
- package/templates/skills/apex/steps/step-03-execute.md +328 -328
- package/templates/skills/apex/steps/step-04-examine.md +263 -263
- package/templates/skills/apex/steps/step-05-deep-review.md +129 -129
- package/templates/skills/apex/steps/step-06-resolve.md +101 -101
- package/templates/skills/apex/steps/step-07-tests.md +238 -238
- package/templates/skills/apex/steps/step-08-run-tests.md +125 -125
- package/templates/skills/application/SKILL.md +4 -4
- package/templates/skills/application/references/application-roles-template.md +227 -227
- package/templates/skills/application/references/backend-controller-hierarchy.md +58 -58
- package/templates/skills/application/references/backend-entity-seeding.md +72 -72
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -83
- package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -79
- package/templates/skills/application/references/backend-verification.md +88 -88
- package/templates/skills/application/references/frontend-i18n-and-output.md +67 -67
- package/templates/skills/application/references/frontend-route-naming.md +117 -117
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -107
- package/templates/skills/application/references/frontend-verification.md +156 -156
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +1 -1
- package/templates/skills/application/references/provider-template.md +177 -177
- package/templates/skills/application/references/roles-client-project-handling.md +55 -55
- package/templates/skills/application/references/roles-fallback-procedure.md +149 -149
- package/templates/skills/application/references/test-coverage-requirements.md +213 -213
- package/templates/skills/application/references/test-frontend.md +73 -73
- package/templates/skills/application/references/test-prerequisites.md +72 -72
- package/templates/skills/application/steps/step-05-frontend.md +176 -176
- package/templates/skills/application/steps/step-06-migration.md +193 -193
- package/templates/skills/application/steps/step-07-tests.md +356 -356
- package/templates/skills/application/steps/step-08-documentation.md +137 -137
- package/templates/skills/application/templates-backend.md +463 -463
- package/templates/skills/application/templates-frontend.md +685 -685
- package/templates/skills/application/templates-i18n.md +520 -520
- package/templates/skills/application/templates-seed.md +1096 -1096
- package/templates/skills/business-analyse/SKILL.md +327 -327
- package/templates/skills/business-analyse/_architecture.md +123 -123
- package/templates/skills/business-analyse/_elicitation.md +206 -206
- package/templates/skills/business-analyse/_module-loop.md +115 -115
- package/templates/skills/business-analyse/_shared.md +383 -383
- package/templates/skills/business-analyse/_suggestions.md +34 -34
- package/templates/skills/business-analyse/html/ba-interactive.html +4477 -4477
- package/templates/skills/business-analyse/html/build-html.js +77 -77
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +150 -150
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +227 -227
- package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +199 -199
- package/templates/skills/business-analyse/html/src/scripts/04-render-modules.js +205 -205
- package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +647 -647
- package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +195 -195
- package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +92 -92
- package/templates/skills/business-analyse/html/src/scripts/08-editing.js +135 -135
- package/templates/skills/business-analyse/html/src/scripts/09-export.js +168 -168
- package/templates/skills/business-analyse/html/src/scripts/10-comments.js +171 -171
- package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +166 -166
- package/templates/skills/business-analyse/html/src/styles/01-variables.css +38 -38
- package/templates/skills/business-analyse/html/src/styles/02-layout.css +101 -101
- package/templates/skills/business-analyse/html/src/styles/03-navigation.css +120 -120
- package/templates/skills/business-analyse/html/src/styles/04-cards.css +196 -196
- package/templates/skills/business-analyse/html/src/styles/05-modules.css +454 -454
- package/templates/skills/business-analyse/html/src/styles/06-wireframes.css +272 -272
- package/templates/skills/business-analyse/html/src/styles/07-comments.css +184 -184
- package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +241 -241
- package/templates/skills/business-analyse/html/src/template.html +516 -516
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +546 -546
- package/templates/skills/business-analyse/questionnaire/00-application.md +160 -160
- package/templates/skills/business-analyse/questionnaire/00b-project.md +85 -85
- package/templates/skills/business-analyse/questionnaire/01-context.md +185 -185
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +189 -189
- package/templates/skills/business-analyse/questionnaire/03-scope.md +164 -164
- package/templates/skills/business-analyse/questionnaire/04-data.md +88 -88
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +58 -58
- package/templates/skills/business-analyse/questionnaire/06-security.md +68 -68
- package/templates/skills/business-analyse/questionnaire/07-ui.md +76 -76
- package/templates/skills/business-analyse/questionnaire/08-performance.md +42 -42
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +45 -45
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +43 -43
- package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +59 -59
- package/templates/skills/business-analyse/questionnaire/12-migration.md +58 -58
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +69 -69
- package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +135 -135
- package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +136 -136
- package/templates/skills/business-analyse/questionnaire.md +337 -337
- package/templates/skills/business-analyse/react/application-viewer.md +242 -242
- package/templates/skills/business-analyse/react/components.md +551 -551
- package/templates/skills/business-analyse/react/i18n-template.md +306 -306
- package/templates/skills/business-analyse/references/acceptance-criteria.md +169 -169
- package/templates/skills/business-analyse/references/agent-module-prompt.md +362 -362
- package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +557 -557
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -190
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +566 -566
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -41
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -74
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +115 -115
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +68 -69
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +85 -85
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -297
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +107 -107
- package/templates/skills/business-analyse/references/deploy-data-build.md +180 -180
- package/templates/skills/business-analyse/references/deploy-modes.md +118 -118
- package/templates/skills/business-analyse/references/detection-strategies.md +424 -424
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -218
- package/templates/skills/business-analyse/references/handoff-file-templates.md +120 -120
- package/templates/skills/business-analyse/references/handoff-mappings.md +81 -81
- package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -312
- package/templates/skills/business-analyse/references/html-data-mapping.md +299 -299
- package/templates/skills/business-analyse/references/init-schema-deployment.md +65 -65
- package/templates/skills/business-analyse/references/naming-conventions.md +243 -243
- package/templates/skills/business-analyse/references/prd-generation.md +258 -258
- package/templates/skills/business-analyse/references/review-data-mapping.md +363 -363
- package/templates/skills/business-analyse/references/robustness-checks.md +542 -542
- package/templates/skills/business-analyse/references/spec-auto-inference.md +111 -111
- package/templates/skills/business-analyse/references/team-orchestration.md +1022 -1022
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +85 -85
- package/templates/skills/business-analyse/references/ui-resource-cards.md +259 -259
- package/templates/skills/business-analyse/references/validate-incremental-html.md +121 -121
- package/templates/skills/business-analyse/references/validation-checklist.md +347 -347
- package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +335 -335
- package/templates/skills/business-analyse/schemas/application-schema.json +453 -453
- package/templates/skills/business-analyse/schemas/feature-schema.json +53 -53
- package/templates/skills/business-analyse/schemas/project-schema.json +485 -485
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +201 -201
- package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +82 -82
- package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +80 -80
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +70 -70
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +547 -547
- package/templates/skills/business-analyse/schemas/sections/validation-schema.json +93 -93
- package/templates/skills/business-analyse/schemas/shared/common-defs.json +226 -226
- package/templates/skills/business-analyse/steps/step-00-init.md +575 -576
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +767 -767
- package/templates/skills/business-analyse/steps/step-01b-applications.md +419 -419
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +387 -387
- package/templates/skills/business-analyse/steps/step-03a-data.md +16 -16
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +506 -506
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +252 -252
- package/templates/skills/business-analyse/steps/step-03b-ui.md +425 -425
- package/templates/skills/business-analyse/steps/step-03c-compile.md +611 -611
- package/templates/skills/business-analyse/steps/step-03d-validate.md +783 -783
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +17 -17
- package/templates/skills/business-analyse/steps/step-04a-collect.md +415 -415
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +163 -163
- package/templates/skills/business-analyse/steps/step-04c-decide.md +186 -186
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +840 -840
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +522 -522
- package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +703 -703
- package/templates/skills/business-analyse/steps/step-06-review.md +278 -278
- package/templates/skills/business-analyse/templates/tpl-frd.md +168 -168
- package/templates/skills/business-analyse/templates/tpl-handoff.md +186 -186
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +59 -59
- package/templates/skills/business-analyse/templates/tpl-progress.md +172 -172
- package/templates/skills/business-analyse/templates-frd.md +476 -476
- package/templates/skills/business-analyse/templates-react.md +574 -574
- package/templates/skills/cc-agent/SKILL.md +129 -129
- package/templates/skills/cc-agent/references/agent-behavior-patterns.md +95 -95
- package/templates/skills/cc-agent/references/agent-frontmatter.md +213 -213
- package/templates/skills/cc-agent/references/permission-modes.md +102 -102
- package/templates/skills/cc-agent/references/tools-reference.md +144 -144
- package/templates/skills/cc-agent/steps/step-00-init.md +134 -134
- package/templates/skills/cc-agent/steps/step-01-design.md +186 -186
- package/templates/skills/cc-agent/steps/step-02-generate.md +131 -131
- package/templates/skills/cc-agent/steps/step-03-validate.md +130 -130
- package/templates/skills/cc-agent/templates/agent-categorized.md +67 -67
- package/templates/skills/cc-agent/templates/agent-standalone.md +56 -56
- package/templates/skills/cc-agent/templates/agent-with-skills.md +94 -94
- package/templates/skills/cc-audit/SKILL.md +108 -108
- package/templates/skills/cc-audit/references/agent-checklist.md +91 -91
- package/templates/skills/cc-audit/references/hook-checklist.md +110 -110
- package/templates/skills/cc-audit/references/skill-checklist.md +70 -70
- package/templates/skills/cc-audit/steps/step-00-init.md +98 -98
- package/templates/skills/cc-audit/steps/step-01-scan.md +142 -142
- package/templates/skills/cc-audit/steps/step-02-analyze.md +158 -158
- package/templates/skills/cc-audit/steps/step-03-report.md +142 -142
- package/templates/skills/cc-skill/SKILL.md +134 -134
- package/templates/skills/cc-skill/references/best-practices.md +167 -167
- package/templates/skills/cc-skill/references/frontmatter-reference.md +182 -182
- package/templates/skills/cc-skill/references/skill-patterns.md +199 -199
- package/templates/skills/cc-skill/steps/step-00-init.md +119 -119
- package/templates/skills/cc-skill/steps/step-01-design.md +199 -199
- package/templates/skills/cc-skill/steps/step-02-generate.md +145 -145
- package/templates/skills/cc-skill/steps/step-03-steps.md +151 -151
- package/templates/skills/cc-skill/steps/step-04-validate.md +124 -124
- package/templates/skills/cc-skill/templates/skill-forked.md +85 -85
- package/templates/skills/cc-skill/templates/skill-progressive.md +102 -102
- package/templates/skills/cc-skill/templates/skill-simple.md +75 -75
- package/templates/skills/cc-skill/templates/step-template.md +82 -82
- package/templates/skills/check-version/SKILL.md +196 -196
- package/templates/skills/controller/SKILL.md +162 -162
- package/templates/skills/controller/postman-templates.md +614 -614
- package/templates/skills/controller/references/controller-code-templates.md +159 -159
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -209
- package/templates/skills/controller/references/permission-sync-templates.md +149 -149
- package/templates/skills/controller/steps/step-00-init.md +193 -191
- package/templates/skills/controller/steps/step-01-analyze.md +146 -146
- package/templates/skills/controller/steps/step-02-plan.md +176 -176
- package/templates/skills/controller/steps/step-03-generate.md +189 -189
- package/templates/skills/controller/steps/step-04-perms.md +80 -80
- package/templates/skills/controller/steps/step-05-validate.md +107 -107
- package/templates/skills/controller/templates.md +1555 -1555
- package/templates/skills/debug/SKILL.md +70 -70
- package/templates/skills/debug/references/team-protocol.md +232 -232
- package/templates/skills/debug/steps/step-00-init.md +57 -57
- package/templates/skills/debug/steps/step-01-analyze.md +219 -219
- package/templates/skills/debug/steps/step-02-resolve.md +85 -85
- package/templates/skills/documentation/SKILL.md +132 -132
- package/templates/skills/documentation/data-schema.md +227 -227
- package/templates/skills/documentation/steps/step-00-init.md +70 -70
- package/templates/skills/documentation/steps/step-01-scan.md +113 -113
- package/templates/skills/documentation/steps/step-02-generate.md +231 -231
- package/templates/skills/documentation/steps/step-03-validate.md +251 -238
- package/templates/skills/documentation/templates.md +662 -663
- package/templates/skills/efcore/SKILL.md +168 -167
- package/templates/skills/efcore/references/both-contexts.md +32 -32
- package/templates/skills/efcore/references/database-operations.md +67 -67
- package/templates/skills/efcore/references/destructive-operations.md +38 -38
- package/templates/skills/efcore/references/reset-operations.md +81 -81
- package/templates/skills/efcore/references/seed-methods.md +86 -86
- package/templates/skills/efcore/references/shared-init-functions.md +250 -250
- package/templates/skills/efcore/references/sql-objects-injection.md +61 -61
- package/templates/skills/efcore/references/troubleshooting.md +81 -81
- package/templates/skills/efcore/references/zero-downtime-patterns.md +227 -227
- package/templates/skills/efcore/steps/db/step-deploy.md +217 -217
- package/templates/skills/efcore/steps/db/step-reset.md +186 -186
- package/templates/skills/efcore/steps/db/step-seed.md +166 -166
- package/templates/skills/efcore/steps/db/step-status.md +173 -173
- package/templates/skills/efcore/steps/migration/step-00-init.md +102 -102
- package/templates/skills/efcore/steps/migration/step-01-check.md +164 -164
- package/templates/skills/efcore/steps/migration/step-02-create.md +160 -160
- package/templates/skills/efcore/steps/migration/step-03-validate.md +168 -168
- package/templates/skills/efcore/steps/rebase-snapshot/step-00-init.md +173 -173
- package/templates/skills/efcore/steps/rebase-snapshot/step-01-backup.md +100 -100
- package/templates/skills/efcore/steps/rebase-snapshot/step-02-fetch.md +115 -115
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +112 -112
- package/templates/skills/efcore/steps/rebase-snapshot/step-04-validate.md +157 -157
- package/templates/skills/efcore/steps/shared/step-00-init.md +131 -131
- package/templates/skills/efcore/steps/squash/step-00-init.md +141 -141
- package/templates/skills/efcore/steps/squash/step-01-backup.md +120 -120
- package/templates/skills/efcore/steps/squash/step-02-fetch.md +168 -168
- package/templates/skills/efcore/steps/squash/step-03-create.md +184 -184
- package/templates/skills/efcore/steps/squash/step-04-validate.md +174 -174
- package/templates/skills/explore/SKILL.md +98 -98
- package/templates/skills/feature-full/SKILL.md +111 -111
- package/templates/skills/feature-full/steps/step-00-init.md +57 -57
- package/templates/skills/feature-full/steps/step-01-implementation.md +120 -120
- package/templates/skills/gitflow/SKILL.md +377 -377
- package/templates/skills/gitflow/_shared.md +620 -620
- package/templates/skills/gitflow/phases/abort.md +189 -189
- package/templates/skills/gitflow/phases/cleanup.md +234 -234
- package/templates/skills/gitflow/phases/status.md +192 -192
- package/templates/skills/gitflow/references/commit-message-generation.md +58 -58
- package/templates/skills/gitflow/references/commit-migration-validation.md +49 -49
- package/templates/skills/gitflow/references/finish-cleanup.md +55 -55
- package/templates/skills/gitflow/references/finish-version-bumping.md +45 -45
- package/templates/skills/gitflow/references/init-config-template.md +135 -135
- package/templates/skills/gitflow/references/init-environment-detection.md +41 -41
- package/templates/skills/gitflow/references/init-name-normalization.md +103 -103
- package/templates/skills/gitflow/references/init-questions.md +185 -185
- package/templates/skills/gitflow/references/init-structure-creation.md +75 -75
- package/templates/skills/gitflow/references/init-version-detection.md +21 -21
- package/templates/skills/gitflow/references/init-workspace-detection.md +43 -43
- package/templates/skills/gitflow/references/merge-ci-status.md +36 -36
- package/templates/skills/gitflow/references/merge-execution.md +62 -62
- package/templates/skills/gitflow/references/merge-pr-context.md +76 -76
- package/templates/skills/gitflow/references/plan-template.md +69 -69
- package/templates/skills/gitflow/references/pr-build-checks.md +60 -60
- package/templates/skills/gitflow/references/pr-generation.md +58 -58
- package/templates/skills/gitflow/references/start-branch-normalization.md +28 -28
- package/templates/skills/gitflow/references/start-efcore-preflight.md +70 -70
- package/templates/skills/gitflow/references/start-local-config.md +113 -113
- package/templates/skills/gitflow/references/start-worktree-creation.md +50 -50
- package/templates/skills/gitflow/references/sync-push-verify.md +44 -44
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -38
- package/templates/skills/gitflow/steps/step-commit.md +199 -199
- package/templates/skills/gitflow/steps/step-finish.md +147 -147
- package/templates/skills/gitflow/steps/step-init.md +190 -190
- package/templates/skills/gitflow/steps/step-merge.md +85 -85
- package/templates/skills/gitflow/steps/step-plan.md +151 -151
- package/templates/skills/gitflow/steps/step-pr.md +199 -199
- package/templates/skills/gitflow/steps/step-start.md +195 -195
- package/templates/skills/gitflow/steps/step-sync.md +161 -161
- package/templates/skills/gitflow/templates/config.json +72 -72
- package/templates/skills/mcp/SKILL.md +62 -62
- package/templates/skills/mcp/steps/step-01-healthcheck.md +108 -108
- package/templates/skills/mcp/steps/step-02-tools.md +73 -73
- package/templates/skills/notification/SKILL.md +173 -173
- package/templates/skills/quick-search/SKILL.md +99 -99
- package/templates/skills/ralph-loop/SKILL.md +234 -234
- package/templates/skills/ralph-loop/references/category-completeness.md +185 -185
- package/templates/skills/ralph-loop/references/category-rules.md +96 -96
- package/templates/skills/ralph-loop/references/compact-loop.md +300 -300
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -127
- package/templates/skills/ralph-loop/references/module-transition.md +151 -151
- package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -171
- package/templates/skills/ralph-loop/references/parallel-execution.md +246 -246
- package/templates/skills/ralph-loop/references/section-splitting.md +439 -439
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +256 -256
- package/templates/skills/ralph-loop/references/team-orchestration.md +547 -547
- package/templates/skills/ralph-loop/steps/step-00-init.md +150 -150
- package/templates/skills/ralph-loop/steps/step-01-task.md +174 -174
- package/templates/skills/ralph-loop/steps/step-02-execute.md +177 -177
- package/templates/skills/ralph-loop/steps/step-03-commit.md +92 -92
- package/templates/skills/ralph-loop/steps/step-04-check.md +207 -207
- package/templates/skills/ralph-loop/steps/step-05-report.md +175 -175
- package/templates/skills/refactor/SKILL.md +56 -56
- package/templates/skills/refactor/steps/step-01-discover.md +60 -60
- package/templates/skills/refactor/steps/step-02-execute.md +67 -67
- package/templates/skills/review-code/SKILL.md +95 -94
- package/templates/skills/review-code/references/clean-code-principles.md +292 -292
- package/templates/skills/review-code/references/code-quality-metrics.md +174 -174
- package/templates/skills/review-code/references/feedback-patterns.md +149 -149
- package/templates/skills/review-code/references/owasp-api-top10.md +243 -243
- package/templates/skills/review-code/references/security-checklist.md +212 -212
- package/templates/skills/review-code/steps/step-01-smartstack.md +96 -96
- package/templates/skills/review-code/steps/step-02-detailed-review.md +80 -80
- package/templates/skills/review-code/steps/step-03-react.md +44 -44
- package/templates/skills/ui-components/SKILL.md +137 -137
- package/templates/skills/ui-components/accessibility.md +170 -170
- package/templates/skills/ui-components/patterns/dashboard-chart.md +327 -327
- package/templates/skills/ui-components/patterns/data-table.md +39 -39
- package/templates/skills/ui-components/patterns/entity-card.md +77 -77
- package/templates/skills/ui-components/patterns/grid-layout.md +91 -91
- package/templates/skills/ui-components/patterns/kanban.md +43 -43
- package/templates/skills/ui-components/responsive-guidelines.md +278 -278
- package/templates/skills/ui-components/style-guide.md +113 -113
- package/templates/skills/utils/SKILL.md +44 -44
- package/templates/skills/utils/subcommands/test-web-config.md +152 -152
- package/templates/skills/utils/subcommands/test-web.md +123 -123
- package/templates/skills/validate/SKILL.md +181 -181
- package/templates/skills/validate-feature/SKILL.md +101 -101
- package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -140
- package/templates/skills/validate-feature/references/db-validation-checks.md +180 -180
- package/templates/skills/validate-feature/steps/step-00-dependencies.md +121 -121
- package/templates/skills/validate-feature/steps/step-01-compile.md +39 -39
- package/templates/skills/validate-feature/steps/step-02-unit-tests.md +45 -45
- package/templates/skills/validate-feature/steps/step-03-integration-tests.md +53 -53
- package/templates/skills/validate-feature/steps/step-04-api-smoke.md +94 -94
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +149 -149
- package/templates/skills/workflow/SKILL.md +127 -127
- package/templates/skills/workflow/steps/step-00-init.md +57 -57
- package/templates/skills/workflow/steps/step-01-implementation.md +84 -84
- package/templates/test-web/api-health.json +38 -38
- package/templates/test-web/minimal.json +19 -19
- package/templates/test-web/npm-package.json +46 -46
- package/templates/test-web/seo-check.json +54 -54
|
@@ -1,243 +1,243 @@
|
|
|
1
|
-
<overview>
|
|
2
|
-
OWASP API Security Top 10 checklist adapted for SmartStack (.NET/ASP.NET Core). This is DIFFERENT from the OWASP Top 10 (web application vulnerabilities) -- this list targets API-specific threats.
|
|
3
|
-
|
|
4
|
-
Use this reference when reviewing API controllers, especially those exposed to external clients or public-facing APIs.
|
|
5
|
-
</overview>
|
|
6
|
-
|
|
7
|
-
<api1_bola>
|
|
8
|
-
## API1 - Broken Object Level Authorization (BOLA/IDOR)
|
|
9
|
-
|
|
10
|
-
**Risk:** Users access other users' resources by manipulating object IDs in requests.
|
|
11
|
-
|
|
12
|
-
**SmartStack check:**
|
|
13
|
-
- [ ] All queries filter by `TenantId` (EF Core global filters active)
|
|
14
|
-
- [ ] `[RequirePermission]` on every endpoint
|
|
15
|
-
- [ ] No raw `Guid` from URL used directly without ownership verification
|
|
16
|
-
|
|
17
|
-
```csharp
|
|
18
|
-
// BAD: IDOR vulnerability - any authenticated user can access any order
|
|
19
|
-
[HttpGet("{id}")]
|
|
20
|
-
public async Task<ActionResult<OrderDto>> Get(Guid id)
|
|
21
|
-
{
|
|
22
|
-
var order = await _context.Orders.FindAsync(id);
|
|
23
|
-
return Ok(order);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// GOOD: Tenant filter via EF Core global filter + explicit check
|
|
27
|
-
[HttpGet("{id}")]
|
|
28
|
-
[RequirePermission(Permissions.Orders.Read)]
|
|
29
|
-
public async Task<ActionResult<OrderDto>> Get(Guid id)
|
|
30
|
-
{
|
|
31
|
-
var order = await _context.Orders
|
|
32
|
-
.FirstOrDefaultAsync(o => o.Id == id); // Global filter ensures TenantId match
|
|
33
|
-
if (order is null) return NotFound();
|
|
34
|
-
return Ok(order.ToDto());
|
|
35
|
-
}
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
**Detection pattern:**
|
|
39
|
-
```bash
|
|
40
|
-
grep -rE "FindAsync\(id\)|Find\(id\)" --include="*.cs" | grep -v "TenantId"
|
|
41
|
-
```
|
|
42
|
-
</api1_bola>
|
|
43
|
-
|
|
44
|
-
<api2_broken_auth>
|
|
45
|
-
## API2 - Broken Authentication
|
|
46
|
-
|
|
47
|
-
**Risk:** Weak authentication mechanisms allow attackers to impersonate users.
|
|
48
|
-
|
|
49
|
-
**SmartStack check:**
|
|
50
|
-
- [ ] `[Authorize]` on all controllers (except explicit `[AllowAnonymous]`)
|
|
51
|
-
- [ ] JWT tokens validated with issuer, audience, and expiration
|
|
52
|
-
- [ ] Refresh token rotation implemented
|
|
53
|
-
- [ ] Failed login attempts tracked and rate-limited
|
|
54
|
-
|
|
55
|
-
**Detection pattern:**
|
|
56
|
-
```bash
|
|
57
|
-
grep -rL "\[Authorize\]" --include="*Controller.cs" | grep -v "AuthController"
|
|
58
|
-
```
|
|
59
|
-
</api2_broken_auth>
|
|
60
|
-
|
|
61
|
-
<api3_broken_property_auth>
|
|
62
|
-
## API3 - Broken Object Property Level Authorization
|
|
63
|
-
|
|
64
|
-
**Risk:** Users modify properties they shouldn't have access to (mass assignment).
|
|
65
|
-
|
|
66
|
-
**SmartStack check:**
|
|
67
|
-
- [ ] DTOs separate from entities (no direct entity binding)
|
|
68
|
-
- [ ] `CreateDto` and `UpdateDto` contain only writable fields
|
|
69
|
-
- [ ] Sensitive properties (TenantId, CreatedById, Role) NOT in DTOs
|
|
70
|
-
- [ ] No `[FromBody] Entity` binding (always use DTOs)
|
|
71
|
-
|
|
72
|
-
```csharp
|
|
73
|
-
// BAD: Mass assignment - user can set their own Role
|
|
74
|
-
[HttpPut("{id}")]
|
|
75
|
-
public async Task<ActionResult> Update(Guid id, [FromBody] User user) { ... }
|
|
76
|
-
|
|
77
|
-
// GOOD: DTO limits writable fields
|
|
78
|
-
[HttpPut("{id}")]
|
|
79
|
-
[RequirePermission(Permissions.Users.Update)]
|
|
80
|
-
public async Task<ActionResult> Update(Guid id, [FromBody] UpdateUserDto dto) { ... }
|
|
81
|
-
|
|
82
|
-
public record UpdateUserDto(string Name, string Email); // No Role, no TenantId
|
|
83
|
-
```
|
|
84
|
-
</api3_broken_property_auth>
|
|
85
|
-
|
|
86
|
-
<api4_unrestricted_consumption>
|
|
87
|
-
## API4 - Unrestricted Resource Consumption
|
|
88
|
-
|
|
89
|
-
**Risk:** No rate limiting allows API abuse, DDoS, or resource exhaustion.
|
|
90
|
-
|
|
91
|
-
**SmartStack check:**
|
|
92
|
-
- [ ] Rate limiting middleware configured (`Microsoft.AspNetCore.RateLimiting`)
|
|
93
|
-
- [ ] Pagination enforced on list endpoints (max page size)
|
|
94
|
-
- [ ] File upload size limits set
|
|
95
|
-
- [ ] Query complexity limits (no unbounded `Include()`)
|
|
96
|
-
|
|
97
|
-
```csharp
|
|
98
|
-
// BAD: No pagination limit - can request entire database
|
|
99
|
-
[HttpGet]
|
|
100
|
-
public async Task<ActionResult<List<OrderDto>>> GetAll([FromQuery] int pageSize = 1000000) { ... }
|
|
101
|
-
|
|
102
|
-
// GOOD: Enforced max page size
|
|
103
|
-
[HttpGet]
|
|
104
|
-
public async Task<ActionResult<PaginatedResult<OrderDto>>> GetAll(
|
|
105
|
-
[FromQuery] int page = 1,
|
|
106
|
-
[FromQuery] int pageSize = 20)
|
|
107
|
-
{
|
|
108
|
-
pageSize = Math.Min(pageSize, 100); // Hard cap
|
|
109
|
-
...
|
|
110
|
-
}
|
|
111
|
-
```
|
|
112
|
-
</api4_unrestricted_consumption>
|
|
113
|
-
|
|
114
|
-
<api5_broken_function_auth>
|
|
115
|
-
## API5 - Broken Function Level Authorization
|
|
116
|
-
|
|
117
|
-
**Risk:** Regular users access admin-level API functions.
|
|
118
|
-
|
|
119
|
-
**SmartStack check:**
|
|
120
|
-
- [ ] Admin endpoints use `administration.*` permissions
|
|
121
|
-
- [ ] Application-based routing enforced (Administration, Support, etc.)
|
|
122
|
-
- [ ] System account protection (UserType.System, UserType.LocalAdmin)
|
|
123
|
-
- [ ] No permission bypass via direct URL manipulation
|
|
124
|
-
|
|
125
|
-
```csharp
|
|
126
|
-
// BAD: Missing permission - any authenticated user can delete
|
|
127
|
-
[HttpDelete("{id}")]
|
|
128
|
-
[Authorize]
|
|
129
|
-
public async Task<ActionResult> Delete(Guid id) { ... }
|
|
130
|
-
|
|
131
|
-
// GOOD: Explicit permission check
|
|
132
|
-
[HttpDelete("{id}")]
|
|
133
|
-
[RequirePermission(Permissions.Administration.Users.Delete)]
|
|
134
|
-
public async Task<ActionResult> Delete(Guid id) { ... }
|
|
135
|
-
```
|
|
136
|
-
</api5_broken_function_auth>
|
|
137
|
-
|
|
138
|
-
<api6_business_flow>
|
|
139
|
-
## API6 - Unrestricted Access to Sensitive Business Flows
|
|
140
|
-
|
|
141
|
-
**Risk:** Automated abuse of business processes (mass account creation, coupon abuse).
|
|
142
|
-
|
|
143
|
-
**SmartStack check:**
|
|
144
|
-
- [ ] Rate limiting on sensitive endpoints (registration, password reset)
|
|
145
|
-
- [ ] CAPTCHA or bot detection on public-facing forms
|
|
146
|
-
- [ ] Business flow monitoring and alerting
|
|
147
|
-
- [ ] Idempotency keys for payment/creation operations
|
|
148
|
-
</api6_business_flow>
|
|
149
|
-
|
|
150
|
-
<api7_ssrf>
|
|
151
|
-
## API7 - Server-Side Request Forgery (SSRF)
|
|
152
|
-
|
|
153
|
-
**Risk:** Attacker makes the server send requests to internal resources.
|
|
154
|
-
|
|
155
|
-
**SmartStack check:**
|
|
156
|
-
- [ ] No user-supplied URLs passed to `HttpClient` without validation
|
|
157
|
-
- [ ] Webhook URLs validated against allowlist
|
|
158
|
-
- [ ] Internal network ranges blocked (127.0.0.1, 10.x, 192.168.x)
|
|
159
|
-
|
|
160
|
-
```csharp
|
|
161
|
-
// BAD: SSRF - user controls the URL
|
|
162
|
-
[HttpPost("fetch")]
|
|
163
|
-
public async Task<ActionResult> Fetch([FromBody] string url)
|
|
164
|
-
{
|
|
165
|
-
var response = await _httpClient.GetAsync(url);
|
|
166
|
-
return Ok(await response.Content.ReadAsStringAsync());
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// GOOD: Validate against allowlist
|
|
170
|
-
[HttpPost("webhook")]
|
|
171
|
-
public async Task<ActionResult> ConfigureWebhook([FromBody] WebhookDto dto)
|
|
172
|
-
{
|
|
173
|
-
if (!_webhookValidator.IsAllowedDomain(dto.Url))
|
|
174
|
-
return BadRequest("URL domain not allowed");
|
|
175
|
-
...
|
|
176
|
-
}
|
|
177
|
-
```
|
|
178
|
-
</api7_ssrf>
|
|
179
|
-
|
|
180
|
-
<api8_misconfiguration>
|
|
181
|
-
## API8 - Security Misconfiguration
|
|
182
|
-
|
|
183
|
-
**Risk:** Default configs, verbose errors, missing security headers expose attack surface.
|
|
184
|
-
|
|
185
|
-
**SmartStack check:**
|
|
186
|
-
- [ ] Security headers configured (see security-checklist.md A02)
|
|
187
|
-
- [ ] Error responses don't expose stack traces in production
|
|
188
|
-
- [ ] CORS restricted to known origins (no `AllowAnyOrigin` in production)
|
|
189
|
-
- [ ] Swagger/OpenAPI disabled in production
|
|
190
|
-
- [ ] Debug mode off in production (`ASPNETCORE_ENVIRONMENT=Production`)
|
|
191
|
-
|
|
192
|
-
**Detection pattern:**
|
|
193
|
-
```bash
|
|
194
|
-
grep -rE "AllowAnyOrigin|EnableDetailedErrors|DeveloperExceptionPage" --include="*.cs"
|
|
195
|
-
```
|
|
196
|
-
</api8_misconfiguration>
|
|
197
|
-
|
|
198
|
-
<api9_inventory>
|
|
199
|
-
## API9 - Improper Inventory Management
|
|
200
|
-
|
|
201
|
-
**Risk:** Old or undocumented API endpoints remain exposed without security.
|
|
202
|
-
|
|
203
|
-
**SmartStack check:**
|
|
204
|
-
- [ ] All controllers have `[NavRoute]` attribute (discoverable)
|
|
205
|
-
- [ ] Deprecated endpoints marked with `[Obsolete]`
|
|
206
|
-
- [ ] `[ProducesResponseType]` on every endpoint (API documentation)
|
|
207
|
-
- [ ] No orphan controllers without matching permissions
|
|
208
|
-
</api9_inventory>
|
|
209
|
-
|
|
210
|
-
<api10_unsafe_consumption>
|
|
211
|
-
## API10 - Unsafe Consumption of APIs
|
|
212
|
-
|
|
213
|
-
**Risk:** Application blindly trusts data from third-party APIs.
|
|
214
|
-
|
|
215
|
-
**SmartStack check:**
|
|
216
|
-
- [ ] External API responses validated/deserialized with typed DTOs
|
|
217
|
-
- [ ] Timeout and retry policies on `HttpClient` (Polly)
|
|
218
|
-
- [ ] Circuit breaker pattern for unreliable external services
|
|
219
|
-
- [ ] External data sanitized before storage
|
|
220
|
-
</api10_unsafe_consumption>
|
|
221
|
-
|
|
222
|
-
<severity_mapping>
|
|
223
|
-
## Mapping to SmartStack SEC-xxx Categories
|
|
224
|
-
|
|
225
|
-
| OWASP API | SmartStack Check | Severity |
|
|
226
|
-
|-----------|-----------------|----------|
|
|
227
|
-
| API1 BOLA | SEC-001: Missing tenant filter | blocking |
|
|
228
|
-
| API2 Auth | SEC-002: Missing [Authorize] | blocking |
|
|
229
|
-
| API3 Property Auth | SEC-003: Entity binding (mass assignment) | critical |
|
|
230
|
-
| API4 Resource | SEC-004: No pagination limit | warning |
|
|
231
|
-
| API5 Function Auth | SEC-005: Missing [RequirePermission] | blocking |
|
|
232
|
-
| API6 Business Flow | SEC-006: No rate limit on sensitive ops | warning |
|
|
233
|
-
| API7 SSRF | SEC-007: Unvalidated URL in HttpClient | blocking |
|
|
234
|
-
| API8 Misconfig | SEC-008: CORS/Debug/Headers | critical |
|
|
235
|
-
| API9 Inventory | SEC-009: Undocumented endpoint | info |
|
|
236
|
-
| API10 Unsafe API | SEC-010: Unvalidated external data | warning |
|
|
237
|
-
</severity_mapping>
|
|
238
|
-
|
|
239
|
-
<sources>
|
|
240
|
-
- [OWASP API Security Top 10 (2023)](https://owasp.org/API-Security/editions/2023/en/0x11-t10/)
|
|
241
|
-
- [OWASP API Security Project](https://owasp.org/www-project-api-security/)
|
|
242
|
-
- SmartStack RBAC and Multi-tenant documentation
|
|
243
|
-
</sources>
|
|
1
|
+
<overview>
|
|
2
|
+
OWASP API Security Top 10 checklist adapted for SmartStack (.NET/ASP.NET Core). This is DIFFERENT from the OWASP Top 10 (web application vulnerabilities) -- this list targets API-specific threats.
|
|
3
|
+
|
|
4
|
+
Use this reference when reviewing API controllers, especially those exposed to external clients or public-facing APIs.
|
|
5
|
+
</overview>
|
|
6
|
+
|
|
7
|
+
<api1_bola>
|
|
8
|
+
## API1 - Broken Object Level Authorization (BOLA/IDOR)
|
|
9
|
+
|
|
10
|
+
**Risk:** Users access other users' resources by manipulating object IDs in requests.
|
|
11
|
+
|
|
12
|
+
**SmartStack check:**
|
|
13
|
+
- [ ] All queries filter by `TenantId` (EF Core global filters active)
|
|
14
|
+
- [ ] `[RequirePermission]` on every endpoint
|
|
15
|
+
- [ ] No raw `Guid` from URL used directly without ownership verification
|
|
16
|
+
|
|
17
|
+
```csharp
|
|
18
|
+
// BAD: IDOR vulnerability - any authenticated user can access any order
|
|
19
|
+
[HttpGet("{id}")]
|
|
20
|
+
public async Task<ActionResult<OrderDto>> Get(Guid id)
|
|
21
|
+
{
|
|
22
|
+
var order = await _context.Orders.FindAsync(id);
|
|
23
|
+
return Ok(order);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// GOOD: Tenant filter via EF Core global filter + explicit check
|
|
27
|
+
[HttpGet("{id}")]
|
|
28
|
+
[RequirePermission(Permissions.Orders.Read)]
|
|
29
|
+
public async Task<ActionResult<OrderDto>> Get(Guid id)
|
|
30
|
+
{
|
|
31
|
+
var order = await _context.Orders
|
|
32
|
+
.FirstOrDefaultAsync(o => o.Id == id); // Global filter ensures TenantId match
|
|
33
|
+
if (order is null) return NotFound();
|
|
34
|
+
return Ok(order.ToDto());
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Detection pattern:**
|
|
39
|
+
```bash
|
|
40
|
+
grep -rE "FindAsync\(id\)|Find\(id\)" --include="*.cs" | grep -v "TenantId"
|
|
41
|
+
```
|
|
42
|
+
</api1_bola>
|
|
43
|
+
|
|
44
|
+
<api2_broken_auth>
|
|
45
|
+
## API2 - Broken Authentication
|
|
46
|
+
|
|
47
|
+
**Risk:** Weak authentication mechanisms allow attackers to impersonate users.
|
|
48
|
+
|
|
49
|
+
**SmartStack check:**
|
|
50
|
+
- [ ] `[Authorize]` on all controllers (except explicit `[AllowAnonymous]`)
|
|
51
|
+
- [ ] JWT tokens validated with issuer, audience, and expiration
|
|
52
|
+
- [ ] Refresh token rotation implemented
|
|
53
|
+
- [ ] Failed login attempts tracked and rate-limited
|
|
54
|
+
|
|
55
|
+
**Detection pattern:**
|
|
56
|
+
```bash
|
|
57
|
+
grep -rL "\[Authorize\]" --include="*Controller.cs" | grep -v "AuthController"
|
|
58
|
+
```
|
|
59
|
+
</api2_broken_auth>
|
|
60
|
+
|
|
61
|
+
<api3_broken_property_auth>
|
|
62
|
+
## API3 - Broken Object Property Level Authorization
|
|
63
|
+
|
|
64
|
+
**Risk:** Users modify properties they shouldn't have access to (mass assignment).
|
|
65
|
+
|
|
66
|
+
**SmartStack check:**
|
|
67
|
+
- [ ] DTOs separate from entities (no direct entity binding)
|
|
68
|
+
- [ ] `CreateDto` and `UpdateDto` contain only writable fields
|
|
69
|
+
- [ ] Sensitive properties (TenantId, CreatedById, Role) NOT in DTOs
|
|
70
|
+
- [ ] No `[FromBody] Entity` binding (always use DTOs)
|
|
71
|
+
|
|
72
|
+
```csharp
|
|
73
|
+
// BAD: Mass assignment - user can set their own Role
|
|
74
|
+
[HttpPut("{id}")]
|
|
75
|
+
public async Task<ActionResult> Update(Guid id, [FromBody] User user) { ... }
|
|
76
|
+
|
|
77
|
+
// GOOD: DTO limits writable fields
|
|
78
|
+
[HttpPut("{id}")]
|
|
79
|
+
[RequirePermission(Permissions.Users.Update)]
|
|
80
|
+
public async Task<ActionResult> Update(Guid id, [FromBody] UpdateUserDto dto) { ... }
|
|
81
|
+
|
|
82
|
+
public record UpdateUserDto(string Name, string Email); // No Role, no TenantId
|
|
83
|
+
```
|
|
84
|
+
</api3_broken_property_auth>
|
|
85
|
+
|
|
86
|
+
<api4_unrestricted_consumption>
|
|
87
|
+
## API4 - Unrestricted Resource Consumption
|
|
88
|
+
|
|
89
|
+
**Risk:** No rate limiting allows API abuse, DDoS, or resource exhaustion.
|
|
90
|
+
|
|
91
|
+
**SmartStack check:**
|
|
92
|
+
- [ ] Rate limiting middleware configured (`Microsoft.AspNetCore.RateLimiting`)
|
|
93
|
+
- [ ] Pagination enforced on list endpoints (max page size)
|
|
94
|
+
- [ ] File upload size limits set
|
|
95
|
+
- [ ] Query complexity limits (no unbounded `Include()`)
|
|
96
|
+
|
|
97
|
+
```csharp
|
|
98
|
+
// BAD: No pagination limit - can request entire database
|
|
99
|
+
[HttpGet]
|
|
100
|
+
public async Task<ActionResult<List<OrderDto>>> GetAll([FromQuery] int pageSize = 1000000) { ... }
|
|
101
|
+
|
|
102
|
+
// GOOD: Enforced max page size
|
|
103
|
+
[HttpGet]
|
|
104
|
+
public async Task<ActionResult<PaginatedResult<OrderDto>>> GetAll(
|
|
105
|
+
[FromQuery] int page = 1,
|
|
106
|
+
[FromQuery] int pageSize = 20)
|
|
107
|
+
{
|
|
108
|
+
pageSize = Math.Min(pageSize, 100); // Hard cap
|
|
109
|
+
...
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
</api4_unrestricted_consumption>
|
|
113
|
+
|
|
114
|
+
<api5_broken_function_auth>
|
|
115
|
+
## API5 - Broken Function Level Authorization
|
|
116
|
+
|
|
117
|
+
**Risk:** Regular users access admin-level API functions.
|
|
118
|
+
|
|
119
|
+
**SmartStack check:**
|
|
120
|
+
- [ ] Admin endpoints use `administration.*` permissions
|
|
121
|
+
- [ ] Application-based routing enforced (Administration, Support, etc.)
|
|
122
|
+
- [ ] System account protection (UserType.System, UserType.LocalAdmin)
|
|
123
|
+
- [ ] No permission bypass via direct URL manipulation
|
|
124
|
+
|
|
125
|
+
```csharp
|
|
126
|
+
// BAD: Missing permission - any authenticated user can delete
|
|
127
|
+
[HttpDelete("{id}")]
|
|
128
|
+
[Authorize]
|
|
129
|
+
public async Task<ActionResult> Delete(Guid id) { ... }
|
|
130
|
+
|
|
131
|
+
// GOOD: Explicit permission check
|
|
132
|
+
[HttpDelete("{id}")]
|
|
133
|
+
[RequirePermission(Permissions.Administration.Users.Delete)]
|
|
134
|
+
public async Task<ActionResult> Delete(Guid id) { ... }
|
|
135
|
+
```
|
|
136
|
+
</api5_broken_function_auth>
|
|
137
|
+
|
|
138
|
+
<api6_business_flow>
|
|
139
|
+
## API6 - Unrestricted Access to Sensitive Business Flows
|
|
140
|
+
|
|
141
|
+
**Risk:** Automated abuse of business processes (mass account creation, coupon abuse).
|
|
142
|
+
|
|
143
|
+
**SmartStack check:**
|
|
144
|
+
- [ ] Rate limiting on sensitive endpoints (registration, password reset)
|
|
145
|
+
- [ ] CAPTCHA or bot detection on public-facing forms
|
|
146
|
+
- [ ] Business flow monitoring and alerting
|
|
147
|
+
- [ ] Idempotency keys for payment/creation operations
|
|
148
|
+
</api6_business_flow>
|
|
149
|
+
|
|
150
|
+
<api7_ssrf>
|
|
151
|
+
## API7 - Server-Side Request Forgery (SSRF)
|
|
152
|
+
|
|
153
|
+
**Risk:** Attacker makes the server send requests to internal resources.
|
|
154
|
+
|
|
155
|
+
**SmartStack check:**
|
|
156
|
+
- [ ] No user-supplied URLs passed to `HttpClient` without validation
|
|
157
|
+
- [ ] Webhook URLs validated against allowlist
|
|
158
|
+
- [ ] Internal network ranges blocked (127.0.0.1, 10.x, 192.168.x)
|
|
159
|
+
|
|
160
|
+
```csharp
|
|
161
|
+
// BAD: SSRF - user controls the URL
|
|
162
|
+
[HttpPost("fetch")]
|
|
163
|
+
public async Task<ActionResult> Fetch([FromBody] string url)
|
|
164
|
+
{
|
|
165
|
+
var response = await _httpClient.GetAsync(url);
|
|
166
|
+
return Ok(await response.Content.ReadAsStringAsync());
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// GOOD: Validate against allowlist
|
|
170
|
+
[HttpPost("webhook")]
|
|
171
|
+
public async Task<ActionResult> ConfigureWebhook([FromBody] WebhookDto dto)
|
|
172
|
+
{
|
|
173
|
+
if (!_webhookValidator.IsAllowedDomain(dto.Url))
|
|
174
|
+
return BadRequest("URL domain not allowed");
|
|
175
|
+
...
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
</api7_ssrf>
|
|
179
|
+
|
|
180
|
+
<api8_misconfiguration>
|
|
181
|
+
## API8 - Security Misconfiguration
|
|
182
|
+
|
|
183
|
+
**Risk:** Default configs, verbose errors, missing security headers expose attack surface.
|
|
184
|
+
|
|
185
|
+
**SmartStack check:**
|
|
186
|
+
- [ ] Security headers configured (see security-checklist.md A02)
|
|
187
|
+
- [ ] Error responses don't expose stack traces in production
|
|
188
|
+
- [ ] CORS restricted to known origins (no `AllowAnyOrigin` in production)
|
|
189
|
+
- [ ] Swagger/OpenAPI disabled in production
|
|
190
|
+
- [ ] Debug mode off in production (`ASPNETCORE_ENVIRONMENT=Production`)
|
|
191
|
+
|
|
192
|
+
**Detection pattern:**
|
|
193
|
+
```bash
|
|
194
|
+
grep -rE "AllowAnyOrigin|EnableDetailedErrors|DeveloperExceptionPage" --include="*.cs"
|
|
195
|
+
```
|
|
196
|
+
</api8_misconfiguration>
|
|
197
|
+
|
|
198
|
+
<api9_inventory>
|
|
199
|
+
## API9 - Improper Inventory Management
|
|
200
|
+
|
|
201
|
+
**Risk:** Old or undocumented API endpoints remain exposed without security.
|
|
202
|
+
|
|
203
|
+
**SmartStack check:**
|
|
204
|
+
- [ ] All controllers have `[NavRoute]` attribute (discoverable)
|
|
205
|
+
- [ ] Deprecated endpoints marked with `[Obsolete]`
|
|
206
|
+
- [ ] `[ProducesResponseType]` on every endpoint (API documentation)
|
|
207
|
+
- [ ] No orphan controllers without matching permissions
|
|
208
|
+
</api9_inventory>
|
|
209
|
+
|
|
210
|
+
<api10_unsafe_consumption>
|
|
211
|
+
## API10 - Unsafe Consumption of APIs
|
|
212
|
+
|
|
213
|
+
**Risk:** Application blindly trusts data from third-party APIs.
|
|
214
|
+
|
|
215
|
+
**SmartStack check:**
|
|
216
|
+
- [ ] External API responses validated/deserialized with typed DTOs
|
|
217
|
+
- [ ] Timeout and retry policies on `HttpClient` (Polly)
|
|
218
|
+
- [ ] Circuit breaker pattern for unreliable external services
|
|
219
|
+
- [ ] External data sanitized before storage
|
|
220
|
+
</api10_unsafe_consumption>
|
|
221
|
+
|
|
222
|
+
<severity_mapping>
|
|
223
|
+
## Mapping to SmartStack SEC-xxx Categories
|
|
224
|
+
|
|
225
|
+
| OWASP API | SmartStack Check | Severity |
|
|
226
|
+
|-----------|-----------------|----------|
|
|
227
|
+
| API1 BOLA | SEC-001: Missing tenant filter | blocking |
|
|
228
|
+
| API2 Auth | SEC-002: Missing [Authorize] | blocking |
|
|
229
|
+
| API3 Property Auth | SEC-003: Entity binding (mass assignment) | critical |
|
|
230
|
+
| API4 Resource | SEC-004: No pagination limit | warning |
|
|
231
|
+
| API5 Function Auth | SEC-005: Missing [RequirePermission] | blocking |
|
|
232
|
+
| API6 Business Flow | SEC-006: No rate limit on sensitive ops | warning |
|
|
233
|
+
| API7 SSRF | SEC-007: Unvalidated URL in HttpClient | blocking |
|
|
234
|
+
| API8 Misconfig | SEC-008: CORS/Debug/Headers | critical |
|
|
235
|
+
| API9 Inventory | SEC-009: Undocumented endpoint | info |
|
|
236
|
+
| API10 Unsafe API | SEC-010: Unvalidated external data | warning |
|
|
237
|
+
</severity_mapping>
|
|
238
|
+
|
|
239
|
+
<sources>
|
|
240
|
+
- [OWASP API Security Top 10 (2023)](https://owasp.org/API-Security/editions/2023/en/0x11-t10/)
|
|
241
|
+
- [OWASP API Security Project](https://owasp.org/www-project-api-security/)
|
|
242
|
+
- SmartStack RBAC and Multi-tenant documentation
|
|
243
|
+
</sources>
|