Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compilateur #3

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 58 additions & 39 deletions myaudit/routes/compil.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import markdown2
import markdown2, re

from flask import Blueprint, render_template, redirect, url_for, flash, request, jsonify, send_file
from flask_login import login_user, logout_user, current_user, login_required, logout_user
Expand Down Expand Up @@ -179,27 +179,44 @@ def gen_content_rapport(id_mission):
mega_tableau = []
chemin_images = current_dir + "../upload/"

for reponse in reponses:
for reponse in reponses:
# Rédaction des chapitres
chapitre = reponse["chapitre"]
if chapitre != dernier_chapitre:
latex_content.append(r"\section{" + chapitre + r"}")
latex_content.append(r"\chapter{" + chapitre + r"}")
dernier_chapitre = chapitre
e_s_es = re.search(r'jugé(?:e)?(?:s)?(.*)', reponse["objectif"]).group(0).strip().split(" ")[0].replace("jugé","")
# Rédaction des objectifs si existant

if reponse["objectif"]:
latex_content.append(r"\subsection{" + reponse["objectif"] + r"}")
if reponse["evaluation"] == 0:
objectif_atteint = reponse["objectif"].replace('...', ("non évaluable"+e_s_es).replace('ee', 'e'))
if reponse["evaluation"] == 1:
objectif_atteint = reponse["objectif"].replace('...', "inexistant"+e_s_es)
if reponse["evaluation"] == 2:
objectif_atteint = reponse["objectif"].replace('...', "en cours de réflexion")
if reponse["evaluation"] == 3:
objectif_atteint = reponse["objectif"].replace('...', "en cours d’implémentation")
if reponse["evaluation"] == 4:
objectif_atteint = reponse["objectif"].replace('...', "implémenté"+e_s_es)
if reponse["evaluation"] == 5:
objectif_atteint = reponse["objectif"].replace('...', "implémenté"+e_s_es+" avec procédures associées")
latex_content.append(r"\subsubsection{" + objectif_atteint + "}")
else:
latex_content.append(r"\subsection{" + reponse["question"] + r"}")
if reponse["evaluation"] == 0:
latex_content.append(r"\textit{Mesures non évaluable}")
if reponse["evaluation"] == 1:
latex_content.append(r"\textit{Mesures inexistantes}")
if reponse["evaluation"] == 2:
latex_content.append(r"\textit{Mesures en cours de réflexion}")
if reponse["evaluation"] == 3:
latex_content.append(r"\textit{Mesures en cours d’implémentation}")
if reponse["evaluation"] == 4:
latex_content.append(r"\textit{Mesures implémentées}")
if reponse["evaluation"] == 5:
latex_content.append(r"\textit{Mesures implémentées avec procédures associées}")
latex_content.append(r"\textit{" + reponse["question"] + r"}:")
if reponse["evaluation"] == 0:
objectif_atteint = (r"\textit{Mesures non évaluable}")
if reponse["evaluation"] == 1:
objectif_atteint = (r"\textit{Mesures inexistantes}")
if reponse["evaluation"] == 2:
objectif_atteint = (r"\textit{Mesures en cours de réflexion}")
if reponse["evaluation"] == 3:
objectif_atteint = (r"\textit{Mesures en cours d’implémentation}")
if reponse["evaluation"] == 4:
objectif_atteint = (r"\textit{Mesures implémentées}")
if reponse["evaluation"] == 5:
objectif_atteint = (r"\textit{Mesures implémentées avec procédures associées}")
latex_content.append(r"\textbf{" + objectif_atteint + "}")

if reponse["réponse"]:
latex_content.append(r"\paragraph{}" + reponse["réponse"])
Expand All @@ -211,12 +228,15 @@ def gen_content_rapport(id_mission):
recommandations = [ra.to_dict() for ra in recommendations_audit_list]

if recommandations: # Cette fois pour les reco
latex_content.append("Recommendations:\n")
latex_content.append("\\begin{tabular}{|c|c|}\n")
latex_content.append("\\hline\n")
latex_content.append("Titre de la Recommandation & Priorité \\\\\n")
latex_content.append("\\hline\n")

latex_content.append(r"\paragraph{Recommendations:}")

for reco in recommandations:
latex_content.append("\\begin{tabular}{|c|c|}\n")
latex_content.append("\\hline\n")
latex_content.append("Titre de la Recommandation & Priorité \\\\\n")
latex_content.append("\\hline\n")

reco_titre = reco.get("titre_reco", "N/A")
reco_recommendation = reco.get("recommendation", "N/A")
reco_sources = reco.get("sources", "N/A")
Expand All @@ -228,31 +248,27 @@ def gen_content_rapport(id_mission):
latex_content.append("\\hline\n")
latex_content.append("\\multicolumn{2}{|l|}{Sources: " + (reco_sources or "N/A") + "}\\\\\n")
latex_content.append("\\hline\n")
latex_content.append("\\end{tabular}\n")
latex_content.append("\n--------------\n\n") # Ligne de séparation entre les tableaux
latex_content.append("\\end{tabular}\n")

