
    ei=                     T   d Z ddl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mZmZ ddlZddlZddlmZmZ ddlmZ ddlmZ dd	lmZmZmZmZ  ed
edd          Zd Ze                     ddg          e eg d          d                                     Z!e                     ddg          e eg d           ej"        d          d                                                 Z#e                     ddg          e eg d           ej"        d          d                                                 Z$e                     d          e eg d          d                                     Z%e                     d          e eg d          d                                     Z&e                     ddg          e eg d          d                                      Z'e                     d!          e eg d          d"                                     Z(dS )#u   
Blueprint pour les outils annexes (DNS Checker, futurs outils...).
Accessible aux utilisateurs pouvant réaliser des diagnostics.
    )	Blueprintrender_templaterequestflashredirecturl_forcurrent_app	send_file)login_requiredcurrent_user)datetimetimezoneN)dblimiter)role_required)	DnsReport)check_all_dns_securitycalculate_total_scoreget_max_score_breakdownsanitize_domaintoolsz/toolsz../templates)
url_prefixtemplate_folderc                 x   ddl m} | j        t          j        k    rdS t          j        dk    rdS t          j        dk    r|j                            | j                  }|r`t          j        }|j	        |k    rdS t          j
        s|j
        t          j        k    rdS t          j
        r|j        |k    s|j
        |k    rdS t          j        dk    r|j                            | j                  }|rt          j        }d |j                            |j        |k    |j
        |k    z                                            D             }|j        |v rdS |j	        r,|j                            |j	                  }|r|j        |v rdS |j
        r,|j                            |j
                  }|r|j        |v rdS dS )	u?   Vérifie si l'utilisateur courant peut accéder au rapport DNS.r   )UserTadminmanagerdistributorc                     g | ]	}|j         
S  )id).0us     3/var/www/html/MCyber-Diagnostic/blueprints/tools.py
<listcomp>z)can_access_dns_report.<locals>.<listcomp>;   s&              F)modelsr   user_idr   r!   rolequerygetowner_id
manager_id	parent_idfilteralldistributor_id)reportr   ownermy_owner_idr,   team_idsr   parents           r$   can_access_dns_reportr7      s    ~((tG##tI%%
v~.. 	 &/K;..t) eo.P.Pt%  8{**eo.L.L4M))
v~.. 	 #,H dj&7&7H$8)CD' 'cee  H #x//t  *..)9::  w5AA4  88  f3x??45r&   z/dnsGET)methods)r   r   userc                      t           j                            t          j                                      t           j                                                                      d          	                                } t          d|           S )zPage d'accueil du DNS Checker.r(      ztools/dns_index.htmlrecent_reports)r   r*   	filter_byr   r!   order_by
created_atdesclimitr0   r   r>   s    r$   	dns_indexrE   Q   sg     _..|.GG	)&++--	.	.	q	 
 1.QQQQr&   z/dns/analyzePOSTz20 per hourc                  n   t           j                            dd                                          } t           j                            dd                                                                          }t           j                            dd                                          pd}| s,t          dd           t          t          d                    S t          |           d	k    r,t          d
d           t          t          d                    S t          |          }|s,t          dd           t          t          d                    S t          j        d|          sd}	 t          ||          }d|v r_|d         d         }t          j                            d|            t          d| d           t          t          d                    S t!          |          }|d         }|d         }|d         }	t#          | ||t%          j        |d          |t(          j                  }
t,          j                            |
           t,          j                                         t          j                            dt(          j         d| d|  d| d	           t9          d|
||||	t;                      d          S # t<          $ rZ}t          j                            d| d            t          d!d           t          t          d                    cY d"}~S d"}~ww xY w)#zAnalyse DNS d'un domaine.client_name domaindkim_selectordefaultu%   ❌ Veuillez entrer le nom du client.dangertools.dns_index   u2   ❌ Nom du client trop long (max 150 caractères).u2   ❌ Nom de domaine invalide. Exemple : example.com^[a-zA-Z0-9_-]+$FATAL_ERRORdetailzDNS Check fatal error:    ❌ Erreur : score	max_scorecolorFensure_asciirH   rJ   rT   results_jsonrK   r(   u   🔍 DNS Check: u    a analysé z pour 'z
' (score: )tools/dns_report.htmlr2   resultsrT   rU   score_colorprotocol_max_scoresis_historicalzErreur DNS Check: Texc_infou6   ❌ Erreur lors de l'analyse DNS. Veuillez réessayer.N)r   formr+   striplowerr   r   r   lenr   rematchr   r	   loggererrorr   r   jsondumpsr   r!   r   sessionaddcommitinfoemailr   r   	Exception)rH   rJ   rK   clean_domainr^   rk   
score_datatotal_scorerU   r_   
dns_reportes               r$   dns_analyzery   d   sb    ,""="55;;==K\h++113399;;FL$$_i@@FFHHUIM  45x@@@ 122333
;#BHMMM 122333"6**L 4BHMMM 122333 8'77 "!14(}EE G##M*84E$$%Fu%F%FGGG)%))8444G$566777 +733
 ){+	 ) #G%@@@' O
 
 

 	
z"""

;|1 ; ;| ; ; ; ;,7; ; ;	
 	
 	
 ## 7 9 9	
 	
 	
 		
  4 4 4  !9a!9!9D IIIFQQQ 122333333334s'   -A2K  C/K 
L4AL/)L4/L4z/dns/recheck-dkimc            
         t           j                            dd                                          } t           j                            dd                                                                          }t           j                            dd                                          }|s,t          dd           t          t          d                    S | sd} t          j	        d	|          s,t          d
d           t          t          d                    S t          |          }|s,t          dd           t          t          d                    S 	 t          ||          }d|v r=|d         d         }t          d| d           t          t          d                    S t          |          }t          | ||d         t          j        |d          |t           j                  }t$          j                            |           t$          j                                         t,          j                            dt           j         d| d| d           t5          d|||d         |d         |d         t7                      d          S # t8          $ rZ}t,          j                            d| d           t          dd           t          t          d                    cY d }~S d }~ww xY w)!u2   Re-vérifie DKIM avec un sélecteur personnalisé.rH   rI   rJ   new_dkim_selectoru'   ❌ Veuillez entrer un sélecteur DKIM.warningrN   ClientrP   uD   ❌ Sélecteur DKIM invalide (lettres, chiffres, tirets uniquement).rM   u   ❌ Nom de domaine invalide.rQ   rR   rS   rT   FrW   rY   u   🔍 DNS Re-check DKIM:  - u    avec sélecteur ''r\   rU   rV   r]   zErreur DNS Re-check: Trb   u'   ❌ Erreur lors de la re-vérification.N)r   rd   r+   re   rf   r   r   r   rh   ri   r   r   r   r   rl   rm   r   r!   r   rn   ro   rp   r	   rj   rq   rr   r   r   rs   rk   )	rH   rJ   new_selectorrt   r^   rk   ru   rw   rx   s	            r$   dns_recheck_dkimr      s    ,""="55;;==K\h++113399;;F<##$7<<BBDDL 47CCC 122333  8'66 4TV^___ 122333"6**L 4,h777 122333*4(|DDG##M*84E)%))8444G$566777*733
 #W%G%@@@& O
 
 

 	
z"""

0|'9 0 0l 0 0 ,0 0 0	
 	
 	

 #W% -"7+ 7 9 9	
 	
 	
 		
  4 4 4  !<!<!<t LLL7BBB 122333333334s'   AJ +C,J 
K<"AK71K<7K<z/dns/historyc            
         t           j                            ddt                    } t           j                            dd                                          }t           j                            dd                                          }d}t
          j                            t          j	        	          }|rd
dl
m}  ||          }|                    t          j        t
          j                            d| dd          t
          j                            d| dd                              }|dk    r3|                    t
          j                                                  }n|dk    r3|                    t
          j                                                  }n|dk    rP|                    t
          j                                        t
          j                                                  }n0|dk    rO|                    t
          j                                        t
          j                                                  }n|dk    rO|                    t
          j                                        t
          j                                                  }n|dk    rO|                    t
          j                                        t
          j                                                  }n1|                    t
          j                                                  }|                    | |d          }t1          d|j        |||          S )z8Historique complet des analyses DNS avec filtres et tri.page   )typesearchrI   sortdate   r<   r   )escape_like_pattern%\)escapedate_asc
score_desc	score_ascclientrJ   F)r   per_page	error_outztools/dns_history.html)reports
paginationcurrent_searchcurrent_sort)r   argsr+   intre   r   r*   r@   r   r!   utilsr   r/   r   or_rH   ilikerJ   rA   rB   rC   ascrT   paginater   items)r   r   r   r   r*   r   search_escapedr   s           r$   dns_historyr     s    <FAC00D\h++1133F<FF++1133DHO%%lo%>>E  
------,,V44F%++,A,A,A,A$+OO &&'<>'<'<'<T&JJ 
 
 v~~y388::;;			y37799::			y3355y7K7P7P7R7RSS			y2244i6J6O6O6Q6QRR			y488::I<P<U<U<W<WXX			y/3355y7K7P7P7R7RSSy388::;;THNNJ     r&   z/dns/report/<string:report_id>)r   r   r:   r   c           
         t           j                            |           }t          |          sXt	          dd           t
          j        dk    rt          t          d                    S t          t          d                    S 	 t          j
        |j                  }n# t          j        $ r i }Y nw xY wt          |          }t          d|||j        |d         |d         t!                      d	
          S )u    Voir un rapport DNS sauvegardé.   ❌ Accès non autorisé.rM   r   z!distributor.distributor_dashboardrN   r\   rU   rV   Tr]   )r   r*   
get_or_404r7   r   r   r)   r   r   rl   loadsrZ   JSONDecodeErrorr   r   rT   r   )	report_idr2   r^   ru   s       r$   dns_view_reportr   ?  s    _''	22F !(( 4)8444--G$GHHIII 122333*V011    'w//Jl[)w'355	 	 	 	s   B" "B65B6z%/dns/report/<string:report_id>/deletec           	         t           j                            |           }t          |          s,t	          dd           t          t          d                    S 	 |j        }|j        }t          j
                            |           t          j
                                         t          j                            dt           j         d| d| d           t	          dd	           ng# t$          $ rZ}t          j
                                         t          j                            d
|            t	          dd           Y d}~nd}~ww xY wt          t          d                    S )zSupprimer un rapport DNS.r   rM   rN   u   🗑️ DNS Report supprimé: r~   z (r[   u   ✅ Rapport supprimé.successz Erreur suppression rapport DNS: u"   ❌ Erreur lors de la suppression.Nztools.dns_history)r   r*   r   r7   r   r   r   rH   rJ   r   rn   deleterp   r	   rj   rq   r   rr   rs   rollbackrk   )r   r2   r   rJ   rx   s        r$   dns_delete_reportr   f  so    _''	22F !(( 4)8444 122333>#

&!!!

W\-?WWFWWfWWW	
 	
 	
 	&	2222 > > >

  !GA!G!GHHH2H========>
 G/00111s   BC+ +
E5AE

Ez"/dns/report/<string:report_id>/pdfc                    t           j                            |           }t          |          s,t	          dd           t          t          d                    S 	 t          j        |j	                  }ddl
m}  |||          }t          j        dd|j                  dd	         }d
| d|j         d}t           j                            dt&          j         d|j                    t+          |dd|          S # t,          $ r\}t           j                            d| d           t	          dd           t          t          d|                     cY d}~S d}~ww xY w)u$   Télécharger le rapport DNS en PDF.r   rM   rN   r   )generer_pdf_dns_rapportz[^a-zA-Z0-9_-]_N   DNS_Rapport_z.pdfu   📥 PDF DNS téléchargé: r~   zapplication/pdfT)mimetypeas_attachmentdownload_nameu   Erreur génération PDF DNS: rb   u*   ❌ Erreur lors de la génération du PDF.ztools.dns_view_report)r   )r   r*   r   r7   r   r   r   rl   r   rZ   services.pdf_servicer   rh   subrH   rJ   r	   rj   rq   r   rr   r
   rs   rk   )r   r2   r^   r   
pdf_buffer	safe_namefilenamerx   s           r$   dns_download_pdfr     s    _''	22F !(( 4)8444 122333O*V011 	A@@@@@,,VW==
 F,c63EFFssK	A)AAfmAAAV<+=VV&BTVV	
 	
 	
 &"	
 
 
 	
  O O O  !D!D!Dt TTT:HEEE 79MMMNNNNNNNNOs    B"C? ?
E%	AE E% E%))__doc__flaskr   r   r   r   r   r   r	   r
   flask_loginr   r   r   r   rl   rh   
extensionsr   r   
decoratorsr   r'   r   services.dns_servicer   r   r   r   __name__r   r7   routerE   rD   ry   r   r   r   r   r   r    r&   r$   <module>r      s   
 h g g g g g g g g g g g g g g g g g g g 4 4 4 4 4 4 4 4 ' ' ' ' ' ' ' '  				 " " " " " " " " $ $ $ $ $ $                  		'8.YYY. . .h VeW%%+++,,	R 	R -,  &%	R  ^fX..+++,,}K4 K4  -,  /.K4d  6(33+++,,}C4 C4  -,  43C4T ^+++,,- - -,  -h -..:::;;  <;  /.H 4vhGG:::;;2 2 <;  HG2B 122:::;;$O $O <;  32$O $O $Or&   