Crea le tue API di telemetria con Ruby e Sinatra
Quando ho iniziato a riscrivere la versione 2.0 di dawnscanner, ho pensato di introdurre un meccanismo che mi consentisse di mandare dei dati telemetrici sull’utilizzo del tool.
L’idea non era tanto quella di avere il dettaglio di cosa stesse scansionando l’utente, quanto di avere il dato di utilizzo dello strumento e versione dello stesso.
Per questo genere di sviluppi, di solito mi affido a Ruby ed il framework grape per la costruzione di API REST. Visto che però si trattava di qualcosa di molto piccolo, mi sono affidato a Sinatra, un framework MVC per la creazione di semplici applicazioni web.
L’applicazione web, fornirà un identificativo univoco ai client che ne faranno richiesta; ogni istanza di dawnscanner quindi avrà un proprio ID che verrà richiesto dal tool se lo stesso non ne troverà valore salvato all’interno della propria configurazione in locale.
Lato server, implementare un endpoint che se interrogato in GET ti dia un ID univoco è semplice, basta usare la libreria SecureRandom di sistema.
Id è una classe che estende ActiveRecord, che si interfaccia quindi con il database per rendere persistente l’identificativo appena creato.
Anche in questo caso, abbastanza semplice come classe.
L’inizializzazione del sistema di telemetria avviene nella classe Dawn::Cli. L’idea è quella di avere un’entry point dove i client fanno una POST passando il proprio identificativo, l’indirizzo IP e la versione della knowledge base.
L’url alla quale viene fatta la POST è uguale all’id del client, questo per rendere difficile l’eventuale tampering dei dati da parte di qualche buontempone.
Ho scelto SQLite3 come database, visto che per piccole moli di dati è decisamente la scelta più ovvia.
Il progetto è su github.com ed è ovviamente open. Ho scelto questa strada per fugare qualsiasi dubbio circa i dati inviati da dawnscanner al mio sistema di telemetria, sistema che ovviamente può essere disabilitato da file di configurazione.
Vuoi aiutarmi a portare avanti il progetto Codice Insicuro con una donazione? Fantastico, allora non ti basta che premere il pulsante qui sotto.
Supporta il progetto