Problem
Context: RHIDP-15167 tasks 3.6-3.7. AdoptionCard links directly to GitHub zipball API for git assets. This fails for private repos. The spec requires a backend proxy using Backstage SCM integration credentials. PR #3747 deferred this.
Expected behavior
New route: GET /api/boost/catalog/download?entityRef=... that resolves entity via catalogApi, authenticates via @backstage/integration ScmIntegrations, streams ZIP archive back. Permission check via httpAuth + permissions.authorize(). Error handling: 403/404/502.
Scope
Workspace: workspaces/boost, Package: boost-backend
Files: plugins/boost-backend/src/routes/catalogDownload.ts (new handler), plugins/boost-backend/src/service/router.ts (register route), router.test.ts (tests)
Tests
- Successful download (200), 2. Missing entity (404), 3. Missing location (404), 4. Permission denied (403), 5. Upstream error (502), 6. Unsupported host (400)
Notes
Only git downloads. OCI/MCP are frontend-only. Frontend follow-up to wire AdoptionCard to proxy is a separate issue.
Problem
Context: RHIDP-15167 tasks 3.6-3.7. AdoptionCard links directly to GitHub zipball API for git assets. This fails for private repos. The spec requires a backend proxy using Backstage SCM integration credentials. PR #3747 deferred this.
Expected behavior
New route: GET /api/boost/catalog/download?entityRef=... that resolves entity via catalogApi, authenticates via @backstage/integration ScmIntegrations, streams ZIP archive back. Permission check via httpAuth + permissions.authorize(). Error handling: 403/404/502.
Scope
Workspace: workspaces/boost, Package: boost-backend
Files: plugins/boost-backend/src/routes/catalogDownload.ts (new handler), plugins/boost-backend/src/service/router.ts (register route), router.test.ts (tests)
Tests
Notes
Only git downloads. OCI/MCP are frontend-only. Frontend follow-up to wire AdoptionCard to proxy is a separate issue.