Ciclo de vida del cliente (activación offline, autoservicio)
Este documento describe únicamente el ciclo de vida del lado del cliente: instalación del binario, declaración de máquinas en autoservicio, cuotas, verificación en tiempo de ejecución y cambio entre varias licencias.
Recordatorio importante: el binario SCA NUNCA realiza una llamada HTTP. Toda comunicación servidor ↔ cliente pasa por email + acciones del usuario en el portal web (
www.codefixture.com).
Resumen cronológico (3 fases, en orden)
Fase A — Primera instalación (una vez por cliente)
- Presupuesto y luego facturación — el modelo de precios se comunica bajo petición (
how-we-price.php), no hay autoservicio de pago en línea. - Email de activación enviado en cuanto se crea la cuenta del cliente, para definir su contraseña del portal (enlace firmado, válido 2 horas). Un segundo email «paquete listo» llega en cuanto el operador ha entregado un binario.
- Inicio de sesión en
www.codefixture.com/login.php: email + contraseña, luego un código de conexión de 6 dígitos enviado por email e introducido enotp.php(doble factor sistemático en cada conexión).
Fase B — Para CADA plataforma utilizada (Linux, macOS, Windows…)
- En
/downloads.php, hacer clic en Descargar en la línea de la plataforma deseada. Se recibe un archivo:sca-<version>-<platform>-<id>.tar.gz(Linux)sca-<version>-<platform>-<id>.dmg(macOS)sca-<version>-<platform>-<id>.zip(Windows)
- Verificar el SHA-256 (recomendado):
→ comparar con el valor mostrado en
shasum -a 256 sca-1.0.0-linux-x86_64-acme.tar.gz # macOS / Linux certutil -hashfile sca-1.0.0-win-x86_64-acme.zip SHA256 # Windows/downloads.php. - Extraer el paquete. Contenido:
staticcodeaudit-<platform>(el binario ejecutable)README.txt(procedimiento de activación offline)NOTICE.txt(avisos de licencia + recordatorio del principio offline)

Fase C — Para CADA máquina a activar (hasta max_machines, autoservicio)
- Calcular la huella de la máquina (SHA-256, 64 caracteres hex, derivada de hostname + arquitectura + SO + MAC, sin llamada de red) — dos formas equivalentes:
- Sin tener el binario instalado: en
www.codefixture.com/activate.php, una pestaña Linux/macOS y una pestaña Windows ofrecen cada una un comando de una línea (Python 3 o PowerShell) para pegar en una terminal, con botón de copiar. - Binario ya instalado:
./staticcodeaudit-<platform> activatemuestra la misma huella directamente en la terminal (o el pie de página SCA durante un escaneo en una máquina aún no activada).
- Sin tener el binario instalado: en

- Copiar esta huella (memoria USB, teléfono, copiar-pegar) a un equipo conectado a Internet — puede ser el mismo equipo usado para calcularla.
- En ese equipo conectado, ir a
www.codefixture.com/activate.php(requiere inicio de sesión). Todas las licencias del cliente aparecen automáticamente — sin necesidad de volver a introducir el número de serie. Para la licencia correspondiente:- Seleccionar la plataforma (lista desplegable)
- Pegar la huella de la máquina
- Indicar una etiqueta opcional (ej. «MacBook oficina»)
- Hacer clic en + Añadir

