
    _i/                         d Z ddlmZmZ ddlmZ ddlmZ ddlZd Z	d Z
d Zd$d
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d%d Z"d%d!Z#d" Z$d# Z%dS )&uz   
Service centralisé de logging pour traçabilité et debug.
Utilise le modèle AuditLog pour persister les événements.
    )requestcurrent_app)AuditLog)dbNc                  h   t           j                            d          rJt           j                            d                              d          d                                         S t           j                            d          rt           j                            d          S t           j        S )u-   Récupère l'IP du client (gère les proxies)zX-Forwarded-For,r   z	X-Real-IP)r   headersgetsplitstripremote_addr     :/var/www/html/MCyber-Diagnostic/services/logger_service.pyget_client_ipr      s    ,-- #""#455;;C@@CIIKKK			[	)	) #"";///""r   c                  R    t           j                            dd          dd         S )u"   Récupère le User-Agent du clientz
User-AgentUnknownN   )r   r	   r
   r   r   r   get_user_agentr      s#    ?|Y77==r   c           	      p    t          j        ddd| | t                      t                                 dS )u   Connexion réussieAUTHLOGIN_SUCCESSu   Connexion réussie : categoryactionmessageuser_idip
user_agentN)r   log_infor   r   r   emails     r   log_auth_successr#      sJ    ///??!##     r   Identifiants invalidesc           	      Z    t          j        ddd|  |dt                      d           dS )u    Tentative de connexion échouéer   LOGIN_FAILEDu#   Tentative de connexion échouée : u,   Vérifier identifiants ou compte désactivéWARNINGr   r   r   error_detailssuggested_fixr   levelNr   	log_errorr   )r"   reasons     r   log_auth_failedr/   (   sG    =e==D??     r   c                 V    t          j        ddd| | t                                 dS )u   Déconnexionr   LOGOUTu   Déconnexion : r   r   r   r   r   Nr   r    r   r!   s     r   
log_logoutr4   4   sA    )%))??     r   c                 V    t          j        ddd| | t                                 dS )zActivation 2FAr   2FA_ENABLEDu   2FA activée : r2   Nr3   r!   s     r   log_2fa_enabledr7   >   sA    )%))??     r   c                 V    t          j        ddd| | t                                 dS )u   Désactivation 2FAr   2FA_DISABLEDu   2FA désactivée : r2   Nr3   r!   s     r   log_2fa_disabledr:   H   sA    -e--??     r   c                 V    t          j        ddd| | t                                 dS )zChangement mot de passer   PASSWORD_CHANGEDu   Mot de passe modifié : r2   Nr3   r!   s     r   log_password_changedr=   R   sA    !2522??     r   c           	      `    t          j        ddd| d| d| |t                                 dS )u   Création utilisateurUSERUSER_CREATEDu   Utilisateur créé : u	    (Rôle: )r   r   r   r   	target_idr   Nr3   )admin_idnew_user_idnew_user_emailroles       r   log_user_createdrH   `   sO    HHHHHH??     r   c           	      ^    t          j        ddd| d| | |t                                 dS )zModification utilisateurr?   USER_UPDATEDu   Utilisateur modifié : z | Changements : rB   Nr3   )rD   target_user_idtarget_emailchangess       r   log_user_updatedrN   k   sL    R,RRRR ??     r   c                 V    t          j        ddd| | t                                 dS )zSuppression utilisateurr?   USER_DELETEDu   Utilisateur supprimé : r2   Nr3   )rD   rL   s     r   log_user_deletedrQ   v   sA    9<99??     r   c           	      X    t          j        ddd| | |t                                 dS )zActivation compter?   USER_ACTIVATEDu   Compte activé : rB   Nr3   rD   rK   rL   s      r   log_user_activatedrU      sD    2L22 ??     r   c           	      X    t          j        ddd| | |t                                 dS )u   Désactivation compter?   USER_DEACTIVATEDu   Compte désactivé : rB   Nr3   rT   s      r   log_user_deactivatedrX      sD    !666 ??     r   c           	      `    t          j        ddd| d| d| |t                                 dS )u   Création rapportREPORTREPORT_CREATEDu   Rapport créé : z
 | Score: %rB   Nr3   )r   
rapport_idclient_namescores       r   log_report_createdr`      sO    CKCC5CCC??     r   c                 V    t          j        ddd| | t                                 dS )zSuppression rapportrZ   REPORT_DELETEDu   Rapport supprimé : r2   Nr3   )r   r^   s     r   log_report_deletedrc      sA    4{44??     r   c           	      X    t          j        ddd| | |t                                 dS )u   Téléchargement PDFrZ   PDF_DOWNLOADEDu   PDF téléchargé : rB   Nr3   )r   r]   r^   s      r   log_pdf_downloadedrf      sD    4{44??     r   c           	      `    t          j        ddd| d| d| |t                                 dS )zUpload documentADMINDOCUMENT_UPLOADEDu   Document uploadé : u    (Catégorie: rA   rB   Nr3   )rD   doc_id	doc_titler   s       r   log_document_uploadedrl      sO    "KyKKKKK??     r   c                 V    t          j        ddd| | t                                 dS )zSuppression documentrh   DOCUMENT_DELETEDu   Document supprimé : r2   Nr3   )rD   rk   s     r   log_document_deletedro      sA    !3	33??     r   c           	      Z    t          j        ddd| d| |t                                 dS )u   Création bandeaurh   ANNOUNCEMENT_CREATEDu   Bandeau créé (Cible: rA   rB   Nr3   )rD   announcement_idtargets      r   log_announcement_createdrt      sG    %3&333!??     r   c                 V    t          j        ddd| | t                                 dS )zUpload logo white-labelrh   LOGO_UPLOADEDu   Logo personnalisé uploadé : r2   Nr3   r!   s     r   log_logo_uploadedrw      sA    888??     r   c                     t          j        | | d|t          |          j         dt	          |           dt          j                     dt                      d           dS )u   Erreur base de données	_DB_ERROR: 

ul   1. Vérifier connexion PostgreSQL
2. Vérifier migrations DB (flask db upgrade)
3. Consulter logs PostgreSQLCRITICALr(   Nr   r-   type__name__str	traceback
format_excr   )r   r   r   	exceptions       r   log_db_errorr      sy    ###i1aaS^^aaI]I_I_aa G??     r   c                     t          j        ddd| dt          |          j         dt	          |           dt          j                     d| |t                      d		  	         d
S )u   Erreur génération PDFrZ   PDF_GENERATION_ERRORu%   Erreur génération PDF (Rapport ID: rA   rz   r{   u   1. Supprimer cache Python : find . -name '__pycache__' -type d -exec rm -rf {} +
2. Vérifier pdf_service.py (indentation, imports)
3. Redémarrer FlaskERROR)	r   r   r   r)   r*   r   rC   r   r+   Nr}   )r   r]   r   s      r   log_pdf_errorr      s    %E
EEEi1aaS^^aaI]I_I_aa s??
 
 
 
 
 
r   c                     t          j        ddd|  d| t          |          j         dt	          |           dt          j                     dd	           d
S )zErreur envoi emailEMAILEMAIL_SEND_ERRORu   Échec envoi email à z
 | Sujet: rz   r{   u   1. Vérifier config SMTP (MAIL_SERVER, MAIL_PORT)
2. Vérifier identifiants MAIL_USERNAME/PASSWORD
3. Tester connexion SMTP manuellementr   )r   r   r   r)   r*   r+   N)r   r-   r~   r   r   r   r   )	recipientsubjectr   s      r   log_email_errorr     sy    !GGGgGGi1aaS^^aaI]I_I_aa c     r   c           
          t          j        ddd| d| d|  dt                       d| t                      d	           d
S )u   Tentative accès non autoriséSYSTEMUNAUTHORIZED_ACCESSu   Accès refusé : z sur 	User ID:  | IP: u!   Vérifier permissions utilisateurr'   r   r   r   r)   r*   r   r   r+   Nr,   )r   resourcer   s      r   log_unauthorized_accessr     sf    $;F;;;;C'CC-//CC9??	 	 	 	 	 	r   c           
          t          j        ddd| d|  dt                       d| t                      d           d	S )
u   Rate limiting déclenchér   RATE_LIMIT_EXCEEDEDu   Rate limit dépassé : r   r   u%   Comportement suspect ou bot détectér'   r   Nr,   )r   endpoints     r   log_rate_limit_exceededr     s^    $4(44C'CC-//CC=??	 	 	 	 	 	r   c                     t          j        | ||t          |          j         dt	          |           dt          j                     d|t                      d           dS )u   Erreur génériquerz   r{   u3   Consulter stack trace complète et logs applicatifsr   r   Nr}   )r   r   r   r   r   s        r   log_generic_errorr   +  sp    i1aaS^^aaI]I_I_aaK??	 	 	 	 	 	r   c           	          ddl m} d| d| d| d}|r|d|dd	          d
z  }t          j        dd|| t	                      t                                 dS )z4Log quand un manager atteint sa limite de connexionsr   r   z#Limite de connexions atteinte pour z (/rA   z - Session N   u!   ... déconnectée automatiquementr   SESSION_LIMIT_REACHEDr   flaskr   r   r    r   r   )r   r"   current_sessionsmax_sessionsdisconnected_session_idr   r   s          r   log_session_limit_reachedr   <  s    _E__=M__P\___G `_!8!!<____&??!##     r   c           
          ddl m} d| d| d| }t          j        dd|| |t	                      t                                 d	S )
z?Log quand un admin modifie la limite de connexions d'un managerr   r   u$   Limite de connexions modifiée pour z : u    → rh   SESSION_LIMIT_CHANGEDr   r   r   r   rC   r   r   Nr   )rD   rK   rL   	old_limit	new_limitr   r   s          r   log_session_limit_changedr   M  su    a\aaiaaV_aaG& ??!##     r   c           
          ddl m} d| d| }t          j        dd|| |t	                      t                                 dS )	uC   Log quand un admin déconnecte toutes les sessions d'un utilisateurr   r   u-   Déconnexion forcée de toutes les sessions (z) pour rh   FORCE_DISCONNECT_ALLr   Nr   )rD   rK   rL   sessions_countr   r   s         r   log_force_disconnect_allr   ]  sm    cnccUaccG% ??!##     r   )r$   )N)&__doc__r   r   r   modelsr   
extensionsr   r   r   r   r#   r/   r4   r7   r:   r=   rH   rN   rQ   rU   rX   r`   rc   rf   rl   ro   rt   rw   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s%   
 ' & & & & & & &                # # #> > >	 	 	
 
 
 
        	 	 		 	 	  	 	 		 	 		 	 	  	 	 		 	 	  	 	 	  
 
 
  	 	 	       "   "       r   