feat: add Bitdefender GravityZone integration module
Adds full GravityZone API integration to ClaudeTools. Key additions: - api/services/gravityzone_service.py: JSON-RPC client with Basic auth, methods for company/endpoint/quarantine/licensing data, and security_sweep which paginates all endpoints, enriches with malware/agent status, and sorts infected > outdated > clean - api/schemas/gravityzone.py: Pydantic response models for all endpoints - api/routers/gravityzone.py: 7 REST endpoints at /api/gravityzone/*, JWT-protected, returns 502 on downstream GZ errors - api/config.py: GRAVITYZONE_API_KEY + GRAVITYZONE_API_BASE_URL settings - api/main.py: router registered under /api/gravityzone Vault entry: msp-tools/gravityzone.sops.yaml (partner-level key, 14 modules) Server .env updated, ticktick router synced, service restarted and verified. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
52
api/schemas/gravityzone.py
Normal file
52
api/schemas/gravityzone.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class GZEndpointItem(BaseModel):
|
||||
id: str
|
||||
name: str
|
||||
fqdn: Optional[str] = None
|
||||
ip: Optional[str] = None
|
||||
os_version: Optional[str] = None
|
||||
is_managed: bool
|
||||
policy_name: Optional[str] = None
|
||||
|
||||
|
||||
class GZEndpointDetail(BaseModel):
|
||||
id: str
|
||||
name: str
|
||||
company_id: Optional[str] = None
|
||||
infected: bool
|
||||
detection_active: bool
|
||||
signature_outdated: bool
|
||||
product_outdated: bool
|
||||
agent_version: Optional[str] = None
|
||||
engine_version: Optional[str] = None
|
||||
last_seen: Optional[str] = None
|
||||
last_update: Optional[str] = None
|
||||
state: int
|
||||
modules: Optional[dict] = None
|
||||
|
||||
|
||||
class GZCompanyItem(BaseModel):
|
||||
id: str
|
||||
name: str
|
||||
type: int
|
||||
|
||||
|
||||
class GZSweepResult(BaseModel):
|
||||
total: int
|
||||
infected: int
|
||||
signature_outdated: int
|
||||
product_outdated: int
|
||||
not_seen_recently: int
|
||||
endpoints: list[dict]
|
||||
|
||||
|
||||
class GZStatusResponse(BaseModel):
|
||||
enabled_apis: list[str]
|
||||
key_created_at: Optional[str] = None
|
||||
used_slots: Optional[int] = None
|
||||
total_slots: Optional[int] = None
|
||||
expiry_date: Optional[str] = None
|
||||
Reference in New Issue
Block a user