if recommandations: # Cette fois ce sont les vulnérabilités
latex_content.append("Vulnérabilités:\n")
latex_content.append("\\begin{tabular}{|c|c|}\n")
latex_content.append("\\hline\n")
latex_content.append("Titre de la Vulnérabilité & Détails \\\\\n")
latex_content.append("\\hline\n")
latex_content.append(r"\paragraph{Vulnérabilités:}")
for vuln in recommandations:
print(vuln)
try:
if vuln.get("vuln", "N/A"):
latex_content.append("\\begin{tabular}{|c|c|}\n")
latex_content.append("\\hline\n")
latex_content.append("Titre de la Vulnérabilité & Détails \\\\\n")
latex_content.append("\\hline\n")

vuln_titre_vuln = vuln.get("titre_vuln", "N/A")
vuln_vuln = vuln.get("vuln", "N/A")
vuln_v_impact = vuln.get("v_impact", "N/A")
vuln_v_proba = vuln.get("v_proba", "N/A")
vuln_v_proba = vuln.get("v_proba", "N/A")

latex_content.append(vuln_titre_vuln + " & " + vuln_vuln + " \\\\\n")
latex_content.append("\\hline\n")
latex_content.append("\\multicolumn{2}{|l|}{Impact: " + str(vuln_v_impact) + ", Probabilité: " + str(vuln_v_proba) + "}\\\\\n")
latex_content.append("\\hline\n")
except:
print('rated')
latex_content.append("\\end{tabular}\n")
latex_content.append("\n--------------\n\n") # Ligne de séparation entre les tableaux

latex_content.append("\\end{tabular}\n")

latex_content.append(r"\newpage")
latex_content.append(r"\section{Résumé des recommandations et vulnérabilités}")
Expand All @@ -262,8 +278,11 @@ def gen_content_rapport(id_mission):
latex_content.append(r"\hline")
latex_content.append(r"Titre de la recommandation & Titre de la vulnérabilité \\")
latex_content.append(r"\hline")
for titre_reco, titre_vuln in mega_tableau:
latex_content.append(f"{titre_reco} & {titre_vuln} \\\\")
for reco in recommandations:
print(reco)
reco_titre = reco.get("titre_reco", "N/A")
vuln_titre_vuln = vuln.get("titre_vuln", "N/A")
latex_content.append(f"{reco_titre} & {vuln_titre_vuln} \\\\")
latex_content.append(r"\hline")
latex_content.append(r"\end{tabular}")

Expand Down
77 changes: 27 additions & 50 deletions myaudit/templates/latex/template_contrat.tex
Original file line number Diff line number Diff line change
@@ -1,93 +1,74 @@
\documentclass[12pt]{extarticle}
\usepackage{amssymb}
\usepackage{array}
\usepackage{booktabs}
\usepackage{enumitem}
\usepackage{amssymb}
\usepackage{array}
\usepackage{booktabs}
\usepackage{enumitem}
\usepackage{fancyhdr}
\usepackage[utf8]{inputenc}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage[table]{xcolor}



\usepackage[table]{xcolor}
\geometry{
left=1cm,
right=1cm,
top=1cm,
bottom=1cm
}


\fancypagestyle{plain}{
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot[C]{\thepage}
}


\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot[C]{\thepage}
\centering
\fancyhead[R]{Ce document est une propriété privée et confidentielle. Toute diffusion non autorisée est interdite.}
\flushleft

