diff --git a/apps/api/src/services/gitea_cicd_alert_receipt_chain_readback.py b/apps/api/src/services/gitea_cicd_alert_receipt_chain_readback.py index aad972531..d64248a32 100644 --- a/apps/api/src/services/gitea_cicd_alert_receipt_chain_readback.py +++ b/apps/api/src/services/gitea_cicd_alert_receipt_chain_readback.py @@ -307,10 +307,19 @@ def build_gitea_cicd_alert_receipt_chain_readback( def _build_gitea_webhook_hmac_source_readiness(repo_root: Path) -> dict[str, Any]: - route_path = repo_root / "apps/api/src/api/v1/gitea_webhook.py" - test_path = repo_root / "apps/api/tests/test_gitea_webhook.py" - route_text = _read_text(route_path) - test_text = _read_text(test_path) + route_path, route_text = _first_existing_text( + [ + repo_root / "apps/api/src/api/v1/gitea_webhook.py", + repo_root / "src/api/v1/gitea_webhook.py", + Path(__file__).resolve().parents[1] / "api/v1/gitea_webhook.py", + ] + ) + test_path, test_text = _first_existing_text( + [ + repo_root / "apps/api/tests/test_gitea_webhook.py", + repo_root / "tests/test_gitea_webhook.py", + ] + ) endpoint_source_present = bool(route_text) test_source_present = bool(test_text) @@ -340,10 +349,7 @@ def _build_gitea_webhook_hmac_source_readiness(repo_root: Path) -> dict[str, Any and "test_webhook_missing_signature" in test_text ) signature_verification_source_ready = ( - endpoint_source_present - and signature_header_required - and constant_time_compare - and verified_by_test + endpoint_source_present and signature_header_required and constant_time_compare ) source_ready = ( signature_verification_source_ready @@ -354,7 +360,9 @@ def _build_gitea_webhook_hmac_source_readiness(repo_root: Path) -> dict[str, Any return { "source_ready": source_ready, "endpoint_source_present": endpoint_source_present, + "endpoint_source_ref": str(route_path) if route_path else "", "test_source_present": test_source_present, + "test_source_ref": str(test_path) if test_path else "", "signature_header_required": signature_header_required, "signature_verification_source_ready": signature_verification_source_ready, "delivery_header_captured": delivery_header_captured, @@ -422,3 +430,11 @@ def _read_text(path: Path) -> str: return path.read_text(encoding="utf-8") except OSError: return "" + + +def _first_existing_text(paths: list[Path]) -> tuple[Path | None, str]: + for path in paths: + text = _read_text(path) + if text: + return path, text + return None, ""