
    _i	5                     f   d dl mZmZmZmZmZmZmZmZm	Z	 d dl
mZmZ d dlZd dlZd dlmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ  ed	ed
          Zd Ze                     dddg          ee ej!        d          d                                                 Z"e                     d          ed                         Z#e                     ddg          ed                         Z$e                     d          e ej!        d          d                                     Z%dS )    )		Blueprintrender_templaterequestredirecturl_forflashcurrent_app	send_fileabort)login_requiredcurrent_userN)datetimetimezone	timedelta)dblimiter)RapportUser)calculer_cybernote_et_rapport)audit_permission_requiredauditz../templates)template_folderc                 p    	 t          j        | d           dS # t          t          t          f$ r Y dS w xY w)uB   Valide qu'une chaîne est un UUID valide (défense en profondeur).   )versionTF)uuid_libUUID
ValueErrorAttributeError	TypeError)uuid_strings    3/var/www/html/MCyber-Diagnostic/blueprints/audit.pyvalidate_uuidr#      sJ    k1----t	2   uus    55z/nouveau_auditGETPOST)methodsz100 per hourc            
      >
   t           j        dk    rt           j                            dd                                          } | s!t          dd           t          d          dfS t          |           dk    r!t          d	d           t          d          dfS t          j	        t          j                  t          d
          z
  }t          j                            t          j        t"          j        k    t          j        | k    t          j        |k                                              }|rt          d|  dd           i }t           j                                        D ]\  }}|dvr|||<   t           j                            d          |d<   t           j                            d          |d<   t           j                            d          |d<   t           j                            d          |d<   i }|                                D ]\  }}t1          |t2                    r|||<    t1          |t4                    r|dd         ||<   Ct1          |t6          t8          f          r|||<   et5          |          dd         ||<   |}	 t;          |          \  }}t=          dt?          d|                    }nt# t@          $ rg}	tB          j"        #                    dt"          j         d|	 d           t          dd           tI          tK          d                    cY d}	~	S d}	~	ww xY wt          t"          j        | |t          j	        t          j                  tM          j'        |          tM          j'        |                    }
	 tP          j)        *                    |
           tP          j)        +                                 tB          j"        ,                    d|
j         d t"          j                    dd!l-m.}  |t"          j        |
j        | |           t          d"| d#d$           tI          tK          d%|
j        &                    S # t@          $ r}	tP          j)        /                                 tB          j"        #                    d't"          j         d|	 d           dd(l-m0}  |d)d*d+|  |	           t          d,d           tI          tK          d                    cY d}	~	S d}	~	ww xY wt          d          S )-uF   Affiche le formulaire du questionnaire d'audit et gère sa soumission.r%   
nom_client z)Le nom de l'entreprise/client est requis.dangerzquestionnaire.htmli     u=   Le nom de l'entreprise ne peut pas dépasser 150 caractères.   )minutesu0   ⚠️ Vous avez déjà créé un rapport pour 'z' il y a moins de 5 minutes.warning)q_sauvegarde_typesq_frequenceq_os_postesq_os_serveursr/   r0   r1   r2   Ni  r   d   zErreur calcul Cybernote user : Texc_infou3   Erreur interne lors du calcul. Veuillez réessayer.main.dashboard)user_idr(   score_totaldate_creationraw_datapreconisations_jsonu   Rapport créé: 
 par user )log_report_createdu"   ✅ Cybernote calculée ! Score : z/100.successaudit.rapport_detail
