From ea04afe3988ccbf9baaea929aa48af909e9ecf95 Mon Sep 17 00:00:00 2001 From: NguyenND Date: Fri, 22 May 2026 17:32:34 -0400 Subject: [PATCH] 05/22 Update license_service.py with public key --- app/services/license_service.py | 35 +++++++-------------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/app/services/license_service.py b/app/services/license_service.py index b4e02ad..42c2d8e 100644 --- a/app/services/license_service.py +++ b/app/services/license_service.py @@ -1,30 +1,5 @@ """ TechDesk License Service — offline RSA-signed key validation. - -Key format: TDESK-. - - payload_b64 = base64url( UTF-8 JSON bytes ) - signature_b64 = base64url( RSA-SHA256 signature of those bytes ) - -JSON payload fields: - customer — company name - email — contact email - tier — "community" | "business" | "enterprise" - issued_at — ISO date (YYYY-MM-DD) - expires_at — ISO date (YYYY-MM-DD) - -The public key below is the matching counterpart to the private key in -license_server/private_key.pem. Replace the placeholder with the real key -after running license_server/generate_keys.py for the first time. - -Public key replacement steps: - 1. cd license_server && python generate_keys.py - 2. Copy the full contents of license_server/public_key.pem - 3. Replace the PUBLIC_KEY_PEM constant below with the copied text - 4. Restart the TechDesk app - -The public key can only verify signatures — it cannot forge them. -It is safe to embed in the application and ship to customers. """ import base64 @@ -34,10 +9,14 @@ from datetime import date, datetime logger = logging.getLogger(__name__) -# ── Replace this with the output of license_server/generate_keys.py ────────── -# After running generate_keys.py, copy the full contents of public_key.pem here. PUBLIC_KEY_PEM = """-----BEGIN PUBLIC KEY----- -REPLACE_WITH_REAL_PUBLIC_KEY_FROM_license_server/generate_keys.py +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxAMwjewlFaHpP+e69jM8 +2I630u4B66kHcnqen2bxK65CZxvTBlLy2k/sm4zVVFyX0nf/9bDDio0UUTJrKWsp +kWV91Ag6FbvMgiJixfg5cZmpOd/abMs2OXAT/GZY+TLoszduchLLbkZjfDlhJzlt +D0MmAU9IY+zm9kW/YLWujFE37CFAfMLkDasQ7ZKKqjzQH6jOi8MoccI5zk8GlpoA +zlppk4dyQejmVDIXItg/0WVxaUa26tFafpU1RROlOKsw1lFXlWRQkc/uuJCdM943 +PX0y1ZCCoNuOKofTIeBT506V7oM4g0rHGmD7esQJsz2S5E2rLetyLwcMKNjzo4a4 +dwIDAQAB -----END PUBLIC KEY-----""" # ── Tier → feature set mapping ───────────────────────────────────────────────