Skip to main content

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.

  1. 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},
  ],
)
  1. 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. The message will prefer the backend msg property 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 project
  • create_license(project_id, days_valid=None, metadata=None) – generate a new license key
  • update_license(license_id, is_active=None, expires_at=None, reset_hwid=False, metadata=None) – ban/disable, move expiration, reset HWID, or overwrite metadata
  • extend_license(project_id, license_id, days) – convenience method to push expiration forward
  • delete_license(license_id) – hard-delete a key
  • add_project_manager(project_id, username) – delegate back-office access to teammates
  • create_api_key(label, project_ids=None, allow_all_projects=False) – mint scoped API keys from the dashboard
  • update_api_key(api_key_id, ...)/delete_api_key(api_key_id) – rotate or revoke keys instantly
  • list_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

cyberlicensing-0.2.8.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cyberlicensing-0.2.8-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

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

Hashes for cyberlicensing-0.2.8.tar.gz
Algorithm Hash digest
SHA256 b523faa666c88def749c1bff11a5c40a6d7cfaf6be30bea2564d75f64bf8bf2c
MD5 b2c8e63a6b112913f0fa1c174e744ac2
BLAKE2b-256 3c53ca499317277e79d6b9d63f96f9ca97ff6eaba4073f4ec6a96b8e661385ef

See more details on using hashes here.

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

Hashes for cyberlicensing-0.2.8-py3-none-any.whl
Algorithm Hash digest
SHA256 a49323598d1908d8c904c22e5cec7cbc1362b38748e4f2a2d0dec63d95b72b42
MD5 1807b8f65f41ff3f4b16090081ede52e
BLAKE2b-256 23f5e1477f09ec47a22a0e8e286bf6595d166426bf3cb8d272d18eb310947fbe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page