rapport_idzErreur DB save rapport user log_db_errorREPORTREPORT_CREATEDu   Échec création rapport pour u5   Erreur lors de l'enregistrement. Veuillez réessayer.)1r   methodformgetstripr   r   lenr   nowr   utcr   r   queryfilterr8   r   idr(   r:   firstitemsgetlist
isinstanceliststrintfloatr   maxmin	Exceptionr	   loggererrorr   r   jsondumpsr   sessionaddcommitinfoservices.logger_servicer>   rollbackrD   )r(   recent_cutoffexisting	form_datakeyvaluesanitized_datar9   preconisations_dataenouvel_auditr>   rD   s                r"   nouveau_auditro   !   s2    ~\%%lB77==??
 	>=xHHH"#788#==z??S  QS[\\\"#788#== !X\22Yq5I5I5II=''O|.*,!]2
 
 %''	 	  	zmZmmmoxyyy 	 ",,,.. 	' 	'JC___!&	# +2,*>*>?S*T*T	&'#*<#7#7#F#F	- #*<#7#7#F#F	- %,\%9%9/%J%J	/" #//++ 	7 	7JC%&& 7&+s##E3'' 7&+DSDks##EC<00 7&+s## '*%jj#&6s##"		7/LY/W/W,K,aS+!6!677KK 	7 	7 	7$$%[\_%[%[XY%[%[fj$kkkGRRRG$45566666666	7  O!#",x|44Z	** $
+> ? ?
 
 
	7JNN<(((J##$c|$c$cR^Ra$c$cddd CBBBBB|[YYYI{III9UUUG$:|WWWXXX 		7 		7 		7J!!!$$%ZLO%Z%ZWX%Z%Zei$jjj =<<<<<L#35bV`5b5bdefffI8TTTG$45566666666		7 /000s?   0K 
L9AL4.L94L9C
Q' '
T1BTTTz/rapport/<string:rapport_id>c           	      
   t          |           s>t          j                            d|  dt          j                    t          d           t          j        	                    |           }|j
        t          j        k    }t          t          dd          dk    o#t          |j        dd          t          j        k    }t          t          dd          d	k    }|s`|s^|s\t          j                            d
|  dt          j         dt          j         d           t          dd           t          d           	 |j        rFt!          j        |j                  }|                    di           }|                    dg           }ni }g }d}n`# t           j        t(          f$ rG}	t          j                            d|  d|	 d           t          dd           i }g }d}Y d}	~	nd}	~	ww xY wt-          d||||          S )uE   Affiche les détails et les préconisations d'un rapport spécifique.   UUID invalide tenté: r=     roler)   manager
manager_idNadminu   Accès refusé rapport : user z (role: )u8   Vous n'avez pas l'autorisation d'accéder à ce rapport.r*     detail_scorespreconisations_detailr3   zErreur data rapport r4   Tr5   u   Données du rapport corrompues.zrapport.html)rapport	max_scorescores_blocspreconisations_finales)r#   r	   r\   r.   r   rP   r   r   rN   
get_or_404r8   getattrauteurrs   r   r<   r^   loadsrI   JSONDecodeErrorr    r]   r   )
rB   r|   is_owner
is_manageris_admin	data_jsonr~   r   r}   rm   s
             r"   rapport_detailr      s7    $$ ""#cJ#c#cR^Ra#c#cdddc


m&&z22G <?2H,33y@ Q'.,==P fb11W<H 
 h ""fjffffR^Rcfff	
 	
 	
 	H(SSSc


& 	(
7#>??I$=="==L%.]]3JB%O%O""L%'"		 ),     !I
!I!Ia!I!ITX YYY0(;;;!#						 !5   s   =AF G.'=G))G.z#/rapport/delete/<string:rapport_id>c                    t          |           s>t          j                            d|  dt          j                    t          d           t          j        	                    |           }|j
        t          j        k    }t          t          dd          dk    }|sP|sNt          j                            d|  dt          j                    t          d	d
           t          d           |j
        }|j        }	 t          j                            |           t          j                                         t          j                            d|  dt          j                    ddlm}  |t          j        |           t          d| dd           n# t*          $ r}t          j                                         t          j                            d|  d| d           ddlm}  |ddd|  |           t          dd
           t3          t4          j        pt9          d                    cY d}~S d}~ww xY w|r |st3          t9          d|                    S t3          t9          d                    S ) u-   Supprime un rapport d'audit (CSRF protégé).rq   r=   rr   rs   r)   rv   u-   Tentative suppression non autorisée rapport rw   u   Action non autorisée.r*   ry   zRapport u    supprimé par user r   )log_report_deletedu   ✅ Rapport "u   " supprimé.r?   zErreur suppression rapport r4   Tr5   rC   rE   REPORT_DELETEDu   Échec suppression rapport z(Erreur technique lors de la suppression.r7   Nzadmin.admin_user_detail)r8   )r#   r	   r\   r.   r   rP   r   r   rN   r   r8   r   r   r(   r   r`   deleterb   rc   rd   r   r[   re   r]   rD   r   r   referrerr   )	rB   r|   r   r   owner_idr(   r   rm   rD   s	            r"   delete_rapportr      s    $$ ""#cJ#c#cR^Ra#c#cdddc


m&&z22G <?2Hfb11W<H  ""`J``|``	
 	
 	
 	&111c


H#JG

'"""

 \: \ \<? \ \]]] 	?>>>>><?J7776j666	BBBB 	G 	G 	G

  !Pz!P!PQ!P!P[_ ``` 	988888X/1[z1[1[]^___8(CCC(EG4D,E,EFFFFFFFF	G  3 3 98LLLMMM 011222s    =BF 
I$BH=7I=Iz /rapport/<string:rapport_id>/pdfc                    t          |           s>t          j                            d|  dt          j                    t          d           t          j        	                    |           }|j
        t          j        k    }t          t          dd          dk    o#t          |j        dd          t          j        k    }t          t          dd          d	k    }|sB|s@|s>t          j                            d
|  dt          j                    t          d           	 |j        rFt          j        |j                  }|                    di           }|                    dg           }ni }g }|j        rt          j        |j                  ni }i }	|                                D ],\  }
}|d|	|
<   	 t'          |          |	|
<   !#  d|	|
<   Y *xY wddlm}  |||	||          }d                    d |j        D                                                                           dd          }t5          |j                  dd         }d| d| d}t7          |dd|          }d|j        d<   t          j                            d|  dt          j                    ddlm}  |t          j        | |j                   |S # t@          $ r|}t          j        !                    d|  d | d!           dd"lm"}  |t          j        | |           tG          d#d$           tI          tK          d%| &                    cY d}~S d}~ww xY w)'u2   Génère et télécharge le rapport au format PDF.u   UUID invalide tenté PDF: r=   rr   rs   r)   rt   ru   Nrv   u   Accès refusé PDF rapport rw   ry   rz   r{   g        r   )generer_pdf_rapportc                 B    g | ]}|                                 s|d v |S )) -_)isalnum).0cs     r"   
<listcomp>zrapport_pdf.<locals>.<listcomp>2  s1    #i#i#i!QYY[[#iTUYhThThAThThTh    r   r      Rapport_z.pdfzapplication/pdfT)mimetypeas_attachmentdownload_namez.no-store, no-cache, must-revalidate, max-age=0zCache-Controlu   PDF généré rapport )log_pdf_downloadedzErreur PDF rapport r4   r5   )log_pdf_erroru&   Erreur lors de la génération du PDF.r*   r@   rA   )&r#   r	   r\   r.   r   rP   r   r   rN   r   r8   r   r   r<   r^   r   rI   r;   rR   rX   services.pdf_servicer   joinr(   rJ   replacerV   r
   headersrc   rd   r   r[   r]   r   r   r   r   )rB   r|   r   r   r   r   
