ai-code-scanner-ui / api_client.py
mubi-613's picture
Initial clean commit: Fixed security issues and removed heavy checkpoints
168ae1c
Raw
History Blame Contribute Delete
4.07 kB
# Test client for the FastAPI backend
import requests
import json
import time
class CodeScannerClient:
def __init__(self, base_url="http://localhost:8000"):
self.base_url = base_url
def health_check(self):
# Check if API is running
try:
response = requests.get(f"{self.base_url}/health")
return response.json()
except requests.exceptions.ConnectionError:
return {"status": "error", "message": "API not reachable"}
def analyze_code(self, code: str, mode="combined", detailed=False):
# Analyze a single code snippet
payload = {
"code": code,
"analysis_mode": mode,
"detailed": detailed
}
start_time = time.time()
response = requests.post(
f"{self.base_url}/analyze",
json=payload
)
response_time = time.time() - start_time
if response.status_code == 200:
result = response.json()
result["response_time"] = response_time
return result
else:
return {
"error": f"API error: {response.status_code}",
"details": response.text
}
def analyze_file(self, filepath: str):
# Analyze code from a file
with open(filepath, 'r') as f:
code = f.read()
return self.analyze_code(code)
def batch_analyze(self, code_list: list, mode="combined"):
# Analyze multiple code snippets
payload = {
"files": code_list,
"analysis_mode": mode
}
response = requests.post(
f"{self.base_url}/analyze/batch",
json=payload
)
if response.status_code == 200:
return response.json()
else:
return {"error": f"API error: {response.status_code}"}
def upload_file(self, filepath: str):
# Upload and analyze a file
with open(filepath, 'rb') as f:
files = {'file': (filepath, f, 'text/python')}
response = requests.post(
f"{self.base_url}/analyze/file",
files=files
)
if response.status_code == 200:
return response.json()
else:
return {"error": f"Upload error: {response.status_code}"}
# Example usage
if __name__ == "__main__":
client = CodeScannerClient()
print("🔍 Testing API Client")
print("="*50)
# 1. Health check
print("1. Health check:")
health = client.health_check()
print(f" Status: {health.get('status')}")
# 2. Analyze vulnerable code
print("\n2. Analyzing vulnerable code:")
vulnerable_code = """def get_user(user_id):\n query = f"SELECT * FROM users WHERE id = {user_id}"\n return query"""
result = client.analyze_code(vulnerable_code, detailed=True)
print(f" Security Score: {result.get('security_score')}")
print(f" Issues Found: {result.get('issues_count')}")
print(f" Response Time: {result.get('response_time', 0):.3f}s")
# 3. Analyze safe code
print("\n3. Analyzing safe code:")
safe_code = """def get_user(user_id):\n query = "SELECT * FROM users WHERE id = %s"\n return execute_query(query, (user_id,))"""
result = client.analyze_code(safe_code)
print(f" Security Score: {result.get('security_score')}")
print(f" Issues Found: {result.get('issues_count')}")
# 4. Batch analysis
print("\n4. Testing batch analysis:")
batch_codes = [vulnerable_code, safe_code]
batch_result = client.batch_analyze(batch_codes)
if "results" in batch_result:
print(f" Processed {len(batch_result['results'])} files")
print(f" Average Score: {batch_result['summary'].get('average_security_score', 0):.1f}")
print("\n✅ API Client Test Complete!")
print(f"\n📚 API Documentation available at: http://localhost:8000/docs")