Files
tesm/packages/tesm-licensing/src/tesm_licensing/__init__.py
T
alientimandClaude Opus 5 64e25bb9ae Nur noch, was zum Installieren und Betreiben von TESM noetig ist
Entfernt: Tests, Architekturdokumentation und die Serverhaelfte des
Lizenzprotokolls. Beides liegt im Entwicklungsrepository alientim/TESM-DEV.

Das Lizenzprotokoll ist geteilt. TESM braucht nur die gemeinsame Haelfte
(tesm-licensing): Lizenzen verifizieren, Status bewerten, Anfragen stellen,
Antworten pruefen. Ausstellen, erneuern, Antworten signieren und
Schluesselerzeugung liegen jetzt in tesm-licensing-server und damit
ausschliesslich beim Lizenzserver -- ein Client soll den Code zum Ausstellen
nicht einmal mitbringen. Nachgeprueft: kein Modul von TESM oder tesm-core
importiert eine der verschobenen Funktionen.

install.sh installiert entsprechend je Anwendung nur die noetigen Pakete und
bricht mit klarer Meldung ab, wenn die verlangte Anwendung nicht im Baum liegt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-02 18:37:11 +02:00

114 lines
2.5 KiB
Python

"""TESM-Lizenzprotokoll -- gemeinsames Paket von TESM und TESM-Lizenzserver.
Im Vorgaengerprojekt lag dieses Modul als handkopierte, byte-identisch zu
haltende ``licensing.py`` in beiden Repos. Jede unabhaengige Aenderung an nur
einer Kopie brach die gegenseitige Signaturpruefung, ohne dass das lokal
auffiel. Hier ist es ein installierbares Paket mit eigener Version -- die
Invariante ist damit strukturell erfuellt statt durch Disziplin.
"""
from __future__ import annotations
from .canonical import (
SIG_CONTEXT_LICENSE,
SIG_CONTEXT_REQUEST,
SIG_CONTEXT_RESPONSE,
canonical_bytes,
decode_code,
encode_code,
sign,
verify,
)
from .errors import (
InvalidLicenseFile,
LicensingError,
ProtocolViolation,
ReplayDetected,
SignatureInvalid,
UntrustedIssuer,
)
from .fingerprint import machine_identity, system_fingerprint
from .license import (
ALL_MODULES,
EXPIRY_WARNING_DAYS,
FORMAT_VERSION,
GRACE_PERIOD_DAYS,
HEARTBEAT_WARNING_DAYS,
LICENSE_ROLES,
LICENSE_TYPE_LABELS,
LICENSE_TYPES,
LIFETIME_EXPIRES_AT,
MODULE_LABELS,
ROLE_LABELS,
TRIAL_DEFAULT_DAYS,
LicenseStatus,
iso,
key_id,
license_status,
parse_iso,
split_bundle,
utcnow,
verify_license,
)
from .protocol import (
ACTIONS,
CLOCK_SKEW_SECONDS,
HEARTBEAT_INTERVAL_SECONDS,
MAX_REPORT_ROWS,
REQUEST_MAX_AGE_SECONDS,
RESPONSE_STATES,
build_client_request,
new_nonce,
verify_master_response,
)
__version__ = "2.0.0"
__all__ = [
"ACTIONS",
"ALL_MODULES",
"CLOCK_SKEW_SECONDS",
"EXPIRY_WARNING_DAYS",
"FORMAT_VERSION",
"GRACE_PERIOD_DAYS",
"HEARTBEAT_INTERVAL_SECONDS",
"HEARTBEAT_WARNING_DAYS",
"InvalidLicenseFile",
"LICENSE_ROLES",
"LICENSE_TYPES",
"LICENSE_TYPE_LABELS",
"LIFETIME_EXPIRES_AT",
"LicenseStatus",
"LicensingError",
"MAX_REPORT_ROWS",
"MODULE_LABELS",
"ProtocolViolation",
"REQUEST_MAX_AGE_SECONDS",
"RESPONSE_STATES",
"ROLE_LABELS",
"ReplayDetected",
"SIG_CONTEXT_LICENSE",
"SIG_CONTEXT_REQUEST",
"SIG_CONTEXT_RESPONSE",
"SignatureInvalid",
"TRIAL_DEFAULT_DAYS",
"UntrustedIssuer",
"build_client_request",
"canonical_bytes",
"decode_code",
"encode_code",
"iso",
"key_id",
"license_status",
"machine_identity",
"new_nonce",
"parse_iso",
"sign",
"split_bundle",
"system_fingerprint",
"utcnow",
"verify",
"verify_license",
"verify_master_response",
]