AppMint
Generatore di app modulari — DB CRUD, script, REST, SQL
AppMint è una suite modulare che permette di costruire — senza scrivere codice — quattro tipi di applicazioni interne attivabili agli utenti finali da un Configuratore APP a 5 tab (Tipo & info / Backend / Maschera / Campi extra / Riepilogo).
**DB CRUD** — punta una connessione PostgreSQL o MariaDB salvata, sceglie schema e tabella, configura colonne (label, widget text/textarea/number/checkbox/date/datetime/select/fk), ricerca, filtri, ordinamenti, FK con label dinamica. Il risultato è un'app full-CRUD con UI auto-generata che lavora sui dati reali (nessuna duplicazione).
**Script runner** — esegue file `.py` `.sh` `.bat` `.cmd` `.ps1` `.exe` `.jar` `.sql` con form parametri, output stdout/stderr in streaming live (SSE), audit completo su DB, log file rotanti. Pattern "1 utente = 1 processo" con bottone Kill esplicito e watchdog `max_runtime_seconds`. Console processi admin per kill e replay.
**REST caller** — chiama endpoint HTTP esterni con auth `none` / `bearer` / `basic` / `api-key-header`, parametri dinamici dal form utente, risposta mostrata nell'UI.
**SQL caller** — esegue template SQL parametrici read-only su una connessione salvata.
Ogni app generata appare nella sidebar dinamica raggruppata per `category`, gestita con permessi stile Django (user_apps + group_apps con read/create/update/delete/run, unione OR fra utente e gruppi). Layout maschera a 2 colonne con `col_span` e "attacca al precedente", regole IF condizionali in JavaScript lato browser (visible/required/readonly/secret/label) per UX dinamica senza round-trip server.
**Bottoni configurabili** — al posto del classico "Esegui" auto-renderizzato, l'app espone bottoni personalizzati con azioni multiple: `run_main`, `script_runner`, `rest_call`, `sql_query`, `open_link`, `open_app` (cross-app deep-link), `reset_form`, `custom_js`. Ogni bottone ha JSON di configurazione con placeholder `{{key}}` per valori del form.
**REST API esterna** `/api/v1/*` autenticata con header `X-API-Key` (chiave per utente, hash SHA-256 in DB) — espone meta, list, run di ogni app generata. **MCP server** stdio con framing LSP, integrabile in `DexAssistant/servers.json` per esporre CRUD e run come tool MCP.
**Persistenza**: SQLite (admin DB + sessions) per i metadati AppMint (utenti, gruppi, app, permessi, connessioni). Le password PG sono cifrate at-rest con AES-256-GCM (chiave da env o `<DATA_DIR>/.secret-key` auto-generato). Cartella dati centralizzata via `ADMIN_DB_DIR` (consigliata fuori dal progetto per backup/portabilità).
**Sicurezza**: bcrypt cost 12 sulle password utente, force-change password al primo accesso, sessioni firmate persistenti su SQLite (HttpOnly + SameSite=Lax + Secure in production), validazione regex `^[A-Za-z_][A-Za-z0-9_$]*$` su tutti gli identifier SQL prima di interpolazione, parametri `$N` ovunque, `ORDER BY` validato contro la lista colonne note, middleware `requireLogin/requireAdmin/requireAppPermission`.
**HTTPS nativo** opzionale (cert/key da `.env` con script `npm run cert:self-signed`) oppure reverse proxy con Caddy/Nginx/IIS davanti al servizio Node. Multi-language IT/EN, tema dark/light persistito in localStorage. Stack: Node.js >= 18, Express, better-sqlite3, pg + mysql2/promise, bcryptjs, AES-256-GCM. Deploy come servizio Windows con NSSM via gli script `deploy-service.bat` / `undeploy-service.bat` inclusi.
Funzionalità
- Configuratore APP a 5 tab (Tipo & info / Backend / Maschera / Campi extra / Riepilogo)
- DB CRUD su PostgreSQL e MariaDB con introspection schema/tabelle/colonne
- Script runner: .py / .sh / .bat / .cmd / .ps1 / .exe / .jar / .sql con SSE live
- REST caller con auth none / bearer / basic / api-key-header
- SQL caller read-only con template parametrico
- Sidebar dinamica con app raggruppate per category
- Permessi stile Django: user_apps + group_apps (R/C/U/D/run)
- Layout maschera 2 colonne con col_span + "attacca al precedente"
- Regole IF JavaScript lato browser (visible/required/readonly/secret/label)
- Bottoni configurabili: run_main / script / rest_call / sql_query / open_link / open_app / reset / custom_js
- REST API esterna /api/v1/* con X-API-Key (hash SHA-256)
- MCP server stdio con framing LSP, integrabile in DexAssistant
- Console processi admin: lista live, kill, replay storico via SSE
- Audit completo su DB con stdout/stderr salvati per data
- Multi-language IT/EN con switch in topbar
- Tema dark/light persistito in localStorage
- HTTPS nativo opzionale + supporto reverse proxy (Caddy/Nginx/IIS)
- Cifratura password PG at-rest con AES-256-GCM
- Cartella dati centralizzata via ADMIN_DB_DIR (backup/portabilità)
- Deploy automatizzato come servizio Windows via NSSM
Parametrizzazioni
- PORT (default 3100)
- SESSION_SECRET (richiesto in production)
- ADMIN_DB_DIR — cartella dei DB SQLite admin/sessioni e .secret-key
- CONNECTION_ENC_KEY — chiave AES (auto-generata se assente)
- NODE_ENV — production attiva cookie Secure (servire dietro HTTPS)
- HTTPS_ENABLED + HTTPS_PORT + HTTPS_CERT_PATH + HTTPS_KEY_PATH
- APP_LANG — lingua di default (it / en)
- Connessioni DB target: host, port, database, username, password (cifrata), ssl, notes
- API key per utente — generabile dal menu API key
- Permessi per app: user_apps + group_apps (read/create/update/delete/run)
Pre-requisiti tecnici
- Node.js 18+ (LTS consigliato)
- Per app db_crud / sql_caller: PostgreSQL o MariaDB/MySQL raggiungibile
- Per app script_runner: gli interpreti che vuoi usare (Python, PowerShell, Bash, Java, ...)
- Visual C++ Build Tools (Windows) per ricompilare better-sqlite3 se necessario
- OpenSSL nel PATH per i certificati self-signed (opzionale)
- NSSM per il deploy come servizio Windows (scaricato in automatico dallo script)
- Reverse proxy (Caddy/Nginx/IIS) consigliato per esporre HTTPS su porta 443
- DexAssistant — opzionale, per usare AppMint come server MCP integrato