
    Ii                     x    d Z ddlmZ ddlmZmZ ddlmZ ddlZddl	m	Z	 ddl
mZ ddZd	 Zd
 Zd Zd ZddZy)u-   Módulo de auditoria e logging de segurança.    wraps)requestcurrent_app)security_loggerN)datetimesend_discord_audit_logc                    t        j                         j                         | t        j                  t        j
                  j                  |d}t        t        d      rJt        j                  r:t        j                  j                  |d<   t        j                  j                  |d<   t        j                  |      }|dk(  rt        j                  |       y|dk(  rt        j                  |       yt        j                   |       y)u!   Registra um evento de segurança.)	timestamp
event_type
ip_address
user_agentdetailsuseruser_idusernameWARNINGERRORN)r   utcnow	isoformatr   remote_addrr   stringhasattrr   idr   jsondumpsr   warningerrorinfo)r   r   levellog_datalog_messages        1/srv/www/ollama/chat-ollama/src/security/audit.pylog_security_eventr%   
   s     __&002 ))((//H wGLL%lloo&||44**X&K	,	'	k*[)    c                 .     t                fd       }|S )zDecorator para auditar rotas.c            
         t        dt        j                  t        j                  t	        t        j
                        t        j                  rt	        t        j                        nd d       	  | i |}t        dt        j                  t        j                  t        |dd      d       |S # t        $ r=}t        dt        j                  t        j                  t        |      dd	
        d }~ww xY w)NROUTE_ACCESS)methodpathquery_params	form_dataROUTE_SUCCESSstatus_code   )r*   r+   r/   ROUTE_ERROR)r*   r+   r   r   r!   )
r%   r   r*   r+   dictargsformgetattr	Exceptionstr)r4   kwargsresponseefs       r$   decorated_functionz'audit_route.<locals>.decorated_function#   s    !.. $W\\ 23:<<T',,/T		
	$)&)H%nn#LL#*8]C#H O 
	%nn#LL V
  
	s   0A B1 1	C7:8C22C7r   )r<   r=   s   ` r$   audit_router>   !   s"    
1X" "H r&   c                 X    t        d| |t        j                  d|sd       yd       y)u%   Registra tentativa de autenticação.AUTH_ATTEMPT)r   successr   r   INFOr2   Nr%   r   r   )r   rA   s     r$   audit_auth_attemptrD   J   s2     !--	

  'i -3r&   c                 X    t        d| |t        j                  d|sd       yd       y)u   Registra alteração de senha.PASSWORD_CHANGE)r   rA   r   r   rB   r2   NrC   )r   rA   s     r$   audit_password_changerG   V   s2    !--	

  'i -3r&   c                 Z    t        d| ||t        j                  d|sd       yd       y)zRegistra upload de arquivo.FILE_UPLOAD)filename	file_sizerA   r   r   rB   r2   NrC   )rJ   rK   rA   s      r$   audit_file_uploadrL   b   s5     "!--		
  'i	 -3	r&   c                     ddl m} ddlm} t	        |dd       }|r|j
                  nd }t        d|  d| d| d| d	| d
|        ddlm}  || |||||d        y )Nr   )current_user)r   r   z![AUDIT] log_audit called: action=z
, user_id=z, object_type=z, object_id=z
, details=z, ip=r	   )actionr   object_type	object_idr   r   
created_at)	flask_loginrN   flaskr   r6   r   printsrc.discord.discord_webhookr
   )	rO   rP   rQ   r   rN   r   r   ipr
   s	            r$   	log_auditrX   o   s    (lD$/G '		TB	-fXZyWbVccopyoz  {E  FM  EN  NS  TV  SW  X  YBr&   )rB   )NNN)__doc__	functoolsr   rT   r   r   src.securityr   r   r   rV   r
   r%   r>   rD   rG   rL   rX    r&   r$   <module>r]      s9    3  & (   >*.'R

r&   