Modo offline con .dat

DevKanan permite que tus apps funcionen sin internet usando archivos .dat firmados con RSA. Hay dos escenarios típicos:

Escenario A: Activación online → uso offline después

El cliente tiene internet la primera vez. Tu app activa contra el servidor, guarda el .dat firmado, y después puede funcionar offline.

from devkanan import Key, LicenseKey, Helpers
from pathlib import Path

LICENSE_FILE = Path("license.dat")

# Si ya hay .dat, validar offline (sin internet)
if LICENSE_FILE.exists():
    lk = LicenseKey.load_from_string(
        RSA_PUB_KEY,
        LICENSE_FILE.read_text(encoding="utf-8-sig"),
        max_age_days=7,  # re-validar online cada 7 días
    )
    if lk and lk.is_on_right_machine(Helpers.GetMachineCode(v=2)):
        start_app()
        exit()

# Primera vez o .dat caducó: activar online
result, msg = Key.activate(
    token=ACCESS_TOKEN, rsa_pub_key=RSA_PUB_KEY,
    product_id=100000, key="ABCD-...",
    machine_code=Helpers.GetMachineCode(v=2),
)

if result is None:
    print(f"Activación falló: {msg}")
    exit(1)

# Guardar para próximas ejecuciones
LICENSE_FILE.write_text(json.dumps(result_full_response))
start_app()

Escenario B: 1 PC offline sin internet jamás

El admin genera un .dat desde el panel para el machine code del cliente, lo entrega físicamente. La app nunca toca el servidor.

En el panel

  1. Cliente envía su machine code (lo obtiene corriendo un programa pequeño tuyo con Helpers.GetMachineCode(v=2))
  2. En la licencia: Registrar máquina con ese código
  3. Generar archivo offline (.dat) y descarga
  4. Envías el .dat por email / USB al cliente

En la app del cliente

from devkanan import LicenseKey, Helpers

with open("license.dat", encoding="utf-8-sig") as f:
    lk = LicenseKey.load_from_string(RSA_PUB_KEY, f.read(), max_age_days=0)

if not lk or not lk.is_on_right_machine(Helpers.GetMachineCode(v=2)):
    print("Licencia inválida")
    exit(1)

max_age_days=0 significa "sin chequeo de freshness" — el .dat vale hasta su fecha de expiración.

DevKanan Server (on-premise proxy)

Para clientes corporativos sin internet en su red, instalas el DevKananServer localmente. Sirve .dat a las apps clientes y maneja floating seats automáticamente. Ver self-hosted.