\chapter{Analyses applicatives}

\section{Backend API}

L'\acrshort{api} de l'application permet d'intéragir avec les différents composants de l'application. Il permet notamment d'ajouter et de gérer les équipements (\Colorbox{light-gray}{\lstinline|Device|}), les identifiants (\Colorbox{light-gray}{\lstinline|Credential|}), les taches de récupération (\Colorbox{light-gray}{\lstinline|Task|}) ainsi que les recherches. Les détails de ces requêtes sont documentées ci-après.

\subsection{Credential}

L'ensemble des actions \gls{crud} sont disponibles pour l'objet \Colorbox{light-gray}{\lstinline|Credential|}.

\vspace{3mm}
\begin{table}[H]
    \centering
    \caption{Actions possibles pour l'objet Credential}
    \label{api-credential-crud}
    \begin{tabular}{|l|l|l|}
    \hline
    \textbf{Opération} & \textbf{Méthode HTTP} & \textbf{URI}                                   \\ \hline
    Création                            & POST      & /api/credentials                          \\ \hline
    Récupération (Toute la collection)  & GET       & /api/credentials                          \\ \hline
    Récupération (Unique)               & GET       & /api/credentials/\textit{credential\_id}  \\ \hline
    Modification                        & PATCH/PUT & /api/credentials/\textit{credential\_id}  \\ \hline
    Suppression                         & DELETE    & /api/credentials/\textit{credential\_id}  \\ \hline
    \end{tabular}
\end{table}
\vspace{3mm}

\subsection{Device}

L'ensemble des actions \gls{crud} sont disponibles pour l'objet \Colorbox{light-gray}{\lstinline|Device|}.

\vspace{3mm}
\begin{table}[H]
    \centering
    \caption{Actions possibles pour l'objet Device}
    \label{api-device-crud}
    \begin{tabular}{|l|l|l|}
    \hline
    \textbf{Opération} & \textbf{Méthode HTTP} & \textbf{URI}                           \\ \hline
    Création                            & POST      & /api/devices                      \\ \hline
    Récupération (Toute la collection)  & GET       & /api/devices                      \\ \hline
    Récupération (Unique)               & GET       & /api/devices/\textit{device\_id}  \\ \hline
    Modification                        & PATCH/PUT & /api/devices/\textit{device\_id}  \\ \hline
    Suppression                         & DELETE    & /api/devices/\textit{device\_id}  \\ \hline
    \end{tabular}
\end{table}
\vspace{3mm}

\subsection{Task}

La version actuelle de l'API permet uniquement de créer une nouvelle tache de récupération en précisant l'identifiant du \Colorbox{light-gray}{\lstinline|Device|} voulu.

\vspace{3mm}
\begin{table}[H]
    \centering
    \caption{Actions possibles pour l'objet Task}
    \label{api-task-crud}
    \begin{tabular}{|l|l|l|}
    \hline
    \textbf{Opération} & \textbf{Méthode HTTP} & \textbf{URI}                     \\ \hline
    Création           & POST                  & /api/devices/\textit{device\_id}/tasks \\ \hline
    \end{tabular}
\end{table}
\vspace{3mm}

\subsection{Search}

Les actions de recherches sont gérées pas le controller 'search'. La seule fonctions disponible est la recherches de règles de sécurité (\Colorbox{light-gray}{\lstinline|Policy|}). Les filtres de la requêtes sont passées en paramètre de la requête.

\vspace{3mm}
\begin{table}[H]
    \centering
    \caption{Actions de recherches possibles}
    \label{api-search-crud}
    \begin{tabular}{|l|l|l|}
    \hline
    \textbf{Opération}  & \textbf{Méthode HTTP} & \textbf{URI}          \\ \hline
    Recherche de règles & GET                   & /api/search/policies  \\ \hline
    \end{tabular}
\end{table}
\vspace{3mm}

\noindent
Exemple de requête de recherche (le caractère '/' est remplacé dans l'URL par '\%2F', car c'est un caractère spécial HTTP):

\noindent
\Colorbox{light-gray}{\small{http://backend/api/search/policies?destination\=10.0.1.0\%2F24\&port\=3389\&protocol\=tcp\&source\=10.0.2.0\%2F24}}

\newpage
\section{Interface utilisateur}

L'interface utilisateur se présente sous la forme d'une application WEB qui permet à l'utilisateur de faire des recherches via un formulaire et qui va mettre en forme les résultats obtenus. Les champs 'Source' et 'Destination' s'attendent à recevoir une adresse réseau au format \acrshort{cidr}, le champs 'Protocol' est une liste déroulante qui propose à choix 'TCP', 'UDP' ou 'ICMP'. Pour finir, le numéro de port doit être une valeur numérique comprise entre 1 et 65535.

\vspace{3mm}
\begin{figure}[H]
    \centering
    \includegraphics[width=160mm]{gui_search_form}
    \caption{Formulaire de recherche WEB}
\end{figure}
\vspace{3mm}

Les réponses sont sous la forme de blocs dépliants dont la couleur indique si la règle autorise ou bloque le flux, le vert signale une règle d'ouverture (accept) et le rouge une règle de fermeture ('deny'). Chaque bloc représente un équipement de sécurité différent, si un seul de ces blocs est rouge, c'est que le flux n'est pas autorisé de bout en bout.

\vspace{3mm}
\begin{figure}[H]
    \centering
    \includegraphics[width=160mm]{gui_policies_collapsed}
    \caption{Résultat visuel d'une recherche de règle}
\end{figure}
\vspace{5mm}

En cliquant sur le bloc, on peut lire les détails de la règle en question. En cliquant à nouveau dessus, le bloc se referme.

\vspace{3mm}
\begin{figure}[H]
    \centering
    \includegraphics[width=160mm]{gui_policy}
    \caption{Détail d'une règle}
\end{figure}
\vspace{3mm}

