Questo articolo, vuole spiegare il contenuto di un mio progetto ospitato su GitHub, che illustra come creare una semplice web application la quale integra una http application scritta in lazarus, per la gestione del backend, con la tecnologia html5/javascript per la gestione del frontend.
Il frontend è completamente esterno all’eseguibile e si trova nel percorso ./root/ dell’eseguibile.
Questo permette di modificare la parte d’iterazione dell’utente senza dover ricompilare l’eseguibile, mentre la logica del progetto non può essere alterata facilmente se non da chi possiede i sorgenti del progetto.
Il repository GitHub lo trovate qui: https://github.com/XinYiMan/LazWebServer.git
Due soli file sono strettamente necessari nella cartella contenente il frontend index.html e login.html l’assenza del resto non crea problemi all’eseguibile. L’esempio si appoggia sul template AdminLte realizzato con bootstrap.
L’esempio in se è semplice, lanciato l’eseguibile si apre un browser all’indirizzo localhost:5555 e si deve effettuare un login, che porta a visualizzare il contenuto della pagina index.html
Le credenziali per il login sono presenti sulla form, come si può vedere nell’immagine. Una volta effettuato il login si arriva alla seguente schermata
A questo punto posso fare solo 3 tipi di iterazione, il primo è cliccare sul pulsante Click
Che popolerà i due campi vuoti con la data e il nome della settimana
Oppure cliccare sul pulsante Load data
Che popolerà una tabella con un recordset di 4 righe
L’iterazione tra fontend e backend avviene attraverso chiamate ajax da parte della pagina index.html e il risultato viene generato dalla procedura TFPController.indexRequest presente nella unit uControl, che è di fatto il controller da cui devono passare tutte le chiamata per l’iterazione tra frontend e backend.
Esiste poi una terza iterazione nell’esempio attuale la quale avviene in automatico al caricamento della pagina, popolando così il nome dell’utente (che ha effettuato) il login in alto a sinistra.
Se avessi fatto il login con un utente diverso, avrei trovato un altro valore al posto della scritta SyS Admin.
In ultima istanza rimane l’iterazione per la gestione del logout, in tal senso basterà premere sulla voce Logout presente nel menù di sinistra.
La gestione della sessione utente è basata sull’uso del token jwt salvato all’interno di un cookie. Di dafult la sessione utente ha una durata di 20 minuti di inattività (valore impostato nella unit uConsts) prima di essere considerato non più attendibile ed inibire le funzionalità del backend.
L’esempio parte con due Custom Options impostate
-dOpenSslKo
-dSmartDebugLogWriteActive
Se cambio -dOpenSslKo in -dOpenSslOk allora il progetto verrà compilato per partire in versione https (sull’argomento rimando alla guida https://blog.lazaruspascal.it/2023/05/18/creare-un-web-server-https/).
Mentre -dSmartDebugLogWriteActive fa si che i messaggi di debug vengano scritti sulla console/terminale durante l’esecuzione del software, se ometto tale valore non verrà scritto nulla, se utilizzo -dSmartDebugLogActive verrà salvato su file nel percorso GetTempDir(true) + ‘smart_debug_log.log’.
Sconsiglio l’opzione -dSmartDebugLogActive in quanto l’applicazione lavora in multithread.
A questo punto avete tutto il necessario per giocare con questo connubio, il sorgente è corredato di commenti in italiano/inglese nei punti che per me erano cruciali.
Buona programmazione!