-
Notifications
You must be signed in to change notification settings - Fork 2
Integrazione con Kvstore.io
Siccome il form scrive dei dati su kvstore.io (il quale poi scatena una email) ho fatto in modo che questo avvenga solamente se il sito è lanciato in "produzione":
JEKYLL_ENV=production jekyll serve
In caso di "sviluppo" il contact.js non viene caricato e quindi non si ottiene alcun effetto tangibile nel cliccare il bottone di submit del form
Per motivi legati alla sicurezza ho previsto che l'istanza kvstore autorizzi soltanto alcuni "referer" (siti da cui è richiesta l'iniezione del js per scrivere nello storage). Quindi, tanto per intendersi, il tag:
<script src="http://www.kvstore.io/js/public.js?storage_uuid=a26d6629-e365-4dea-8d40-dcf0d1b3a1aa"\>\</script>
dovrà essere contenuto in una pagina html servita da un dominio/sottodominio "coderdojomilano".
Per il momento, visto che siamo ancora in sviluppo pieno e per evitarci problemi inutili, il referer è lasco, ovvero accetta qualunque connessione (quindi anche da localhost). Quando decideremo di andare "live" predisporrò la regex per essere più stringente (appunto, tipo ".*.coderdojomilano.it"). Questo significa che per sviluppare, sarà necessario fare in modo che il dns locale del proprio computer abbia una entry del tipo dev.coderdojomilano.it, altrimenti vi troverete un errore nel log del browser di violazione del referer).
I dati salvati all'interno di KVStore.io sono accessibili attraverso o una combinazione username/password oppure invocando le API ed utilizzando uno specifico access-token.
Per i più curiosi/attenti, l'access-token che viene iniettato dal js all'interno della pagina HTML del visitatore, permette solo di scrivere dati all'interno di KVStore, ma non di leggerli (l'access-token del client js ha addirittura una struttura profondamente diversa da quelli usati normalmente dalle api e contiene degli elementi specifici, quali il timestamp di emissione del token, l'hash del referer ed una firma elettronica)
La logica di controllo del form si trova all'interno del file 'assets/js/contacts.js'. In sintesi, non appena il visitatore clicca il bottone di submit:
- il form viene validato (plugin jquery validation)
- i dati del form vengono trasformati in JSON
- spediti attraverso la funzione kvstoreio( collection, key, value, callback )
- disabilito il bottone di invio (in modo che non ci siano + richieste dalla stessa pagina)
- KVStore invia una email per notificare che è stato inserito un nuovo form all'interno dello storage. L'indirizzo email a cui la notifica è inviata è gestita a livello di singola collezione e per il momento le sto ricevendo io. Ancora una volta, quando andremo online, cambierò l'indirizzo di posta per usare uno degli indirizzi istituzionali
nota: KVStore.io funziona per collezioni. Una collezione è come un folder. In questo caso il contact form salva il contenuto (nome, email, messaggio) all'interno della collezione 'contacts'. La chiave è semplicemente un progressivo (ts_ + timestamp). Se dovessimo avere altri form all'interno del sito, sarà sufficiente creare un'altra collection con nome diverso
Trovate la documentazione delle API qui: https://market.mashape.com/lordkada/kvstore