Saltar a contenido

Administración de Licencias

Los solvedores de Shardian validan la licencia al arrancar la simulación contra un servidor seguro de autenticación. Esta página detalla el esquema de base de datos, los endpoints administrativos, el demonio systemd y el uso de la herramienta CLI de administración.


1. Esquema de Base de Datos

El servidor de licencias utiliza una base de datos transaccional SQLite ligera (licenses.db) ubicada en el directorio de ejecución del servicio.

erDiagram
    LICENSES {
        string api_key PK
        string scope "both | aero | atmos"
        integer active "1 = activo, 0 = revocado"
        datetime expires_at
        datetime created_at
    }

Tabla: licenses

  • api_key (TEXT, Primary Key): Clave de API generada criptográficamente con prefijo sk_live_shardian_.
  • scope (TEXT): Define a qué resolvedor tiene acceso la licencia (aero, atmos o both).
  • active (INTEGER): Controla si la clave está activa. 1 significa activo, 0 significa revocado.
  • expires_at (DATETIME): Marca de tiempo de expiración. Las peticiones tras esta fecha devolverán un HTTP 401.
  • created_at (DATETIME): Fecha de registro de la clave.

2. Endpoints de la API

El servidor expone dos grupos diferenciados de endpoints HTTP/HTTPS:

A. Verificación del Solucionador (Pública)

Llamada por OpenFOAM y WRF durante la fase de inicialización del modelo de turbulencia/capa superficial.

  • GET /v1/verify
    • Cabeceras: Authorization: Bearer <api_key>
    • Respuesta (200 OK):
      {"status":"valid","key":"sk_live_shardian_...","scope":"both","expires_at":"2027-06-15T00:00:00Z"}
      
    • Respuesta (401 Unauthorized):
      {"status":"invalid","reason":"Key expired or does not exist"}
      

B. API de Administración (Privada e Interna)

Protegida mediante autenticación básica y restringida a peticiones de bucle de retorno (127.0.0.1) o redes internas de confianza.

  • POST /v1/admin/keys
    • Descripción: Genera y registra una nueva clave.
    • Cuerpo (JSON):
      {"scope": "both", "days_valid": 180}
      
    • Respuesta (200 OK):
      {"key": "sk_live_shardian_aero_atmos_2026_eval_abcdef", "status": "active"}
      
  • DELETE /v1/admin/keys
    • Descripción: Revoca de forma inmediata una clave activa.
    • Cuerpo (JSON):
      {"key": "sk_live_shardian_..."}
      

3. La Herramienta CLI de Administración

Los desarrolladores y administradores de Shardian pueden gestionar las licencias en la máquina host mediante la utilidad CLI compiled en Go license-cli:

Registrar una Nueva Licencia:

./license-cli create --scope both --days 365
Salida:
License Key Generated Successfully!
Key:    sk_live_shardian_cfd_atmos_2026_eval_4a2c91
Scope:  both
Expiry: 2027-06-15 12:00:00 UTC
Status: Registered in licenses.db (active)

Revocar una Licencia:

./license-cli revoke --key sk_live_shardian_cfd_atmos_2026_eval_4a2c91
Salida:
Success: Key sk_live_shardian_cfd_atmos_2026_eval_4a2c91 has been deactivated (active=0).
Any simulation using this key will abort immediately at the next time step.


4. Configuración del Demonio Systemd

En el servidor VPS de producción, la API de licencias corre bajo systemd para garantizar su disponibilidad permanente:

# /etc/systemd/system/shardian-license-server.service
[Unit]
Description=Shardian License Verification API Server
After=network.target

[Service]
Type=simple
User=shardian-admin
WorkingDirectory=/var/www/license-server
ExecStart=/var/www/license-server/server
Restart=always
RestartSec=5
Environment=PORT=8080
Environment=DB_PATH=/var/www/license-server/licenses.db

[Install]
WantedBy=multi-user.target

Para recargar el servicio tras realizar cambios:

sudo systemctl daemon-reload
sudo systemctl restart shardian-license-server.service
sudo systemctl status shardian-license-server.service