- El sitio actualiza
license.keyinmediatamente en el servidor (nueva huella añadida a la lista firmada). Descargar ese archivo mediante el botón dedicado en la ficha de la licencia — disponible en cualquier momento, no solo justo después de añadir. - Trasladar el
license.keya la máquina destino (memoria USB / scp / AirDrop) y colocarlo en la misma carpeta que el binario. - Relanzar SCA:
→ SCA:
./staticcodeaudit-linux-x86_64 scan ~/mi-proyecto- lee el
license.keylocal - verifica la firma HMAC HKDF (clave pública embebida — cero llamadas de red)
- verifica que su huella local ∈ la lista firmada
- verifica
expires_at > today - lanza el escaneo
- pie de página final:
Estado: OK (máquina activada)
- lee el
Cuotas de autoservicio (2 dimensiones distintas)
Cada licencia tiene dos cuotas independientes, configurables según el nivel de precios (tier):
| Cuota | Qué limita | Reinicio |
|---|---|---|
Plazas (max_machines) |
Número de máquinas declaradas simultáneamente en la licencia | Nunca — un retiro libera una plaza inmediatamente |
Frecuencia de adición (max_machine_changes_per_year) |
Número de adiciones de máquina en una ventana móvil de 365 días | Móvil — una adición de más de un año sale automáticamente del cómputo |
Mostrado en /activate.php, por licencia: «X / Y máquina(s) declarada(s) · Z adición(es) restante(s) en los últimos 12 meses».
Solo las adiciones consumen la cuota de frecuencia — un retiro (botón «✕ Retirar») es siempre posible, sin límite: libera una plaza sin añadir nunca material adicional, así que no hay nada que limitar de ese lado. El retiro dispara inmediatamente una nueva firma de license.key (huella eliminada de la lista): el binario se detendrá en ese equipo en su próxima verificación (no es un corte instantáneo — no hay llamada de red posible para provocarlo antes).
Renombrar la etiqueta de una máquina (notes) nunca se considera un cambio — siempre posible, incluso con la cuota de adiciones agotada.
Mensajes de error posibles (autoservicio)
| Situación | Mensaje mostrado |
|---|---|
| Esta huella ya está declarada en esta licencia | Esta máquina ya está declarada para esta licencia. |
Cuota de plazas (max_machines) alcanzada |
Cuota de máquinas alcanzada para esta licencia. |
| Cuota de adiciones (ventana de 365 días) alcanzada | Cuota de adiciones de máquina alcanzada para los últimos 12 meses. |
| Licencia no activa (suspendida, expirada, revocada) | Esta licencia no está activa: la declaración de máquina no es posible. |
1 Verificación en tiempo de ejecución (sin Internet)
En cada ejecución en una máquina ya activada, SCA:
- Lee el license.key local desde el disco
- Verifica la firma HMAC HKDF (integridad + no falsificación — clave pública embebida en el binario)
- Verifica que su huella local ∈ fingerprints del payload
- Verifica expires_at > today
- Sin llamada de red, sin ping, sin telemetría.
Consecuencia: un retiro de máquina o una revocación desde el admin solo es efectivo en la próxima verificación del binario afectado (volver a descargar license.key propaga el retiro inmediatamente; para una revocación completa de la licencia, el usuario deberá volver a descargar un nuevo license.key que ya no incluya su huella, o con una expires_at más próxima).
2 Varias licencias en una misma máquina — SCA_LICENSE_PATH
Si el cliente tiene 2 licencias distintas (ej. Solo Plus personal + Team de equipo — caso poco frecuente), puede alternar entre ellas sin mover ningún archivo:
SCA_LICENSE_PATH=~/licencias/team.key ./sca scan ~/proyecto-trabajo
SCA_LICENSE_PATH=~/licencias/solo-plus.key ./sca scan ~/proyecto-personal
Orden de prioridad de SCA para encontrar su license.key:
$SCA_LICENSE_KEY(contenido JSON en bruto, definido por un wrapper)$SCA_LICENSE_PATH(ruta a un archivo .key — recomendado para alternar entre licencias)./license.key(cwd, convención por defecto)
3 Casos especiales del lado del cliente
| Caso | Procedimiento |
|---|---|
| Añadir una N-ésima máquina | Repetir la fase C (pasos 7→12) en la nueva máquina. Consume 1 adición de la cuota de frecuencia (según disponibilidad de plazas max_machines). |
| Reinstalación del SO en la misma máquina | La huella cambia → repetir la fase C (nueva adición). Si se alcanza la cuota de plazas, retirar antes la huella antigua desde /activate.php (gratis, sin límite). |
| Traslado de equipo a equipo | Retirar el antiguo desde /activate.php → repetir la fase C en el nuevo (1 adición consumida). |
| Máquina perdida/robada | Retirar desde /activate.php — efectivo en la próxima verificación de ese binario. |
Archivo license.key perdido |
Volver a descargarlo en cualquier momento desde /activate.php (botón dedicado por licencia) — no es necesario repetir la fase C, la huella ya está declarada. |
| Renovación anual | El cliente repite el paso 4 (descargar nuevo paquete) + paso 11 (trasladar nuevo license.key) en cada máquina si la versión ha cambiado. |