raw_scoresr   donnees_formulairer~   kvr   
pdf_buffersafe_client_nameshort_idfilenameresponser   rm   r   s                        r"   rapport_pdfr      s    $$ ""#g
#g#gVbVe#g#ghhhc


m&&z22G <?2H,33y@ Q'.,==P fb11W<H 
 h ""N*NN\_NN	
 	
 	
 	c


8P& 	(
7#>??I";;J%.]]3JB%O%O""J%'"=D=MUTZ(8999SU$$&& 	* 	*DAqy"&Q*&+AhhLOO*&)LOOO<<<<<<((,@VXjkk
 77#i#iw/A#i#i#ijjpprrzz{~  AD  E  Ewz??2A2&?.?????&"	
 
 
 -]) ` ` `| ` `aaa 	?>>>>><?J8JKKK P P P  !Hz!H!HQ!H!HSW XXX 	:99999loz15556AAA 6:NNNOOOOOOOOPs9   BK 6G	K 	GC7K 
MA1M	M	M)&flaskr   r   r   r   r   r   r	   r
   r   flask_loginr   r   r^   uuidr   r   r   r   
extensionsr   r   modelsr   r   services.scoring_servicer   
decoratorsr   __name__r   r#   routelimitro   r   r   r    r   r"   <module>r      s>   o n n n n n n n n n n n n n n n n n n n n n 4 4 4 4 4 4 4 4      2 2 2 2 2 2 2 2 2 2 # " " " " " " "                 B B B B B B 0 0 0 0 0 0	'8^DDD   v77~k1 k1    87k1\ +,,. .  -,.h 2VHEE13 13  FE13h /00~NP NP   10NP NP NPr   