Skip to content

Commit

Permalink
fixed bug generation tag in github Actions
Browse files Browse the repository at this point in the history
  • Loading branch information
igor-lirussi committed Nov 10, 2021
1 parent d75329c commit 0416d61
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 46 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/LatexBuild.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,8 @@ jobs:
then #if yes use it
echo "::set-output name=RELEASE_NAME::$(echo ${{steps.extract_tag_msg.outputs.TAG_MSG}})"
else #if generate one new tag incrementing fixes number like x.y.z+1
val=$(git describe --tags --abbrev=0)
#val=$(git describe --tags --abbrev=0)
val=$(git tag | sort -V | tail -1)
newval=$(echo ${val##*.})
newval=$((newval+1))
newval="${val%.*}.$newval"
Expand Down
12 changes: 4 additions & 8 deletions References.bib
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@ @article{yolov3
year={2018},
}









@article{suaiv,
title={Stop using actions in Vuex},
url = {https://javascript.plainenglish.io/stop-using-actions-in-vuex-a14e23a7b0e6},
}
83 changes: 52 additions & 31 deletions Tex/Implementation.tex
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,7 @@ \subsection{Forecast e Socket.IO}
\subsection{Autenticazione}

\subsubsection{JSON Web Token JWT}
Per l'autenticazione è stato deciso di utilizzare il sistema a token JWT, firmati dal backend. Al momento
del login il server rilascia un token al client contenente dei dati
utili all’autenticazione; in questa maniera, durante le successive richieste,
il client invierà anche il token ricevuto, e il server lo controllerà per verificare
se è valido e quindi autorizzare il client. In questa maniera il server
diventa stateless, non avendo bisogno di salvare le informazioni relative
alle sessioni dei vari client collegati.

Per l'autenticazione è stato deciso di utilizzare il sistema JWT (Json Web Token), firmati dal backend. Al momento del login il server rilascia un token al client contenente dei dati utili all’autenticazione. Il client, inviando al server il token ricevuto assieme alle richieste che necessitano di autenticare il richiedente, potrà essere riconosciuto e verificato dal server. In questa maniera il server rimane stateless, dato che le informazioni dell'autenticazione devono essere necessariamente inviate ad ogni richiesta da parte del client.

\begin{lstlisting}[language=Javascript]
// generate token when user log in
Expand All @@ -78,32 +71,37 @@ \subsubsection{JSON Web Token JWT}
cb(null, user);
});
};

// find by token
userSchema.statics.findByToken = function (token, cb) {
var user = this;
jwt.verify(token, process.env.SECRET, function (err, decode) {
user.findOne({ _id: decode, token: token }, function (err, user) {
if (err) return cb(err);
cb(null, user);
});
user.findOne({ _id: decode, token: token },
function (err, user) {
if (err) return cb(err);
cb(null, user);
}
);
});
};

//delete token, when the user logout
userSchema.methods.deleteToken = function (token, cb) {
var user = this;

user.update({ $unset: { token: 1 } }, function (err, user) {
if (err) return cb(err);
cb(null, user);
});
user.update({ $unset: { token: 1 } },
function (err, user) {
if (err) return cb(err);
cb(null, user);
}
);
};

\end{lstlisting}

Per facilitare l'utilizzo della validazione del token JWT è stato prodotto un middleware facilmente inseribile nel
usso di Express. Questo middleware recupera il token disponibile dai cookies, inoltre recupera i dati sull'utente
autenticato e li inserisce nella richiesta per renderli disponibili nel handler della
Per facilitare l'utilizzo della validazione del token JWT è stato prodotto un middleware facilmente inseribile nel flusso di Express. Questo middleware recupera il token disponibile dai cookies. Se lo trova associato ad un utente nel database, recupera i dati su di esso e li inserisce nella richiesta per renderli disponibili nell'handler della
route desiderata.

\begin{lstlisting}[language=Javascript]
let auth = (req, res, next) => {
let token = req.cookies.auth;
Expand All @@ -128,14 +126,16 @@ \subsubsection{JSON Web Token JWT}
next();
});
};

\end{lstlisting}

\subsubsection{Dati sensibili}
Si è avuta la necessità anche di gestire alcuni dati sensibili dell'utente, come le password. E' stata utilizzata bcrypt, una funzione di hashing per salvare le password in maniera sicura

Si è avuta la necessità anche di gestire alcuni dati sensibili dell'utente, come le password. E' stato utilizzato bcrypt, un modulo contenente le più comuni funzioni di hashing per salvare le password in maniera sicura
nel database; viene utilizzato al momento della registrazione di un utente
quando si deve salvare la password nel db (viene salvato il suo hash con il
quando si deve salvare la password (viene salvato il suo hash con il
relativo valore di sale), e al login quando bisogna confrontare la password
ricevuta dall’utente con quella salvata.
ricevuta dall’utente con quella salvata.

\begin{lstlisting}[language=Javascript]
userSchema.pre("save", function (next) {
var user = this;
Expand All @@ -152,18 +152,16 @@ \subsubsection{Dati sensibili}
next();
}
});

userSchema.methods.comparePassword = function (password, cb) {
/*Comparing the user password when user tries to login*/
// Compare the user password when user tries to login
bcrypt.compare(password, this.password, function (err, isMatch) {
if (err) return cb(next);
cb(null, isMatch);
});
};
\end{lstlisting}

\subsection{Prossimo sottocapitolo ...}


