feat(bitdefender): complete Companies module (build-out 2/N)
- Completed Companies module for bitdefender GravityZone Public API - Implemented: getCompanyDetails, getCompanyDetailsByUser, createCompany, suspendCompany, activateCompany, deleteCompany - Discovered updateCompany and getCompaniesList not available; companies retrieved via network inventory - Company types: 0=Partner, 1=Customer; createCompany accepts nested licenseSubscription via JSON passthrough - All write operations require --confirm; raw also restricts createCompany/suspendCompany/activateCompany - selftest 49 -> 55 passing Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -254,6 +254,61 @@ class GravityZoneClient:
|
||||
def get_own_company(self) -> dict:
|
||||
return self._jsonrpc_request("companies", "getCompanyDetails", {}) or {}
|
||||
|
||||
def get_company_details(self, company_id: Optional[str] = None) -> dict:
|
||||
"""Company detail (companies.getCompanyDetails). No id ⇒ own company."""
|
||||
params: dict = {}
|
||||
if company_id:
|
||||
params["companyId"] = company_id
|
||||
return self._jsonrpc_request("companies", "getCompanyDetails", params) or {}
|
||||
|
||||
def get_company_by_user(self, username: str) -> dict:
|
||||
"""Company that owns a given user (companies.getCompanyDetailsByUser)."""
|
||||
return self._jsonrpc_request(
|
||||
"companies", "getCompanyDetailsByUser", {"username": username}
|
||||
) or {}
|
||||
|
||||
def create_company(
|
||||
self,
|
||||
company_type: int,
|
||||
name: str,
|
||||
parent_id: Optional[str] = None,
|
||||
extra: Optional[dict] = None,
|
||||
) -> Any:
|
||||
"""Create a company (companies.createCompany). STATE-CHANGING.
|
||||
|
||||
Required (verified): `type` (0=Partner, 1=Customer) and `name`. Documented
|
||||
optional params: parentId, address, country, state, phone, industry,
|
||||
canBeManagedByAbove, assignedProductType, and a nested `licenseSubscription`
|
||||
{type (3=monthly subscription, 4=monthly trial), reservedSlots,
|
||||
endSubscription, autoRenewPeriod, ...}. Pass those via `extra`. Gate at
|
||||
the call site behind --confirm.
|
||||
Docs: bitdefender.com/business/support/en/77211-126236-createcompany.html
|
||||
"""
|
||||
params: dict = {"type": company_type, "name": name}
|
||||
if parent_id is not None:
|
||||
params["parentId"] = parent_id
|
||||
if extra:
|
||||
params.update(extra)
|
||||
return self._jsonrpc_request("companies", "createCompany", params)
|
||||
|
||||
def suspend_company(self, company_id: str) -> Any:
|
||||
"""Suspend a company (companies.suspendCompany). STATE-CHANGING. Gated."""
|
||||
return self._jsonrpc_request(
|
||||
"companies", "suspendCompany", {"companyId": company_id}
|
||||
)
|
||||
|
||||
def activate_company(self, company_id: str) -> Any:
|
||||
"""Activate a suspended company (companies.activateCompany). STATE-CHANGING."""
|
||||
return self._jsonrpc_request(
|
||||
"companies", "activateCompany", {"companyId": company_id}
|
||||
)
|
||||
|
||||
def delete_company(self, company_id: str) -> Any:
|
||||
"""Delete a company (companies.deleteCompany). STATE-CHANGING. Gated."""
|
||||
return self._jsonrpc_request(
|
||||
"companies", "deleteCompany", {"companyId": company_id}
|
||||
)
|
||||
|
||||
def list_companies(self, page: int = 1, per_page: int = 100) -> dict:
|
||||
result = self._jsonrpc_request(
|
||||
"network",
|
||||
|
||||
Reference in New Issue
Block a user