fix: correct canonical control proxy paths to include /compliance prefix
All checks were successful
CI/CD / go-lint (push) Has been skipped
CI/CD / python-lint (push) Has been skipped
CI/CD / nodejs-lint (push) Has been skipped
CI/CD / test-go-ai-compliance (push) Successful in 44s
CI/CD / test-python-backend-compliance (push) Successful in 1m4s
CI/CD / test-python-document-crawler (push) Successful in 27s
CI/CD / test-python-dsms-gateway (push) Successful in 24s
CI/CD / validate-canonical-controls (push) Successful in 14s
CI/CD / deploy-hetzner (push) Successful in 1m49s

The backend mounts the compliance router at /api/compliance, so canonical
control endpoints are at /api/compliance/v1/canonical/*, not /api/v1/canonical/*.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-03-12 20:49:06 +01:00
parent 050f353192
commit 453eec9ed8
2 changed files with 13 additions and 13 deletions

View File

@@ -6,11 +6,11 @@ const BACKEND_URL = process.env.BACKEND_URL || 'http://backend-compliance:8002'
* Proxy: GET /api/sdk/v1/canonical?endpoint=... * Proxy: GET /api/sdk/v1/canonical?endpoint=...
* *
* Routes to backend canonical control endpoints: * Routes to backend canonical control endpoints:
* endpoint=frameworks → GET /api/v1/canonical/frameworks * endpoint=frameworks → GET /api/compliance/v1/canonical/frameworks
* endpoint=controls → GET /api/v1/canonical/controls(?severity=...&domain=...) * endpoint=controls → GET /api/compliance/v1/canonical/controls(?severity=...&domain=...)
* endpoint=control&id= → GET /api/v1/canonical/controls/{id} * endpoint=control&id= → GET /api/compliance/v1/canonical/controls/{id}
* endpoint=sources → GET /api/v1/canonical/sources * endpoint=sources → GET /api/compliance/v1/canonical/sources
* endpoint=licenses → GET /api/v1/canonical/licenses * endpoint=licenses → GET /api/compliance/v1/canonical/licenses
*/ */
export async function GET(request: NextRequest) { export async function GET(request: NextRequest) {
try { try {
@@ -21,7 +21,7 @@ export async function GET(request: NextRequest) {
switch (endpoint) { switch (endpoint) {
case 'frameworks': case 'frameworks':
backendPath = '/api/v1/canonical/frameworks' backendPath = '/api/compliance/v1/canonical/frameworks'
break break
case 'controls': { case 'controls': {
@@ -31,7 +31,7 @@ export async function GET(request: NextRequest) {
if (severity) params.set('severity', severity) if (severity) params.set('severity', severity)
if (domain) params.set('domain', domain) if (domain) params.set('domain', domain)
const qs = params.toString() const qs = params.toString()
backendPath = `/api/v1/canonical/controls${qs ? `?${qs}` : ''}` backendPath = `/api/compliance/v1/canonical/controls${qs ? `?${qs}` : ''}`
break break
} }
@@ -40,16 +40,16 @@ export async function GET(request: NextRequest) {
if (!controlId) { if (!controlId) {
return NextResponse.json({ error: 'Missing control id' }, { status: 400 }) return NextResponse.json({ error: 'Missing control id' }, { status: 400 })
} }
backendPath = `/api/v1/canonical/controls/${encodeURIComponent(controlId)}` backendPath = `/api/compliance/v1/canonical/controls/${encodeURIComponent(controlId)}`
break break
} }
case 'sources': case 'sources':
backendPath = '/api/v1/canonical/sources' backendPath = '/api/compliance/v1/canonical/sources'
break break
case 'licenses': case 'licenses':
backendPath = '/api/v1/canonical/licenses' backendPath = '/api/compliance/v1/canonical/licenses'
break break
default: default:
@@ -82,7 +82,7 @@ export async function GET(request: NextRequest) {
/** /**
* Proxy: POST /api/sdk/v1/canonical?endpoint=similarity-check&id=... * Proxy: POST /api/sdk/v1/canonical?endpoint=similarity-check&id=...
* *
* Routes to: POST /api/v1/canonical/controls/{id}/similarity-check * Routes to: POST /api/compliance/v1/canonical/controls/{id}/similarity-check
*/ */
export async function POST(request: NextRequest) { export async function POST(request: NextRequest) {
try { try {
@@ -96,7 +96,7 @@ export async function POST(request: NextRequest) {
const body = await request.json() const body = await request.json()
const response = await fetch( const response = await fetch(
`${BACKEND_URL}/api/v1/canonical/controls/${encodeURIComponent(controlId)}/similarity-check`, `${BACKEND_URL}/api/compliance/v1/canonical/controls/${encodeURIComponent(controlId)}/similarity-check`,
{ {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },

View File

@@ -5,7 +5,7 @@ Unabhaengige Taxonomie — kein Bezug zu proprietaeren Frameworks.
**Prefix:** `CP-CLIB` · **Frontend:** `https://macmini:3007/sdk/control-library` **Prefix:** `CP-CLIB` · **Frontend:** `https://macmini:3007/sdk/control-library`
**Provenance Wiki:** `https://macmini:3007/sdk/control-provenance` **Provenance Wiki:** `https://macmini:3007/sdk/control-provenance`
**Proxy:** `/api/sdk/v1/canonical``backend-compliance:8002/api/v1/canonical/...` **Proxy:** `/api/sdk/v1/canonical``backend-compliance:8002/api/compliance/v1/canonical/...`
--- ---