\section{Client}
\textit{Commento:anche questo da completare come nel server, ci ho messo qualche spunto}\\
Per lo sviluppo del Client è stato usato Vuetify, un framework di componenti di Material Design per Vue. js che consente agli sviluppatori di creare incredibili applicazioni in modo rapido ed efficiente.
Expand All @@ -172,21 +170,44 @@ \subsection{Socket}
TODO

\subsection{Store}
Come tutte le applicazioni Vuex c'è uno store che è un po' un singleton, che contiene tutti i dati in un oggetto.
Per gestire lo stato dell'applicazione, abbiamo avuto la necessità di sfruttare il framework Vuex. Esso fornisce un'interfaccia unica per tutta l'applicazione per interrrogare lo stato e modificarlo. Questo permette di avere un'unica fonte di verità dei dati e ne preserva maggiormente l'integrità.

Graficamente potremo delinearne così la struttura:
\begin{figure}[H]
\caption{Le azioni sono fuori dallo store e diventano servizi}
\label{fig:Store}
\centering
\includegraphics[width=0.7\textwidth]{Images/store.png}
\end{figure}
https://javascript.plainenglish.io/stop-using-actions-in-vuex-a14e23a7b0e6

Finisci di scrivere...
Il nostro stato è rappresentato dal listato sottostante, in particolare abbiamo memorizzato la visibilità della barra di navigazione e lo stato di autenticazione dell'utente.

\begin{lstlisting}[language=Javascript]
const state = {
drawer: null,
user: null,
};
\end{lstlisting}

Lo stato viene quindi letto quando bisogna mostrare o no la barra di navigazione oppure capire quando un utente è autenticato oppure no.

\section{Centralina}
Implementazione centralina
L'applicativo per la centralina è stato sviluppato anch'esso con le tecnologie Node.JS ed Express. Essendo un progetto di simulazione di una centralina reale, dispone di solamente due funzioni: una per ottenere info sullo stato del dispositivo e una per ottenere le condizioni meteo correnti (generate staticamente, data la natura del progetto).

\begin{lstlisting}[language=Javascript]
const express = require("express");
const weather = require("./storage/weather.storage");

const app = express();

app.get("/current", weather.readAll);

app.get("/info", (req, res, next) =>
res.status(200).json({
...
});
);
\end{lstlisting}

\section{Prodotto Finale}
\label{prodottofinale}
Expand Down
10 changes: 5 additions & 5 deletions Tex/TestingAndPerformance.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@

\chapter{Testing e Performance}

Lo sviluppo delle applicazioni web a livello professionale richiede la qualità e la robustezza del codice che è stato prodotto. Per avere delle metriche concrete sulla qualità del prodotto, è necessario coprire il progetto di test, sia automatici che manuali.
Lo sviluppo delle applicazioni web a livello professionale richiede la qualità e la robustezza del codice che è stato prodotto. Per avere delle metriche concrete su tali metriche, è necessario eseguire intensivamente ed estensivamente test sul prodotto, sia automatici che manuali.

\section{Unit Test}

Le parti più importanti inerenti la logica di business sono stati testati con gli unit test per migliorarne la robustezza e l'affidabilità. Molte componenti dell'applicativo Server sono state sviluppate con un approccio Test Driven Development e sono state controllate molte volte prima di essere messe in produzione.
Le parti più importanti inerenti la logica di business sono stati testati con gli unit tests per migliorarne la robustezza e l'affidabilità. Molte componenti dell'applicativo Server sono state sviluppate con un approccio Test Driven Development e sono state controllate molte volte prima di essere messe in produzione.

\par In generale si è cercato di tenere un approccio sistematico per affrontare i problemi:

\begin{itemize}

\item Si cercava di modellare in modo il più reale possibile le entità che si sarebbero manipolate successivamente, cercando di capire il dominio del problema e quali fossero tutti i dati di cui avesse bisogno
\item Si cercava di modellare in modo il più reale possibile le entità che si sarebbero manipolate successivamente, cercando di capire il dominio del problema e quali fossero tutti i dati di cui si avesse bisogno;

\item Successivamente si sviluppava il componente che sarebbe stato delegato a interagire principalmente con la base dati di entità appena modellate creando prima i test automatici per controllare che i dati venissero manipolati correttamente a seconda delle necessità
\item Successivamente si sviluppava il componente che sarebbe stato delegato a interagire principalmente con la base dati delle entità appena modellate. Creati i test automatici per controllare che i dati venissero manipolati correttamente a seconda delle necessità, solamente in un secondo momento, dopo aver appurato il fallimento dei test appena scritti, si sarebbe proceduto a scrivere il codice necessario per farli riuscire;

\item In tal modo si sviluppavano anche i componenti della logica di business che dovevano gestire il susseguirsi delle operazioni sui dati in modo da completare i compiti da svolgere e i componenti che dovevano gestire le richieste dei client e fornire loro i dati richiesti.
\item Allo stesso modo, si sviluppavano anche i componenti della logica di business.

\item Infine, al manifestarsi di ulteriori problemi e malfunzionamenti, si è sempre cercato innanzitutto di comprendere se ci fossero stati dei problemi nell'implementazione dei test e che le loro funzionalità fossero quelle che ci si aspettava. In tal caso, allora si procedeva alla stesura di altri test automatici che permettessero di riprodurre il problema e risolverlo.

Expand Down
2 changes: 1 addition & 1 deletion main.tex
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@

%define Javascript language
\lstdefinelanguage{JavaScript}{
keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, let, throw},
keywordstyle=\color{blue}\bfseries,
ndkeywords={class, export, boolean, throw, implements, import, this},
ndkeywordstyle=\color{darkgray}\bfseries,
Expand Down

0 comments on commit 0416d61

Please sign in to comment.