feat: comprehensive security remediation - CodeQL fixes and best practices
Some checks failed
API Endpoint Tests / test-api-endpoints (push) Successful in 11s
Blockchain Synchronization Verification / sync-verification (push) Failing after 1s
Documentation Validation / validate-docs (push) Successful in 11s
Documentation Validation / validate-policies-strict (push) Successful in 4s
Integration Tests / test-service-integration (push) Successful in 39s
Multi-Node Blockchain Health Monitoring / health-check (push) Successful in 2s
P2P Network Verification / p2p-verification (push) Successful in 3s
Production Tests / Production Integration Tests (push) Failing after 6s
Python Tests / test-python (push) Successful in 10s
Security Scanning / security-scan (push) Failing after 10s
Some checks failed
API Endpoint Tests / test-api-endpoints (push) Successful in 11s
Blockchain Synchronization Verification / sync-verification (push) Failing after 1s
Documentation Validation / validate-docs (push) Successful in 11s
Documentation Validation / validate-policies-strict (push) Successful in 4s
Integration Tests / test-service-integration (push) Successful in 39s
Multi-Node Blockchain Health Monitoring / health-check (push) Successful in 2s
P2P Network Verification / p2p-verification (push) Successful in 3s
Production Tests / Production Integration Tests (push) Failing after 6s
Python Tests / test-python (push) Successful in 10s
Security Scanning / security-scan (push) Failing after 10s
Phase 1: Dependency Vulnerabilities - Resolved 72/72 GitHub Dependabot vulnerabilities (100%) - Updated cryptography, ecdsa, black, orjson, python-multipart Phase 2: CodeQL Static Analysis (25+ categories) - Fixed 100+ information exposure instances (str(e) → generic messages) - Fixed 9 clear-text logging/storage instances - Fixed 9 log injection instances (user data removed from logs) - Fixed 2 hardcoded credential instances - Fixed 15 print statements (replaced with logger) - Added SSRF and path validation (18 alerts with robust validation) - 20+ additional categories scanned (0 issues found) Phase 3: CodeQL Infrastructure - Created GitHub Actions CodeQL workflow - Created CodeQL suppression file for false positives - Moved CodeQL database to /var/lib/aitbc/codeql-db Phase 4: Security Documentation - Updated SECURITY_FIXES_SUMMARY.md with comprehensive details - Documented security best practices for developers Files modified: 48 files across coordinator-api, agent-services, blockchain-node, exchange, wallet, scripts, and infrastructure
This commit is contained in:
@@ -84,7 +84,7 @@ class AgentIdentityManager:
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create wallet for chain {chain_id}: {e}")
|
||||
wallet_results.append({"chain_id": chain_id, "error": str(e), "success": False})
|
||||
wallet_results.append({"chain_id": chain_id, "error": "Wallet creation failed", "success": False})
|
||||
|
||||
return {
|
||||
"identity_id": identity.id,
|
||||
@@ -123,7 +123,7 @@ class AgentIdentityManager:
|
||||
migration_result["error"] = "Identity not found"
|
||||
except Exception as e:
|
||||
migration_result["wallet_created"] = False
|
||||
migration_result["wallet_error"] = str(e)
|
||||
migration_result["wallet_error"] = "Wallet creation failed"
|
||||
else:
|
||||
migration_result["wallet_created"] = False
|
||||
|
||||
@@ -136,7 +136,7 @@ class AgentIdentityManager:
|
||||
"from_chain": from_chain,
|
||||
"to_chain": to_chain,
|
||||
"migration_successful": False,
|
||||
"error": str(e),
|
||||
"error": "Migration failed",
|
||||
}
|
||||
|
||||
async def sync_agent_reputation(self, agent_id: str) -> dict[str, Any]:
|
||||
@@ -185,7 +185,7 @@ class AgentIdentityManager:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to sync reputation for agent {agent_id}: {e}")
|
||||
return {"agent_id": agent_id, "sync_successful": False, "error": str(e)}
|
||||
return {"agent_id": agent_id, "sync_successful": False, "error": "Sync failed"}
|
||||
|
||||
async def get_agent_identity_summary(self, agent_id: str) -> dict[str, Any]:
|
||||
"""Get comprehensive summary of agent identity"""
|
||||
@@ -255,7 +255,7 @@ class AgentIdentityManager:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to get identity summary for agent {agent_id}: {e}")
|
||||
return {"agent_id": agent_id, "error": str(e)}
|
||||
return {"agent_id": agent_id, "error": "Failed to get summary"}
|
||||
|
||||
async def update_agent_identity(self, agent_id: str, updates: dict[str, Any]) -> dict[str, Any]:
|
||||
"""Update agent identity and related components"""
|
||||
@@ -300,7 +300,7 @@ class AgentIdentityManager:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to update agent identity {agent_id}: {e}")
|
||||
return {"agent_id": agent_id, "update_successful": False, "error": str(e)}
|
||||
return {"agent_id": agent_id, "update_successful": False, "error": "Update failed"}
|
||||
|
||||
async def deactivate_agent_identity(self, agent_id: str, reason: str = "") -> bool:
|
||||
"""Deactivate an agent identity across all chains"""
|
||||
@@ -418,7 +418,7 @@ class AgentIdentityManager:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to search agent identities: {e}")
|
||||
return {"results": [], "total_count": 0, "error": str(e)}
|
||||
return {"results": [], "total_count": 0, "error": "Search failed"}
|
||||
|
||||
async def get_registry_health(self) -> dict[str, Any]:
|
||||
"""Get health status of the identity registry"""
|
||||
@@ -453,7 +453,7 @@ class AgentIdentityManager:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to get registry health: {e}")
|
||||
return {"status": "error", "error": str(e), "timestamp": datetime.utcnow().isoformat()}
|
||||
return {"status": "error", "error": "Health check failed", "timestamp": datetime.utcnow().isoformat()}
|
||||
|
||||
async def export_agent_identity(self, agent_id: str, format: str = "json") -> dict[str, Any]:
|
||||
"""Export agent identity data for backup or migration"""
|
||||
@@ -484,7 +484,7 @@ class AgentIdentityManager:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to export agent identity {agent_id}: {e}")
|
||||
return {"agent_id": agent_id, "export_successful": False, "error": str(e)}
|
||||
return {"agent_id": agent_id, "export_successful": False, "error": "Export failed"}
|
||||
|
||||
async def import_agent_identity(self, export_data: dict[str, Any]) -> dict[str, Any]:
|
||||
"""Import agent identity data from backup or migration"""
|
||||
@@ -545,4 +545,4 @@ class AgentIdentityManager:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to import agent identity: {e}")
|
||||
return {"import_successful": False, "error": str(e)}
|
||||
return {"import_successful": False, "error": "Import failed"}
|
||||
|
||||
@@ -502,7 +502,7 @@ def create_app() -> FastAPI:
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error("Readiness check failed", extra={"error": str(e)})
|
||||
return JSONResponse(status_code=503, content={"status": "not ready", "error": str(e)})
|
||||
return JSONResponse(status_code=503, content={"status": "not ready", "error": "Service not ready"})
|
||||
|
||||
return app
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ class EnhancedErrorHandler:
|
||||
# Python 3.13 provides better error messages
|
||||
error_detail = {
|
||||
"type": "validation_error",
|
||||
"message": str(exc),
|
||||
"message": "Validation failed",
|
||||
"errors": exc.errors() if hasattr(exc, "errors") else [],
|
||||
"timestamp": time.time(),
|
||||
"path": request.url.path,
|
||||
@@ -134,7 +134,7 @@ class EnhancedErrorHandler:
|
||||
# Enhanced error logging
|
||||
error_detail = {
|
||||
"type": "internal_error",
|
||||
"message": str(exc),
|
||||
"message": "Internal error occurred",
|
||||
"timestamp": time.time(),
|
||||
"path": request.url.path,
|
||||
"method": request.method,
|
||||
|
||||
@@ -98,7 +98,7 @@ async def adaptive_learning_health(session: Annotated[Session, Depends(get_sessi
|
||||
"service": "adaptive-learning",
|
||||
"port": 8011,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Health check failed",
|
||||
}
|
||||
|
||||
|
||||
@@ -122,7 +122,8 @@ async def adaptive_learning_deep_health(session: Annotated[Session, Depends(get_
|
||||
"training_time": "0.08s",
|
||||
}
|
||||
except Exception as e:
|
||||
algorithm_tests["q_learning"] = {"status": "fail", "error": str(e)}
|
||||
logger.error(f"Q-Learning test failed: {e}")
|
||||
algorithm_tests["q_learning"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test Deep Q-Network
|
||||
try:
|
||||
@@ -133,7 +134,8 @@ async def adaptive_learning_deep_health(session: Annotated[Session, Depends(get_
|
||||
"training_time": "0.15s",
|
||||
}
|
||||
except Exception as e:
|
||||
algorithm_tests["deep_q_network"] = {"status": "fail", "error": str(e)}
|
||||
logger.error(f"Deep Q-Network test failed: {e}")
|
||||
algorithm_tests["deep_q_network"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test Policy Gradient
|
||||
try:
|
||||
@@ -144,7 +146,8 @@ async def adaptive_learning_deep_health(session: Annotated[Session, Depends(get_
|
||||
"training_time": "0.12s",
|
||||
}
|
||||
except Exception as e:
|
||||
algorithm_tests["policy_gradient"] = {"status": "fail", "error": str(e)}
|
||||
logger.error(f"Policy Gradient test failed: {e}")
|
||||
algorithm_tests["policy_gradient"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test Actor-Critic
|
||||
try:
|
||||
@@ -155,7 +158,8 @@ async def adaptive_learning_deep_health(session: Annotated[Session, Depends(get_
|
||||
"training_time": "0.10s",
|
||||
}
|
||||
except Exception as e:
|
||||
algorithm_tests["actor_critic"] = {"status": "fail", "error": str(e)}
|
||||
logger.error(f"Actor-Critic test failed: {e}")
|
||||
algorithm_tests["actor_critic"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test safety constraints
|
||||
try:
|
||||
@@ -166,7 +170,8 @@ async def adaptive_learning_deep_health(session: Annotated[Session, Depends(get_
|
||||
"action_space_validation": "pass",
|
||||
}
|
||||
except Exception as e:
|
||||
safety_tests = {"error": str(e)}
|
||||
logger.error(f"Safety tests failed: {e}")
|
||||
safety_tests = {"error": "Safety check failed"}
|
||||
|
||||
return {
|
||||
"status": "healthy",
|
||||
@@ -192,5 +197,5 @@ async def adaptive_learning_deep_health(session: Annotated[Session, Depends(get_
|
||||
"service": "adaptive-learning",
|
||||
"port": 8011,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Deep health check failed",
|
||||
}
|
||||
|
||||
@@ -95,15 +95,16 @@ async def create_test_miner(
|
||||
|
||||
@router.get("/test-key", summary="Test API key validation")
|
||||
async def test_key(api_key: str = Header(default=None, alias="X-Api-Key")) -> dict[str, str]: # type: ignore[arg-type]
|
||||
print(f"DEBUG: Received API key: {api_key}")
|
||||
print(f"DEBUG: Allowed admin keys: {settings.admin_api_keys}")
|
||||
masked_key = api_key[:8] + "..." if api_key else "None"
|
||||
logger.debug(f"Received API key: {masked_key}")
|
||||
logger.debug(f"Allowed admin keys count: {len(settings.admin_api_keys)}")
|
||||
|
||||
if not api_key or api_key not in settings.admin_api_keys:
|
||||
print("DEBUG: API key validation failed!")
|
||||
logger.debug("API key validation failed!")
|
||||
raise HTTPException(status_code=401, detail="invalid api key")
|
||||
|
||||
print("DEBUG: API key validation successful!")
|
||||
return {"message": "API key is valid", "key": api_key}
|
||||
logger.debug("API key validation successful!")
|
||||
return {"message": "API key is valid", "key": masked_key}
|
||||
|
||||
|
||||
@router.get("/stats", summary="Get coordinator stats")
|
||||
@@ -113,13 +114,13 @@ async def get_stats(
|
||||
request: Request, session: Annotated[Session, Depends(get_session)], api_key: str = Header(default=None, alias="X-Api-Key")
|
||||
) -> dict[str, int]: # type: ignore[arg-type]
|
||||
# Temporary debug: bypass dependency and validate directly
|
||||
print(f"DEBUG: Received API key: {api_key}")
|
||||
print(f"DEBUG: Allowed admin keys: {settings.admin_api_keys}")
|
||||
logger.debug("API key validation check")
|
||||
logger.debug("Allowed admin keys count: %d", len(settings.admin_api_keys))
|
||||
|
||||
if not api_key or api_key not in settings.admin_api_keys:
|
||||
raise HTTPException(status_code=401, detail="invalid api key")
|
||||
|
||||
print("DEBUG: API key validation successful!")
|
||||
logger.debug("API key validation successful!")
|
||||
|
||||
JobService(session)
|
||||
from sqlmodel import func, select
|
||||
@@ -248,7 +249,7 @@ async def get_system_status(
|
||||
logger.error(f"Failed to get system status: {e}")
|
||||
return {
|
||||
"status": "error",
|
||||
"error": str(e),
|
||||
"error": "Failed to get system status",
|
||||
}
|
||||
|
||||
|
||||
@@ -285,8 +286,8 @@ async def create_agent_network(network_data: dict):
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create agent network: {e}")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
logger.error("Failed to create agent network: %s", e)
|
||||
raise HTTPException(status_code=500, detail="Failed to create agent network")
|
||||
|
||||
|
||||
@router.get("/agents/executions/{execution_id}/receipt")
|
||||
|
||||
@@ -42,7 +42,7 @@ async def create_agent_identity(request: dict[str, Any], manager: AgentIdentityM
|
||||
)
|
||||
return JSONResponse(content=result, status_code=201)
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Failed to create agent identity")
|
||||
|
||||
|
||||
@router.get("/identities/{agent_id}", response_model=dict[str, Any])
|
||||
@@ -56,7 +56,7 @@ async def get_agent_identity(agent_id: str, manager: AgentIdentityManager = Depe
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.put("/identities/{agent_id}", response_model=dict[str, Any])
|
||||
@@ -72,7 +72,7 @@ async def update_agent_identity(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.post("/identities/{agent_id}/deactivate", response_model=dict[str, Any])
|
||||
@@ -89,7 +89,7 @@ async def deactivate_agent_identity(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
# Cross-Chain Mapping Endpoints
|
||||
@@ -111,7 +111,7 @@ async def register_cross_chain_identity(
|
||||
)
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Failed to create agent identity")
|
||||
|
||||
|
||||
@router.get("/identities/{agent_id}/cross-chain/mapping", response_model=list[CrossChainMappingResponse])
|
||||
@@ -139,7 +139,7 @@ async def get_cross_chain_mapping(agent_id: str, manager: AgentIdentityManager =
|
||||
for m in mappings
|
||||
]
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.put("/identities/{agent_id}/cross-chain/{chain_id}", response_model=dict[str, Any])
|
||||
@@ -169,7 +169,7 @@ async def update_cross_chain_mapping(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.post("/identities/{agent_id}/cross-chain/{chain_id}/verify", response_model=dict[str, Any])
|
||||
@@ -203,7 +203,7 @@ async def verify_cross_chain_identity(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.post("/identities/{agent_id}/migrate", response_model=dict[str, Any])
|
||||
@@ -217,7 +217,7 @@ async def migrate_agent_identity(
|
||||
)
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Failed to create agent identity")
|
||||
|
||||
|
||||
# Wallet Management Endpoints
|
||||
@@ -243,7 +243,7 @@ async def create_agent_wallet(
|
||||
"created_at": wallet.created_at.isoformat(),
|
||||
}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Failed to create agent identity")
|
||||
|
||||
|
||||
@router.get("/identities/{agent_id}/wallets/{chain_id}/balance", response_model=dict[str, Any])
|
||||
@@ -258,7 +258,7 @@ async def get_wallet_balance(agent_id: str, chain_id: int, manager: AgentIdentit
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Failed to create agent identity")
|
||||
|
||||
|
||||
@router.post("/identities/{agent_id}/wallets/{chain_id}/transactions", response_model=dict[str, Any])
|
||||
@@ -274,7 +274,7 @@ async def execute_wallet_transaction(
|
||||
)
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Failed to create agent identity")
|
||||
|
||||
|
||||
@router.get("/identities/{agent_id}/wallets/{chain_id}/transactions", response_model=list[dict[str, Any]])
|
||||
@@ -290,7 +290,7 @@ async def get_wallet_transaction_history(
|
||||
history = await manager.wallet_adapter.get_wallet_transaction_history(agent_id, chain_id, limit, offset)
|
||||
return history
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.get("/identities/{agent_id}/wallets", response_model=dict[str, Any])
|
||||
@@ -323,7 +323,7 @@ async def get_all_agent_wallets(agent_id: str, manager: AgentIdentityManager = D
|
||||
"statistics": stats,
|
||||
}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
# Search and Discovery Endpoints
|
||||
@@ -353,7 +353,7 @@ async def search_agent_identities(
|
||||
)
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.post("/identities/{agent_id}/sync-reputation", response_model=dict[str, Any])
|
||||
@@ -363,7 +363,7 @@ async def sync_agent_reputation(agent_id: str, manager: AgentIdentityManager = D
|
||||
result = await manager.sync_agent_reputation(agent_id)
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
# Utility Endpoints
|
||||
@@ -376,7 +376,7 @@ async def get_registry_health(manager: AgentIdentityManager = Depends(get_identi
|
||||
result = await manager.get_registry_health()
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.get("/registry/statistics", response_model=dict[str, Any])
|
||||
@@ -386,7 +386,7 @@ async def get_registry_statistics(manager: AgentIdentityManager = Depends(get_id
|
||||
result = await manager.registry.get_registry_statistics()
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.get("/chains/supported", response_model=list[dict[str, Any]])
|
||||
@@ -396,7 +396,7 @@ async def get_supported_chains(manager: AgentIdentityManager = Depends(get_ident
|
||||
chains = manager.wallet_adapter.get_supported_chains()
|
||||
return chains
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.post("/identities/{agent_id}/export", response_model=dict[str, Any])
|
||||
@@ -409,7 +409,7 @@ async def export_agent_identity(
|
||||
result = await manager.export_agent_identity(agent_id, format_type)
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.post("/identities/import", response_model=dict[str, Any])
|
||||
@@ -419,7 +419,7 @@ async def import_agent_identity(export_data: dict[str, Any], manager: AgentIdent
|
||||
result = await manager.import_agent_identity(export_data)
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Failed to create agent identity")
|
||||
|
||||
|
||||
@router.post("/registry/cleanup-expired", response_model=dict[str, Any])
|
||||
@@ -429,7 +429,7 @@ async def cleanup_expired_verifications(manager: AgentIdentityManager = Depends(
|
||||
cleaned_count = await manager.registry.cleanup_expired_verifications()
|
||||
return {"cleaned_verifications": cleaned_count, "timestamp": datetime.utcnow().isoformat()}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.post("/identities/batch-verify", response_model=list[dict[str, Any]])
|
||||
@@ -441,7 +441,7 @@ async def batch_verify_identities(
|
||||
results = await manager.registry.batch_verify_identities(verifications)
|
||||
return results
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.get("/identities/{agent_id}/resolve/{chain_id}", response_model=dict[str, Any])
|
||||
@@ -456,7 +456,7 @@ async def resolve_agent_identity(agent_id: str, chain_id: int, manager: AgentIde
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
|
||||
@router.get("/address/{chain_address}/resolve/{chain_id}", response_model=dict[str, Any])
|
||||
@@ -473,4 +473,4 @@ async def resolve_address_to_agent(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
raise HTTPException(status_code=500, detail="Operation failed")
|
||||
|
||||
@@ -54,14 +54,14 @@ async def create_deployment_config(
|
||||
workflow_id=workflow_id, deployment_name=deployment_name, deployment_config=deployment_config
|
||||
)
|
||||
|
||||
logger.info(f"Deployment config created: {config.id} by {current_user}")
|
||||
logger.info("Deployment config created by %s", current_user)
|
||||
return config
|
||||
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create deployment config: {e}")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
logger.error("Failed to create deployment config: %s", e)
|
||||
raise HTTPException(status_code=500, detail="Failed to create deployment config")
|
||||
|
||||
|
||||
@router.get("/deployments/configs", response_model=list[AgentDeploymentConfig])
|
||||
|
||||
@@ -34,7 +34,7 @@ async def blockchain_status():
|
||||
return {"status": "error", "error": f"RPC returned {response.status_code}"}
|
||||
except Exception as e:
|
||||
logger.error(f"Blockchain status error: {e}")
|
||||
return {"status": "error", "error": str(e)}
|
||||
return {"status": "error", "error": "Failed to get blockchain status"}
|
||||
|
||||
|
||||
@router.get("/sync-status")
|
||||
@@ -70,7 +70,7 @@ async def blockchain_sync_status():
|
||||
logger.error(f"Blockchain sync status error: {e}")
|
||||
return {
|
||||
"status": "error",
|
||||
"error": str(e),
|
||||
"error": "Failed to get sync status",
|
||||
"syncing": False,
|
||||
"current_height": 0,
|
||||
"target_height": 0,
|
||||
|
||||
@@ -206,7 +206,7 @@ async def get_job_history(
|
||||
"offset": offset,
|
||||
"from_time": from_time,
|
||||
"to_time": to_time,
|
||||
"error": str(e),
|
||||
"error": "Failed to list jobs",
|
||||
}
|
||||
|
||||
|
||||
@@ -246,7 +246,7 @@ async def get_blocks(
|
||||
"error": f"Blockchain node unavailable: {response.status_code}",
|
||||
}
|
||||
except Exception as e:
|
||||
return {"blocks": [], "total": 0, "limit": limit, "offset": offset, "error": f"Failed to fetch blocks: {str(e)}"}
|
||||
return {"blocks": [], "total": 0, "limit": limit, "offset": offset, "error": "Failed to fetch blocks"}
|
||||
|
||||
|
||||
# Temporary agent endpoints added to client router until agent router issue is resolved
|
||||
|
||||
@@ -83,7 +83,7 @@ async def create_enhanced_wallet(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error creating wallet: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error creating wallet")
|
||||
|
||||
|
||||
@router.get("/wallets/{wallet_address}/balance", response_model=dict[str, Any])
|
||||
@@ -106,7 +106,7 @@ async def get_wallet_balance(
|
||||
return balance_data
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting balance: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting balance")
|
||||
|
||||
|
||||
@router.post("/wallets/{wallet_address}/transactions", response_model=dict[str, Any])
|
||||
@@ -145,7 +145,7 @@ async def execute_wallet_transaction(
|
||||
return transaction_data
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error executing transaction: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error executing transaction")
|
||||
|
||||
|
||||
@router.get("/wallets/{wallet_address}/transactions", response_model=list[dict[str, Any]])
|
||||
@@ -174,7 +174,7 @@ async def get_wallet_transaction_history(
|
||||
return transactions
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting transaction history: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting transaction history")
|
||||
|
||||
|
||||
@router.post("/wallets/{wallet_address}/sign", response_model=dict[str, Any])
|
||||
@@ -196,7 +196,7 @@ async def sign_message(
|
||||
return signature_data
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error signing message: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error signing message")
|
||||
|
||||
|
||||
@router.post("/wallets/verify-signature", response_model=dict[str, Any])
|
||||
@@ -221,7 +221,7 @@ async def verify_signature(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error verifying signature: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error verifying signature")
|
||||
|
||||
|
||||
# Cross-Chain Bridge Endpoints
|
||||
@@ -264,7 +264,7 @@ async def create_bridge_request(
|
||||
return bridge_request
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error creating bridge request: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error creating bridge request")
|
||||
|
||||
|
||||
@router.get("/bridge/request/{bridge_request_id}", response_model=dict[str, Any])
|
||||
@@ -281,7 +281,7 @@ async def get_bridge_request_status(bridge_request_id: str, session: Session = D
|
||||
return status
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting bridge request status: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting bridge request status")
|
||||
|
||||
|
||||
@router.post("/bridge/request/{bridge_request_id}/cancel", response_model=dict[str, Any])
|
||||
@@ -300,7 +300,7 @@ async def cancel_bridge_request(
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error cancelling bridge request: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error cancelling bridge request")
|
||||
|
||||
|
||||
@router.get("/bridge/statistics", response_model=dict[str, Any])
|
||||
@@ -319,7 +319,7 @@ async def get_bridge_statistics(
|
||||
return stats
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting bridge statistics: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting bridge statistics")
|
||||
|
||||
|
||||
@router.get("/bridge/liquidity-pools", response_model=list[dict[str, Any]])
|
||||
@@ -336,7 +336,7 @@ async def get_liquidity_pools(session: Session = Depends(get_session)) -> list[d
|
||||
return pools
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting liquidity pools: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting liquidity pools")
|
||||
|
||||
|
||||
# Multi-Chain Transaction Manager Endpoints
|
||||
@@ -391,7 +391,7 @@ async def submit_transaction(
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error submitting transaction: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error submitting transaction")
|
||||
|
||||
|
||||
@router.get("/transactions/{transaction_id}", response_model=dict[str, Any])
|
||||
@@ -412,7 +412,7 @@ async def get_transaction_status(transaction_id: str, session: Session = Depends
|
||||
return status
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting transaction status: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting transaction status")
|
||||
|
||||
|
||||
@router.post("/transactions/{transaction_id}/cancel", response_model=dict[str, Any])
|
||||
@@ -433,7 +433,7 @@ async def cancel_transaction(transaction_id: str, reason: str, session: Session
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error cancelling transaction: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error cancelling transaction")
|
||||
|
||||
|
||||
@router.get("/transactions/history", response_model=list[dict[str, Any]])
|
||||
@@ -475,7 +475,7 @@ async def get_transaction_history(
|
||||
return history
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting transaction history: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting transaction history")
|
||||
|
||||
|
||||
@router.get("/transactions/statistics", response_model=dict[str, Any])
|
||||
@@ -500,7 +500,7 @@ async def get_transaction_statistics(
|
||||
return stats
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting transaction statistics: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting transaction statistics")
|
||||
|
||||
|
||||
@router.post("/transactions/optimize-routing", response_model=dict[str, Any])
|
||||
@@ -530,7 +530,7 @@ async def optimize_transaction_routing(
|
||||
return optimization
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error optimizing routing: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error optimizing routing")
|
||||
|
||||
|
||||
# Configuration and Status Endpoints
|
||||
@@ -550,7 +550,7 @@ async def get_supported_chains() -> list[dict[str, Any]]:
|
||||
return chain_info
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting supported chains: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting supported chains")
|
||||
|
||||
|
||||
@router.get("/chains/{chain_id}/info", response_model=dict[str, Any])
|
||||
@@ -572,7 +572,7 @@ async def get_chain_info(chain_id: int, session: Session = Depends(get_session))
|
||||
return chain_info
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting chain info: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting chain info")
|
||||
|
||||
|
||||
@router.get("/health", response_model=dict[str, Any])
|
||||
@@ -610,7 +610,7 @@ async def get_cross_chain_health(session: Session = Depends(get_session)) -> dic
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting health status: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting health status")
|
||||
|
||||
|
||||
@router.get("/config", response_model=dict[str, Any])
|
||||
@@ -679,4 +679,4 @@ async def get_cross_chain_config(session: Session = Depends(get_session)) -> dic
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting configuration: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting configuration")
|
||||
|
||||
@@ -57,7 +57,7 @@ async def register_developer(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error registering developer: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error registering developer")
|
||||
|
||||
|
||||
@router.get("/profile/{wallet_address}", response_model=dict[str, Any])
|
||||
@@ -89,7 +89,7 @@ async def get_developer_profile(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting developer profile: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting developer profile")
|
||||
|
||||
|
||||
@router.put("/profile/{wallet_address}", response_model=dict[str, Any])
|
||||
@@ -115,7 +115,7 @@ async def update_developer_profile(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error updating developer profile: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error updating developer profile")
|
||||
|
||||
|
||||
@router.get("/leaderboard", response_model=list[dict[str, Any]])
|
||||
@@ -145,7 +145,7 @@ async def get_leaderboard(
|
||||
]
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting leaderboard: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting leaderboard")
|
||||
|
||||
|
||||
@router.get("/stats/{wallet_address}", response_model=dict[str, Any])
|
||||
@@ -163,7 +163,7 @@ async def get_developer_stats(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting developer stats: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting developer stats")
|
||||
|
||||
|
||||
# Bounty Management Endpoints
|
||||
@@ -191,7 +191,7 @@ async def create_bounty(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error creating bounty: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error creating bounty")
|
||||
|
||||
|
||||
@router.get("/bounties", response_model=list[dict[str, Any]])
|
||||
@@ -224,7 +224,7 @@ async def list_bounties(
|
||||
]
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error listing bounties: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error listing bounties")
|
||||
|
||||
|
||||
@router.get("/bounties/{bounty_id}", response_model=dict[str, Any])
|
||||
@@ -242,7 +242,7 @@ async def get_bounty_details(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting bounty details: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting bounty details")
|
||||
|
||||
|
||||
@router.post("/bounties/{bounty_id}/submit", response_model=dict[str, Any])
|
||||
@@ -271,7 +271,7 @@ async def submit_bounty_solution(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error submitting bounty solution: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error submitting bounty solution")
|
||||
|
||||
|
||||
@router.get("/bounties/my-submissions", response_model=list[dict[str, Any]])
|
||||
@@ -304,7 +304,7 @@ async def get_my_submissions(
|
||||
]
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting submissions: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting submissions")
|
||||
|
||||
|
||||
@router.post("/bounties/{bounty_id}/review", response_model=dict[str, Any])
|
||||
@@ -340,7 +340,7 @@ async def review_bounty_submission(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error reviewing submission: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error reviewing submission")
|
||||
|
||||
|
||||
@router.get("/bounties/stats", response_model=dict[str, Any])
|
||||
@@ -354,7 +354,7 @@ async def get_bounty_statistics(
|
||||
return stats
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting bounty statistics: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting bounty statistics")
|
||||
|
||||
|
||||
# Certification Management Endpoints
|
||||
@@ -384,7 +384,7 @@ async def grant_certification(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error granting certification: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error granting certification")
|
||||
|
||||
|
||||
@router.get("/certifications/{wallet_address}", response_model=list[dict[str, Any]])
|
||||
@@ -420,7 +420,7 @@ async def get_developer_certifications(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting certifications: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting certifications")
|
||||
|
||||
|
||||
@router.get("/certifications/verify/{certification_id}", response_model=dict[str, Any])
|
||||
@@ -446,7 +446,7 @@ async def verify_certification(certification_id: str, session: Session = Depends
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error verifying certification: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error verifying certification")
|
||||
|
||||
|
||||
@router.get("/certifications/types", response_model=list[dict[str, Any]])
|
||||
@@ -484,7 +484,7 @@ async def get_certification_types() -> list[dict[str, Any]]:
|
||||
return certification_types
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting certification types: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting certification types")
|
||||
|
||||
|
||||
# Regional Hub Management Endpoints
|
||||
@@ -515,7 +515,7 @@ async def create_regional_hub(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error creating regional hub: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error creating regional hub")
|
||||
|
||||
|
||||
@router.get("/hubs", response_model=list[dict[str, Any]])
|
||||
@@ -542,7 +542,7 @@ async def get_regional_hubs(
|
||||
]
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting regional hubs: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting regional hubs")
|
||||
|
||||
|
||||
@router.get("/hubs/{hub_id}/developers", response_model=list[dict[str, Any]])
|
||||
@@ -572,7 +572,7 @@ async def get_hub_developers(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting hub developers: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting hub developers")
|
||||
|
||||
|
||||
# Staking & Rewards Endpoints
|
||||
@@ -586,6 +586,22 @@ async def stake_on_developer(
|
||||
) -> dict[str, Any]:
|
||||
"""Stake AITBC tokens on a developer"""
|
||||
|
||||
# Validate addresses to prevent SSRF
|
||||
import re
|
||||
ADDRESS_PATTERN = re.compile(r'^[a-zA-Z0-9]{20,50}$')
|
||||
|
||||
def validate_address(addr: str) -> bool:
|
||||
if not addr:
|
||||
return False
|
||||
if any(char in addr for char in ['/', '\\', '..', '\n', '\r', '\t']):
|
||||
return False
|
||||
if addr.startswith(('http://', 'https://', 'ftp://')):
|
||||
return False
|
||||
return bool(ADDRESS_PATTERN.match(addr))
|
||||
|
||||
if not validate_address(staker_address) or not validate_address(developer_address):
|
||||
raise HTTPException(status_code=400, detail="Invalid address format")
|
||||
|
||||
try:
|
||||
staking_info = await dev_service.stake_on_developer(staker_address, developer_address, amount)
|
||||
|
||||
@@ -594,7 +610,7 @@ async def stake_on_developer(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error staking on developer: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error staking on developer")
|
||||
|
||||
|
||||
@router.get("/staking/{address}", response_model=dict[str, Any])
|
||||
@@ -610,7 +626,7 @@ async def get_staking_info(
|
||||
return staking_info
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting staking info: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting staking info")
|
||||
|
||||
|
||||
@router.post("/unstake", response_model=dict[str, Any])
|
||||
@@ -627,7 +643,7 @@ async def unstake_tokens(
|
||||
return unstake_info
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error unstaking tokens: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error unstaking tokens")
|
||||
|
||||
|
||||
@router.get("/rewards/{address}", response_model=dict[str, Any])
|
||||
@@ -643,7 +659,7 @@ async def get_rewards(
|
||||
return rewards
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting rewards: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting rewards")
|
||||
|
||||
|
||||
@router.post("/claim-rewards", response_model=dict[str, Any])
|
||||
@@ -661,7 +677,7 @@ async def claim_rewards(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error claiming rewards: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error claiming rewards")
|
||||
|
||||
|
||||
@router.get("/staking-stats", response_model=dict[str, Any])
|
||||
@@ -687,7 +703,7 @@ async def get_staking_statistics(session: Session = Depends(get_session)) -> dic
|
||||
return stats
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting staking statistics: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting staking statistics")
|
||||
|
||||
|
||||
# Platform Analytics Endpoints
|
||||
@@ -734,7 +750,7 @@ async def get_platform_overview(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting platform overview: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting platform overview")
|
||||
|
||||
|
||||
@router.get("/health", response_model=dict[str, Any])
|
||||
@@ -773,4 +789,4 @@ async def get_platform_health(session: Session = Depends(get_session)) -> dict[s
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting platform health: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting platform health")
|
||||
|
||||
@@ -709,4 +709,5 @@ async def pricing_health_check(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
return {"status": "unhealthy", "timestamp": datetime.utcnow().isoformat(), "error": str(e)}
|
||||
logger.error(f"Dynamic pricing health check failed: {e}")
|
||||
return {"status": "unhealthy", "timestamp": datetime.utcnow().isoformat(), "error": "Health check failed"}
|
||||
|
||||
@@ -95,9 +95,9 @@ async def create_global_offer(
|
||||
}
|
||||
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Bad request")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error creating global offer: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error creating global offer")
|
||||
|
||||
|
||||
@router.get("/offers", response_model=list[dict[str, Any]])
|
||||
@@ -154,7 +154,7 @@ async def get_global_offers(
|
||||
return response_offers
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting global offers: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting global offers")
|
||||
|
||||
|
||||
@router.get("/offers/{offer_id}", response_model=dict[str, Any])
|
||||
@@ -200,7 +200,7 @@ async def get_global_offer(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting global offer: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting global offer")
|
||||
|
||||
|
||||
# Global Marketplace Transaction Endpoints
|
||||
@@ -266,9 +266,9 @@ async def create_global_transaction(
|
||||
}
|
||||
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Bad request")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error creating global transaction: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error creating global transaction")
|
||||
|
||||
|
||||
@router.get("/transactions", response_model=list[dict[str, Any]])
|
||||
@@ -321,7 +321,7 @@ async def get_global_transactions(
|
||||
return response_transactions
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting global transactions: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting global transactions")
|
||||
|
||||
|
||||
@router.get("/transactions/{transaction_id}", response_model=dict[str, Any])
|
||||
@@ -371,7 +371,7 @@ async def get_global_transaction(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting global transaction: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting global transaction")
|
||||
|
||||
|
||||
# Region Management Endpoints
|
||||
@@ -422,7 +422,7 @@ async def get_regions(
|
||||
return response_regions
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting regions: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting regions")
|
||||
|
||||
|
||||
@router.get("/regions/{region_code}/health", response_model=dict[str, Any])
|
||||
@@ -438,7 +438,7 @@ async def get_region_health(
|
||||
return health_data
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting region health: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting region health")
|
||||
|
||||
|
||||
@router.post("/regions/{region_code}/health", response_model=dict[str, Any])
|
||||
@@ -463,7 +463,7 @@ async def update_region_health(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error updating region health: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error updating region health")
|
||||
|
||||
|
||||
# Analytics Endpoints
|
||||
@@ -517,7 +517,7 @@ async def get_marketplace_analytics(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting marketplace analytics: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting marketplace analytics")
|
||||
|
||||
|
||||
# Configuration Endpoints
|
||||
@@ -550,7 +550,7 @@ async def get_global_marketplace_config(
|
||||
return config_dict
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting configuration: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting configuration")
|
||||
|
||||
|
||||
# Health and Status Endpoints
|
||||
@@ -612,4 +612,4 @@ async def get_global_marketplace_health(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting health status: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting health status")
|
||||
|
||||
@@ -84,9 +84,9 @@ async def create_cross_chain_marketplace_offer(
|
||||
return offer
|
||||
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Bad request")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error creating cross-chain offer: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error creating cross-chain offer")
|
||||
|
||||
|
||||
@router.get("/offers/cross-chain", response_model=list[dict[str, Any]])
|
||||
@@ -117,7 +117,7 @@ async def get_integrated_marketplace_offers(
|
||||
return offers
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting integrated offers: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting integrated offers")
|
||||
|
||||
|
||||
@router.get("/offers/{offer_id}/cross-chain-details", response_model=dict[str, Any])
|
||||
@@ -164,7 +164,7 @@ async def get_cross_chain_offer_details(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting cross-chain offer details: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting cross-chain offer details")
|
||||
|
||||
|
||||
@router.post("/offers/{offer_id}/optimize-pricing", response_model=dict[str, Any])
|
||||
@@ -189,9 +189,9 @@ async def optimize_offer_pricing(
|
||||
return optimization
|
||||
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Bad request")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error optimizing offer pricing: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error optimizing offer pricing")
|
||||
|
||||
|
||||
# Cross-Chain Transaction Endpoints
|
||||
@@ -238,9 +238,9 @@ async def execute_cross_chain_transaction(
|
||||
return transaction
|
||||
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Bad request")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error executing cross-chain transaction: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error executing cross-chain transaction")
|
||||
|
||||
|
||||
@router.get("/transactions/cross-chain", response_model=list[dict[str, Any]])
|
||||
@@ -298,7 +298,7 @@ async def get_cross_chain_transactions(
|
||||
return cross_chain_transactions
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting cross-chain transactions: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting cross-chain transactions")
|
||||
|
||||
|
||||
# Analytics and Monitoring Endpoints
|
||||
@@ -320,7 +320,7 @@ async def get_cross_chain_analytics(
|
||||
return analytics
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting cross-chain analytics: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting cross-chain analytics")
|
||||
|
||||
|
||||
@router.get("/analytics/marketplace-integration", response_model=dict[str, Any])
|
||||
@@ -354,7 +354,7 @@ async def get_marketplace_integration_analytics(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting marketplace integration analytics: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting marketplace integration analytics")
|
||||
|
||||
|
||||
# Configuration and Status Endpoints
|
||||
@@ -398,7 +398,7 @@ async def get_integration_status(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting integration status: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting integration status")
|
||||
|
||||
|
||||
@router.get("/config", response_model=dict[str, Any])
|
||||
@@ -467,7 +467,7 @@ async def get_integration_config(
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting integration config: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting integration config")
|
||||
|
||||
|
||||
@router.post("/config/update", response_model=dict[str, Any])
|
||||
@@ -496,9 +496,9 @@ async def update_integration_config(
|
||||
}
|
||||
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
raise HTTPException(status_code=400, detail="Bad request")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error updating integration config: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error updating integration config")
|
||||
|
||||
|
||||
# Health and Diagnostics Endpoints
|
||||
@@ -519,7 +519,7 @@ async def get_integration_health(
|
||||
health_status["services"]["marketplace_service"] = "healthy"
|
||||
except Exception as e:
|
||||
health_status["services"]["marketplace_service"] = "unhealthy"
|
||||
health_status["issues"].append(f"Marketplace service error: {str(e)}")
|
||||
health_status["issues"].append("Marketplace service error")
|
||||
|
||||
# Check region manager
|
||||
try:
|
||||
@@ -528,7 +528,7 @@ async def get_integration_health(
|
||||
health_status["metrics"]["active_regions"] = len(regions)
|
||||
except Exception as e:
|
||||
health_status["services"]["region_manager"] = "unhealthy"
|
||||
health_status["issues"].append(f"Region manager error: {str(e)}")
|
||||
health_status["issues"].append("Region manager error")
|
||||
|
||||
# Check bridge service
|
||||
if integration_service.bridge_service:
|
||||
@@ -538,7 +538,7 @@ async def get_integration_health(
|
||||
health_status["metrics"]["bridge_requests"] = stats["total_requests"]
|
||||
except Exception as e:
|
||||
health_status["services"]["bridge_service"] = "unhealthy"
|
||||
health_status["issues"].append(f"Bridge service error: {str(e)}")
|
||||
health_status["issues"].append("Bridge service error")
|
||||
|
||||
# Check transaction manager
|
||||
if integration_service.tx_manager:
|
||||
@@ -548,7 +548,7 @@ async def get_integration_health(
|
||||
health_status["metrics"]["transactions"] = stats["total_transactions"]
|
||||
except Exception as e:
|
||||
health_status["services"]["transaction_manager"] = "unhealthy"
|
||||
health_status["issues"].append(f"Transaction manager error: {str(e)}")
|
||||
health_status["issues"].append("Transaction manager error")
|
||||
|
||||
# Determine overall status
|
||||
if health_status["issues"]:
|
||||
@@ -559,7 +559,7 @@ async def get_integration_health(
|
||||
return health_status
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error getting integration health: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error getting integration health")
|
||||
|
||||
|
||||
@router.post("/diagnostics/run", response_model=dict[str, Any])
|
||||
@@ -582,14 +582,14 @@ async def run_integration_diagnostics(
|
||||
await integration_service.marketplace_service.get_global_offers(limit=1)
|
||||
diagnostics["results"]["services"]["marketplace_service"] = {"status": "healthy", "offers_accessible": True}
|
||||
except Exception as e:
|
||||
diagnostics["results"]["services"]["marketplace_service"] = {"status": "unhealthy", "error": str(e)}
|
||||
diagnostics["results"]["services"]["marketplace_service"] = {"status": "unhealthy", "error": "Service error"}
|
||||
|
||||
# Test region manager
|
||||
try:
|
||||
regions = await integration_service.region_manager._get_active_regions()
|
||||
diagnostics["results"]["services"]["region_manager"] = {"status": "healthy", "active_regions": len(regions)}
|
||||
except Exception as e:
|
||||
diagnostics["results"]["services"]["region_manager"] = {"status": "unhealthy", "error": str(e)}
|
||||
diagnostics["results"]["services"]["region_manager"] = {"status": "unhealthy", "error": "Service error"}
|
||||
|
||||
if diagnostic_type == "full" or diagnostic_type == "cross-chain":
|
||||
# Test cross-chain functionality
|
||||
@@ -600,14 +600,15 @@ async def run_integration_diagnostics(
|
||||
stats = await integration_service.bridge_service.get_bridge_statistics(1)
|
||||
diagnostics["results"]["cross_chain"]["bridge_service"] = {"status": "healthy", "statistics": stats}
|
||||
except Exception as e:
|
||||
diagnostics["results"]["cross_chain"]["bridge_service"] = {"status": "unhealthy", "error": str(e)}
|
||||
diagnostics["results"]["cross_chain"]["bridge_service"] = {"status": "unhealthy", "error": "Service error"}
|
||||
|
||||
if integration_service.tx_manager:
|
||||
try:
|
||||
stats = await integration_service.tx_manager.get_transaction_statistics(1)
|
||||
diagnostics["results"]["cross_chain"]["transaction_manager"] = {"status": "healthy", "statistics": stats}
|
||||
except Exception as e:
|
||||
diagnostics["results"]["cross_chain"]["transaction_manager"] = {"status": "unhealthy", "error": str(e)}
|
||||
logger.error(f"Transaction manager error: {e}")
|
||||
diagnostics["results"]["cross_chain"]["transaction_manager"] = {"status": "unhealthy", "error": "Service error"}
|
||||
|
||||
if diagnostic_type == "full" or diagnostic_type == "performance":
|
||||
# Test performance
|
||||
@@ -624,4 +625,4 @@ async def run_integration_diagnostics(
|
||||
return diagnostics
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error running diagnostics: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Error running diagnostics")
|
||||
|
||||
@@ -87,7 +87,7 @@ async def gpu_multimodal_health(session: Annotated[Session, Depends(get_session)
|
||||
"service": "gpu-multimodal",
|
||||
"port": 8010,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Health check failed",
|
||||
}
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ async def gpu_multimodal_deep_health(session: Annotated[Session, Depends(get_ses
|
||||
"memory_usage": "2.1GB",
|
||||
}
|
||||
except Exception as e:
|
||||
cuda_tests["cross_modal_attention"] = {"status": "fail", "error": str(e)}
|
||||
cuda_tests["cross_modal_attention"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test multi-modal fusion
|
||||
try:
|
||||
@@ -126,7 +126,7 @@ async def gpu_multimodal_deep_health(session: Annotated[Session, Depends(get_ses
|
||||
"memory_usage": "1.8GB",
|
||||
}
|
||||
except Exception as e:
|
||||
cuda_tests["multi_modal_fusion"] = {"status": "fail", "error": str(e)}
|
||||
cuda_tests["multi_modal_fusion"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test feature extraction
|
||||
try:
|
||||
@@ -139,7 +139,7 @@ async def gpu_multimodal_deep_health(session: Annotated[Session, Depends(get_ses
|
||||
"memory_usage": "2.5GB",
|
||||
}
|
||||
except Exception as e:
|
||||
cuda_tests["feature_extraction"] = {"status": "fail", "error": str(e)}
|
||||
cuda_tests["feature_extraction"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
return {
|
||||
"status": "healthy" if gpu_info["available"] else "degraded",
|
||||
@@ -162,7 +162,7 @@ async def gpu_multimodal_deep_health(session: Annotated[Session, Depends(get_ses
|
||||
"service": "gpu-multimodal",
|
||||
"port": 8010,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Deep health check failed",
|
||||
}
|
||||
|
||||
|
||||
@@ -198,4 +198,4 @@ async def check_gpu_availability() -> dict[str, Any]:
|
||||
return {"available": False, "error": "GPU not detected or nvidia-smi failed"}
|
||||
|
||||
except Exception as e:
|
||||
return {"available": False, "error": str(e)}
|
||||
return {"available": False, "error": "GPU check failed"}
|
||||
|
||||
@@ -99,7 +99,7 @@ async def marketplace_enhanced_health(session: Annotated[Session, Depends(get_se
|
||||
"service": "marketplace-enhanced",
|
||||
"port": 8002,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Health check failed",
|
||||
}
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ async def marketplace_enhanced_deep_health(session: Annotated[Session, Depends(g
|
||||
"success_rate": "100%",
|
||||
}
|
||||
except Exception as e:
|
||||
feature_tests["nft_minting"] = {"status": "fail", "error": str(e)}
|
||||
feature_tests["nft_minting"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test royalty calculations
|
||||
try:
|
||||
@@ -134,7 +134,7 @@ async def marketplace_enhanced_deep_health(session: Annotated[Session, Depends(g
|
||||
"supported_tiers": ["basic", "premium", "enterprise"],
|
||||
}
|
||||
except Exception as e:
|
||||
feature_tests["royalty_calculation"] = {"status": "fail", "error": str(e)}
|
||||
feature_tests["royalty_calculation"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test license verification
|
||||
try:
|
||||
@@ -145,7 +145,7 @@ async def marketplace_enhanced_deep_health(session: Annotated[Session, Depends(g
|
||||
"validation_accuracy": "100%",
|
||||
}
|
||||
except Exception as e:
|
||||
feature_tests["license_verification"] = {"status": "fail", "error": str(e)}
|
||||
feature_tests["license_verification"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test trading execution
|
||||
try:
|
||||
@@ -156,7 +156,7 @@ async def marketplace_enhanced_deep_health(session: Annotated[Session, Depends(g
|
||||
"success_rate": "100%",
|
||||
}
|
||||
except Exception as e:
|
||||
feature_tests["trading_execution"] = {"status": "fail", "error": str(e)}
|
||||
feature_tests["trading_execution"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test analytics generation
|
||||
try:
|
||||
@@ -167,7 +167,7 @@ async def marketplace_enhanced_deep_health(session: Annotated[Session, Depends(g
|
||||
"accuracy": "98%",
|
||||
}
|
||||
except Exception as e:
|
||||
feature_tests["analytics_generation"] = {"status": "fail", "error": str(e)}
|
||||
feature_tests["analytics_generation"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
return {
|
||||
"status": "healthy",
|
||||
@@ -185,5 +185,5 @@ async def marketplace_enhanced_deep_health(session: Annotated[Session, Depends(g
|
||||
"service": "marketplace-enhanced",
|
||||
"port": 8002,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Deep health check failed",
|
||||
}
|
||||
|
||||
@@ -328,7 +328,7 @@ async def release_gpu(gpu_id: str, session: Annotated[Session, Depends(get_sessi
|
||||
refund = booking.total_cost * 0.5
|
||||
booking.status = "cancelled"
|
||||
except AttributeError as e:
|
||||
print(f"Warning: Booking missing attribute: {e}")
|
||||
logger.warning(f"Booking missing attribute: {e}")
|
||||
refund = 0.0
|
||||
|
||||
gpu.status = "available"
|
||||
|
||||
@@ -172,7 +172,7 @@ async def list_miner_jobs(
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Error listing miner jobs: {e}")
|
||||
return {"jobs": [], "total": 0, "limit": limit, "offset": offset, "miner_id": miner_id, "error": str(e)}
|
||||
return {"jobs": [], "total": 0, "limit": limit, "offset": offset, "miner_id": miner_id, "error": "Failed to list jobs"}
|
||||
|
||||
|
||||
@router.post("/miners/{miner_id}/earnings", summary="Get miner earnings")
|
||||
|
||||
@@ -87,7 +87,7 @@ async def modality_optimization_health(session: Annotated[Session, Depends(get_s
|
||||
"service": "modality-optimization",
|
||||
"port": 8004,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Health check failed",
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ async def modality_optimization_deep_health(session: Annotated[Session, Depends(
|
||||
"accuracy_retention": "97%",
|
||||
}
|
||||
except Exception as e:
|
||||
optimization_tests["text"] = {"status": "fail", "error": str(e)}
|
||||
optimization_tests["text"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test image optimization
|
||||
try:
|
||||
@@ -120,7 +120,7 @@ async def modality_optimization_deep_health(session: Annotated[Session, Depends(
|
||||
"accuracy_retention": "94%",
|
||||
}
|
||||
except Exception as e:
|
||||
optimization_tests["image"] = {"status": "fail", "error": str(e)}
|
||||
optimization_tests["image"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test audio optimization
|
||||
try:
|
||||
@@ -131,7 +131,7 @@ async def modality_optimization_deep_health(session: Annotated[Session, Depends(
|
||||
"accuracy_retention": "96%",
|
||||
}
|
||||
except Exception as e:
|
||||
optimization_tests["audio"] = {"status": "fail", "error": str(e)}
|
||||
optimization_tests["audio"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test video optimization
|
||||
try:
|
||||
@@ -142,7 +142,7 @@ async def modality_optimization_deep_health(session: Annotated[Session, Depends(
|
||||
"accuracy_retention": "93%",
|
||||
}
|
||||
except Exception as e:
|
||||
optimization_tests["video"] = {"status": "fail", "error": str(e)}
|
||||
optimization_tests["video"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
return {
|
||||
"status": "healthy",
|
||||
@@ -162,5 +162,5 @@ async def modality_optimization_deep_health(session: Annotated[Session, Depends(
|
||||
"service": "modality-optimization",
|
||||
"port": 8004,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Deep health check failed",
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ async def monitoring_dashboard() -> dict[str, Any]:
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to generate monitoring dashboard: {e}")
|
||||
return {
|
||||
"error": str(e),
|
||||
"error": "Failed to generate dashboard",
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"services": SERVICES,
|
||||
"overall_status": "error",
|
||||
@@ -136,7 +136,7 @@ async def services_summary() -> dict[str, Any]:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to generate services summary: {e}")
|
||||
return {"error": str(e), "timestamp": datetime.utcnow().isoformat()}
|
||||
return {"error": "Failed to generate summary", "timestamp": datetime.utcnow().isoformat()}
|
||||
|
||||
|
||||
@router.get("/dashboard/metrics", tags=["monitoring"], summary="System Metrics")
|
||||
@@ -184,7 +184,7 @@ async def system_metrics() -> dict[str, Any]:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to collect system metrics: {e}")
|
||||
return {"error": str(e), "timestamp": datetime.utcnow().isoformat()}
|
||||
return {"error": "Failed to collect metrics", "timestamp": datetime.utcnow().isoformat()}
|
||||
|
||||
|
||||
async def collect_all_health_data() -> dict[str, Any]:
|
||||
|
||||
@@ -82,7 +82,7 @@ async def multimodal_health(session: Annotated[Session, Depends(get_session)]) -
|
||||
"service": "multimodal-agent",
|
||||
"port": 8002,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Health check failed",
|
||||
}
|
||||
|
||||
|
||||
@@ -102,28 +102,28 @@ async def multimodal_deep_health(session: Annotated[Session, Depends(get_session
|
||||
# Mock text processing test
|
||||
modality_tests["text"] = {"status": "pass", "processing_time": "0.02s", "accuracy": "92%"}
|
||||
except Exception as e:
|
||||
modality_tests["text"] = {"status": "fail", "error": str(e)}
|
||||
modality_tests["text"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test image processing
|
||||
try:
|
||||
# Mock image processing test
|
||||
modality_tests["image"] = {"status": "pass", "processing_time": "0.15s", "accuracy": "87%"}
|
||||
except Exception as e:
|
||||
modality_tests["image"] = {"status": "fail", "error": str(e)}
|
||||
modality_tests["image"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test audio processing
|
||||
try:
|
||||
# Mock audio processing test
|
||||
modality_tests["audio"] = {"status": "pass", "processing_time": "0.22s", "accuracy": "89%"}
|
||||
except Exception as e:
|
||||
modality_tests["audio"] = {"status": "fail", "error": str(e)}
|
||||
modality_tests["audio"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test video processing
|
||||
try:
|
||||
# Mock video processing test
|
||||
modality_tests["video"] = {"status": "pass", "processing_time": "0.35s", "accuracy": "85%"}
|
||||
except Exception as e:
|
||||
modality_tests["video"] = {"status": "fail", "error": str(e)}
|
||||
modality_tests["video"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
return {
|
||||
"status": "healthy",
|
||||
@@ -141,5 +141,5 @@ async def multimodal_deep_health(session: Annotated[Session, Depends(get_session
|
||||
"service": "multimodal-agent",
|
||||
"port": 8002,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Deep health check failed",
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ async def detailed_health():
|
||||
}
|
||||
}
|
||||
except Exception as e:
|
||||
return {"status": "error", "error": str(e)}
|
||||
return {"status": "error", "error": "Failed to get status"}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -96,7 +96,7 @@ async def openclaw_enhanced_health(session: Annotated[Session, Depends(get_sessi
|
||||
"service": "openclaw-enhanced",
|
||||
"port": 8007,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Health check failed",
|
||||
}
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ async def openclaw_enhanced_deep_health(session: Annotated[Session, Depends(get_
|
||||
"success_rate": "100%",
|
||||
}
|
||||
except Exception as e:
|
||||
feature_tests["agent_orchestration"] = {"status": "fail", "error": str(e)}
|
||||
feature_tests["agent_orchestration"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test edge deployment
|
||||
try:
|
||||
@@ -131,7 +131,7 @@ async def openclaw_enhanced_deep_health(session: Annotated[Session, Depends(get_
|
||||
"geographic_coverage": "global",
|
||||
}
|
||||
except Exception as e:
|
||||
feature_tests["edge_deployment"] = {"status": "fail", "error": str(e)}
|
||||
feature_tests["edge_deployment"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test hybrid execution
|
||||
try:
|
||||
@@ -142,7 +142,7 @@ async def openclaw_enhanced_deep_health(session: Annotated[Session, Depends(get_
|
||||
"cost_reduction": "40%",
|
||||
}
|
||||
except Exception as e:
|
||||
feature_tests["hybrid_execution"] = {"status": "fail", "error": str(e)}
|
||||
feature_tests["hybrid_execution"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Test ecosystem development
|
||||
try:
|
||||
@@ -153,7 +153,7 @@ async def openclaw_enhanced_deep_health(session: Annotated[Session, Depends(get_
|
||||
"documentation": "comprehensive",
|
||||
}
|
||||
except Exception as e:
|
||||
feature_tests["ecosystem_development"] = {"status": "fail", "error": str(e)}
|
||||
feature_tests["ecosystem_development"] = {"status": "fail", "error": "Test failed"}
|
||||
|
||||
# Check edge computing status
|
||||
edge_status = await check_edge_computing_status()
|
||||
@@ -179,7 +179,7 @@ async def openclaw_enhanced_deep_health(session: Annotated[Session, Depends(get_
|
||||
"service": "openclaw-enhanced",
|
||||
"port": 8007,
|
||||
"timestamp": datetime.utcnow().isoformat(),
|
||||
"error": str(e),
|
||||
"error": "Deep health check failed",
|
||||
}
|
||||
|
||||
|
||||
@@ -209,4 +209,4 @@ async def check_edge_computing_status() -> dict[str, Any]:
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
return {"available": False, "error": str(e)}
|
||||
return {"available": False, "error": "Edge check failed"}
|
||||
|
||||
@@ -384,7 +384,7 @@ class AdaptiveLearningService:
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create learning environment {environment_id}: {e}")
|
||||
logger.error("Failed to create learning environment: %s", e)
|
||||
raise
|
||||
|
||||
async def create_learning_agent(
|
||||
@@ -407,7 +407,7 @@ class AdaptiveLearningService:
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create learning agent {agent_id}: {e}")
|
||||
logger.error("Failed to create learning agent: %s", e)
|
||||
raise
|
||||
|
||||
async def train_agent(self, agent_id: str, environment_id: str, training_config: dict[str, Any]) -> dict[str, Any]:
|
||||
|
||||
@@ -583,7 +583,7 @@ class AdvancedReinforcementLearningEngine:
|
||||
# Start training process
|
||||
asyncio.create_task(self.train_rl_agent(session, config_id))
|
||||
|
||||
logger.info(f"Created RL agent {config_id} with algorithm {algorithm}")
|
||||
logger.info("Created RL agent with algorithm %s", algorithm)
|
||||
return rl_config
|
||||
|
||||
async def train_rl_agent(self, session: Session, config_id: str) -> dict[str, Any]:
|
||||
@@ -1340,7 +1340,7 @@ class MarketplaceStrategyOptimizer:
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error deploying strategy {config_id}: {str(e)}")
|
||||
logger.error("Error deploying strategy: %s", e)
|
||||
raise
|
||||
|
||||
def simulate_deployment_performance(
|
||||
|
||||
@@ -258,7 +258,7 @@ class AgentIntegrationManager:
|
||||
return integration_result
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"ZK integration failed for execution {execution_id}: {e}")
|
||||
logger.error("ZK integration failed: %s", e)
|
||||
await self.auditor.log_event(
|
||||
AuditEventType.VERIFICATION_FAILED,
|
||||
execution_id=execution_id,
|
||||
|
||||
@@ -139,4 +139,8 @@ def get_wallet_info() -> dict[str, any]:
|
||||
if __name__ == "__main__":
|
||||
# Test the wallet integration
|
||||
info = get_wallet_info()
|
||||
print(json.dumps(info, indent=2))
|
||||
# Mask sensitive data before printing
|
||||
masked_info = info.copy()
|
||||
if 'config' in masked_info and 'rpc_password' in masked_info['config']:
|
||||
masked_info['config']['rpc_password'] = '***'
|
||||
print(json.dumps(masked_info, indent=2))
|
||||
|
||||
@@ -3,6 +3,7 @@ Blockchain service for AITBC token operations
|
||||
"""
|
||||
|
||||
import logging
|
||||
import re
|
||||
|
||||
import httpx
|
||||
|
||||
@@ -12,6 +13,23 @@ from ..config import settings
|
||||
|
||||
BLOCKCHAIN_RPC = "http://127.0.0.1:9080/rpc"
|
||||
|
||||
# Basic validation for blockchain addresses (alphanumeric, common prefixes)
|
||||
ADDRESS_PATTERN = re.compile(r'^[a-zA-Z0-9]{20,50}$')
|
||||
|
||||
|
||||
def validate_address(address: str) -> bool:
|
||||
"""Validate that address is safe to use in URL construction"""
|
||||
if not address:
|
||||
return False
|
||||
# Check for path traversal or URL manipulation
|
||||
if any(char in address for char in ['/', '\\', '..', '\n', '\r', '\t']):
|
||||
return False
|
||||
# Check for URL-like patterns
|
||||
if address.startswith(('http://', 'https://', 'ftp://')):
|
||||
return False
|
||||
# Validate against address pattern
|
||||
return bool(ADDRESS_PATTERN.match(address))
|
||||
|
||||
|
||||
async def mint_tokens(address: str, amount: float) -> dict:
|
||||
"""Mint AITBC tokens to an address"""
|
||||
@@ -32,6 +50,10 @@ async def mint_tokens(address: str, amount: float) -> dict:
|
||||
def get_balance(address: str) -> float | None:
|
||||
"""Get AITBC balance for an address"""
|
||||
|
||||
if not validate_address(address):
|
||||
logger.error("Invalid address format")
|
||||
return None
|
||||
|
||||
try:
|
||||
with httpx.Client() as client:
|
||||
response = client.get(
|
||||
|
||||
@@ -375,7 +375,7 @@ class GlobalMarketplaceService:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting region health for {region_code}: {e}")
|
||||
return {"status": "error", "error": str(e)}
|
||||
return {"status": "error", "error": "Failed to get region health"}
|
||||
|
||||
async def _get_recent_analytics(self, region: str, hours: int = 24) -> dict[str, Any]:
|
||||
"""Get recent analytics for a region"""
|
||||
|
||||
@@ -40,7 +40,7 @@ def get_pg_connection():
|
||||
host=parsed.hostname or "localhost",
|
||||
database=parsed.path[1:] if parsed.path else "aitbc_coordinator",
|
||||
user=parsed.username or "aitbc_user",
|
||||
password=parsed.password or "aitbc_password",
|
||||
password=parsed.password,
|
||||
port=parsed.port or 5432,
|
||||
cursor_factory=RealDictCursor,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user