Client and manager helpers for CyberLicensing
Project description
CyberLicensing Python SDK
Client and manager helpers for integrating public validation flows and project operations with the CyberLicensing API.
License client – validates license keys, collects environment metadata and lets end-users update client_editable fields.
Manager client – handles authentication plus CRUD operations for projects, metadata schemas and licenses.
Environment helpers – gather HWID, local/public IPs and other contextual information in one call.
The SDK targets Python 3.9+ and is published to PyPI as cyberlicensing.
Installation
pip install cyberlicensing
Quick start
Validate a license key
from cyberlicensing import LicenseClient
client = LicenseClient(
base_url="https://licensing.showdown.boo",
project_id=42,
)
# Automatically collects HWID, LAN/public IP, etc.
result = client.validate_with_environment("CL-XXXX-XXXX")
print(result)
To control the payload manually, call validate_license and pass hwid, ip, and metadata yourself. The metadata must only contain fields that are marked client_editable in your project schema.
Manage projects and licenses
from cyberlicensing import ManagerClient
manager = ManagerClient(base_url="https://licensing.showdown.boo")
manager.authenticate("automation_bot", api_key="sk_live_XXXXXXXXXXXXXXXX")
# Create project and create license
project = manager.create_project(
name="My Awesome App",
description="Tooling pour la communauté",
)
license_data = manager.create_license(
project_id=project["id"],
days_valid=30,
metadata={"plan": "pro"},
)
# Revoke a license
manager.update_license(
license_id=license_data["id"],
is_active=False,
metadata={"plan": "revoked", "notes": "Chargeback"},
)
# Update a license
manager.update_license(
license_id=license_data["id"],
metadata={"plan": "enterprise", "notes": "Upgraded"},
)
# Delegate day-to-day operations to another teammate
manager.add_project_manager(project_id=project["id"], username="support_team")
More helpers are exposed for listing projects/licenses, extending expirations, resetting HWIDs, or deleting keys entirely.
API key management
Automations or SDKs can provision scoped API keys and rotate them without touching end-user credentials.
manager = ManagerClient(base_url="https://licensing.showdown.boo")
manager.authenticate("admin", password="password")
# Create a key limited to a project (secret is returned once)
api_key = manager.create_api_key(
label="CI Runner",
project_ids=[project["id"]],
allow_all_projects=False,
)
# Update its scopes or friendly label
manager.update_api_key(
api_key_id=api_key["id"],
project_ids=[project["id"], 7],
)
# Dashboard helper: only show keys relevant to a project
manager.list_project_api_keys(project_id=project["id"])
# Cleanup when the automation is retired
manager.delete_api_key(api_key_id=api_key["id"])
Use manager.list_api_keys() to render an operator-wide view (active + revoked keys).
Client-editable metadata workflow
Certain metadata fields can be safely mutated by the end-user thanks to the client_editable flag defined in the project schema.
- Manager defines the schema:
from cyberlicensing import ManagerClient
manager = ManagerClient(base_url="https://licensing.showdown.boo")
manager.authenticate("admin", "password")
manager.update_metadata_schema(
project_id=42,
fields=[
{"name": "notes", "type": "string", "client_editable": True},
{"name": "plan", "type": "string", "client_editable": False},
],
)
- Client updates the editable fields:
from cyberlicensing import LicenseClient
client = LicenseClient(base_url="https://licensing.showdown.boo", project_id=42)
client.update_client_metadata(
key="CL-XXXX-XXXX",
metadata={"notes": "Nouvelle machine"},
)
update_client_metadata validates locally that project_id is an int and the metadata dictionary is non-empty before calling POST /api/client_metadata. Server responses bubble up any JSON msg errors through ApiError for easier debugging (e.g., non editable field, inactive key, etc.).
Environment helpers
from cyberlicensing import collect_environment_metadata
print(collect_environment_metadata())
The helper returns HWID, hostname, LAN IP, optional public IP, and other useful attributes. Use it to enrich validate_license calls or to store telemetry on validated machines.
Error handling
ApiError(status_code, message, payload)– raised when the API returns HTTP ≥ 400. Themessagewill prefer the backendmsgproperty if present.AuthenticationError– surfaces authentication/authorization issues in manager flows.CyberLicensingError– base class for all SDK exceptions for easy broad exception handling.
from cyberlicensing import ApiError
try:
client.validate_license("INVALID")
except ApiError as exc:
print(exc.status_code, exc)
print(exc.payload)
Local development
python -m venv .venv
.venv\Scripts\activate
pip install -e .
python -m build
Additional helpers:
list_licenses(project_id)– list all licenses (keys + live metadata and usage counters) for a projectcreate_license(project_id, days_valid=None, metadata=None)– generate a new license keyupdate_license(license_id, is_active=None, expires_at=None, reset_hwid=False, metadata=None)– ban/disable, move expiration, reset HWID, or overwrite metadataextend_license(project_id, license_id, days)– convenience method to push expiration forwarddelete_license(license_id)– hard-delete a keyadd_project_manager(project_id, username)– delegate back-office access to teammatescreate_api_key(label, project_ids=None, allow_all_projects=False)– mint scoped API keys from the dashboardupdate_api_key(api_key_id, ...)/delete_api_key(api_key_id)– rotate or revoke keys instantlylist_api_keys()/list_project_api_keys(project_id)– audit keys globally or per project
Environment helpers
from cyberlicensing import collect_environment_metadata
print(collect_environment_metadata())
Returns HWID, hostname, LAN IP, and (if available) public IP.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cyberlicensing-0.2.8.tar.gz.
File metadata
- Download URL: cyberlicensing-0.2.8.tar.gz
- Upload date:
- Size: 9.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b523faa666c88def749c1bff11a5c40a6d7cfaf6be30bea2564d75f64bf8bf2c
|
|
| MD5 |
b2c8e63a6b112913f0fa1c174e744ac2
|
|
| BLAKE2b-256 |
3c53ca499317277e79d6b9d63f96f9ca97ff6eaba4073f4ec6a96b8e661385ef
|
File details
Details for the file cyberlicensing-0.2.8-py3-none-any.whl.
File metadata
- Download URL: cyberlicensing-0.2.8-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a49323598d1908d8c904c22e5cec7cbc1362b38748e4f2a2d0dec63d95b72b42
|
|
| MD5 |
1807b8f65f41ff3f4b16090081ede52e
|
|
| BLAKE2b-256 |
23f5e1477f09ec47a22a0e8e286bf6595d166426bf3cb8d272d18eb310947fbe
|