\begin{document}
\title{Contrat d'audit}
\begin{figure}[htbp]
\begin{center}
\includegraphics[width=10cm]{./{{AUDITORLOGO}}}
\end{center}
\end{figure}

\begin{center}

\Huge\textbf{Mission: {{mission}} }

\LARGE\textbf{ {{auditorcompany}} }

\LARGE\textbf{Auditeur: {{auditorcompany}} }
\end{center}
\vspace{5cm}
\begin{center}

\normalsize\textbf{Client: {{clientcompany}} }

\normalsize\textbf{Produit: {{clientproduit}} }

\normalsize\textbf{Date: {{DATEDOCUMENT}} }

\normalsize\textbf{Version: {{VERSIONDOCUMENT}} }

\end{center}


\section{Parties}
\subsection{ {{clientcompany}}}
\newpage
\chapter{Parties}
\section{ {{clientcompany}}}
L'entreprise \textit{ {{clientcompany}} } (SIREN: \textit{ {{clientsiren}} }), dont le siège social est situé au \textit{ {{clientaddress}}}, représentée par \textit{ {{clientrepresentative}} }, en qualité de \textit{ {{ clienttitle}}}.
\subsection{ {{auditorcompany}}}
\section{ {{auditorcompany}}}
\textit{ {{auditorcompany}}}, (SIREN: \textit{ {{auditorsiren}}}), dont le siège social est situé au \textit{ {{auditoraddress}}}, représentée par \textit{ {{auditorrepresentative}}}, en qualité de \textit{ {{auditortitle}}}.

\section{Objet}
\chapter{Objet}
Le présent contrat a pour objet de définir les modalités de réalisation des prestations de sécurité informatique commandées par le Client auprès de l'Auditeur.

\section{Délais de réalisation}
\chapter{Délais de réalisation}
Les parties conviennent que les prestations seront réalisées dans un délai de \textcolor{red}{\textbf{\underline{nombre de jours/semaines/mois}}}. Ce délai pourra être ajusté en fonction de la complexité des prestations et des éventuelles contraintes rencontrées en cours de projet.

\section{Périmètre technique de l’intrusion}
\chapter{Périmètre technique de l’intrusion}
Le périmètre technique de l'intrusion sera défini conjointement par les deux parties avant le début des prestations. \textcolor{red}{\textbf{\underline{Ce périmètre inclura les systèmes, réseaux et applications concernés par les prestations.}}}

\section{Outils et Techniques}
\chapter{Outils et Techniques}
Les prestations seront réalisées en utilisant les outils et techniques définis conjointement par les deux parties. Ces outils et techniques seront spécifiés dans un document annexe intitulé "Description des Outils et Techniques".

\section{Phase de validation}
\chapter{Phase de validation}
Une phase de validation sera prévue à la fin des prestations afin de vérifier la conformité des résultats obtenus avec les attentes du Client. Cette phase de validation fera l'objet d'un rapport détaillé remis au Client.

\section{Ressources Mises à Disposition}
\chapter{Ressources Mises à Disposition}
Le Client s'engage à mettre à disposition de l'Auditeur toutes les ressources nécessaires à la réalisation des prestations, y compris l'accès aux systèmes, réseaux et applications concernés.

\section{Descriptif des actions}
\chapter{Descriptif des actions}
Les actions à réaliser dans le cadre des prestations incluront, \textcolor{red}{\textbf{\underline{sans s'y limiter}}} :
\begin{itemize}
\item Pentest : Test d'intrusion sur les systèmes et réseaux du Client pour identifier les failles de sécurité.
Expand All @@ -97,17 +78,16 @@ \section{Descriptif des actions}
\item Audit Organisationnel : Étude des processus et des pratiques organisationnelles du Client en matière de sécurité informatique pour identifier les lacunes et recommander des améliorations.
\end{itemize}
\newpage

\section{Tarification}
\chapter{Tarification}
Voici les tarifs des différents types de mission :
\subsection{Audits}
\section{Audits}
\begin{itemize}
\item \textbf{Tests d'intrusion :} 450 €/jour
\item \textbf{Audit d'architecture :} 550 €/jour
\item \textbf{Audit organisationnel :} 600 €/jour
\item \textbf{Rédaction :} 100 €/jour
\end{itemize}
\subsection{Tableau récapitulatif}
\section{Tableau récapitulatif}
\begin{center}
\begin{tabular}{lcc}
\toprule
Expand All @@ -127,24 +107,21 @@ \subsection{Tableau récapitulatif}
\end{tabular}
\end{center}
\newpage

\section{Assurance}
\chapter{Assurance}
L'Auditeur a souscrit une assurance responsabilité civile professionnelle auprès de \textit{ {{AUDITORASSURANCE}}}couvrant les risques liés aux prestations réalisées.
Le numéro du contrat est : \textit{ {{AUDITORASSURANCENO}}}

\section{Confidentialité}
\chapter{Confidentialité}
La confidentialité est cruciale dans la gestion d'un audit de sécurité, conforme à la norme ISO 19011, pour protéger les données sensibles des clients, les informations sur les vulnérabilités et maintenir la confiance des parties prenantes.
Dans le cadre de cet audit, les données confidentielles seront échangées via une archive zip chiffrée, sécurisée par un mot de passe envoyé par SMS au client.
\newpage

\section{SIGNATURE DU CONTRAT}
\chapter{SIGNATURE DU CONTRAT}
Toute modification ou annulation du présent contrat devra faire l'objet d'un avenant écrit et signé par les deux parties. En cas de litige, les parties s'engagent à chercher une solution amiable avant d'engager toute action judiciaire.
Fait en deux exemplaires à \textcolor{red}{\textbf{\underline{lieu}}}, le \textcolor{red}{\textbf{\underline{date}}}, en langue \textcolor{red}{\textbf{\underline{langue}}}, chacun des deux exemplaires étant considéré comme original.
\subsection{Pour le Client :}
\section{Pour le Client :}
Moi, \textit{ {{clientrepresentative}} }, signe le contrat suivant en qualité de \textit{ {{clienttitle}}}.
\vspace{3cm}
Signature :
\subsection{Pour l'Auditeur :}
\section{Pour l'Auditeur :}
Moi, \textit{ {{auditorrepresentative}}}, signe le contrat suivant en qualité de \textit{ {{auditortitle}}}.
\vspace{3cm}
Signature :
Expand Down
Loading