| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- """Flask/RBAC/openapi contract for the closed WP13 plugin gateway."""
- from __future__ import annotations
- from app.core.plugins.governance import fixture_signature_digest
- MANIFEST = {
- "schema_version": 1, "plugin_uid": "fixture-api-quality", "name": "fixture-api-quality", "version": "1.0.0", "api_version": "1",
- "type": "quality", "capabilities": ["evaluate"],
- "permissions": {"network": False, "file": False, "secret": False, "child_process": False},
- "resource": {"timeout_ms": 100, "max_output_bytes": 4096, "max_concurrency": 1, "max_retries": 1},
- "compatibility": {"platform_api": "1"},
- "distribution": {"kind": "builtin_fixture", "fixture_id": "ENGINEERING_EVIDENCE_ONLY", "artifact_digest": "a" * 64},
- }
- RECORD = {
- "artifact_digest": "a" * 64,
- "signature": {"trust_store_key_id": "local-fixture-key-v1", "signature_digest": fixture_signature_digest("a" * 64)},
- "sbom_digest": "b" * 64, "license_digest": "c" * 64, "vulnerability_digest": "d" * 64, "provenance_digest": "e" * 64,
- }
- class _Gateway:
- calls: list[dict] = []
- def register(self, **kwargs):
- type(self).calls.append(kwargs)
- return {"state": "draft", "plugin_uid": kwargs["manifest"]["plugin_uid"], "version": "1.0.0"}
- def _client(monkeypatch):
- from app import create_app
- from app.api.system import plugin_platform_routes
- _Gateway.calls = []
- monkeypatch.setattr(plugin_platform_routes, "DatabasePluginPlatformService", _Gateway)
- monkeypatch.setattr(
- "app.core.system.auth.load_identity_from_token",
- lambda token, secret: {"id": "01900000-0000-7000-8000-000000000013", "roles": [token]} if token in {"viewer", "admin"} else None,
- )
- app = create_app()
- app.config.update(TESTING=True)
- return app.test_client()
- def test_wp13_registry_route_is_closed_rbac_no_store_and_server_principal(monkeypatch):
- client = _client(monkeypatch)
- assert client.post("/api/system/plugins/registry", json={"manifest": MANIFEST, "registry_record": RECORD}, headers={"Authorization": "Bearer viewer"}).status_code == 403
- rejected = client.post("/api/system/plugins/registry", json={"manifest": MANIFEST | {"url": "https://invalid"}, "registry_record": RECORD}, headers={"Authorization": "Bearer admin"})
- assert rejected.status_code == 400 and rejected.headers["Cache-Control"] == "no-store"
- accepted = client.post("/api/system/plugins/registry", json={"manifest": MANIFEST, "registry_record": RECORD}, headers={"Authorization": "Bearer admin"})
- assert accepted.status_code == 201 and accepted.headers["Cache-Control"] == "no-store"
- assert _Gateway.calls[0]["actor_ref"] == "01900000-0000-7000-8000-000000000013"
|