
    `gjy                        U d Z ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZ  ej                  e      Z e	j"                         Z eh d      Zded<    G d	 d
ej,                        ZddZddZy)u  Audit log for dashboard-auth events.

Profile-aware location: ``$HERMES_HOME/logs/dashboard-auth.log``.
Format: one JSON object per line. Token-like fields are stripped before
serialisation to avoid leaking refresh tokens or JWTs to disk.

This module deliberately keeps a minimal dependency surface — no imports
from ``hermes_constants`` or other hermes_cli modules — so it can be
imported safely from middleware code that loads early in the startup
sequence.
    )annotationsN)Path)Any>	   codestatecookieticketaccess_tokenAuthorizationauthorizationcode_verifierrefresh_token	frozenset_REDACTED_FIELDSc                  @    e 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y)
AuditEventzmEvent types written to dashboard-auth.log.

    Values are the literal ``event`` field on the JSON line.
    login_startlogin_successlogin_failurelogoutrefresh_successrefresh_failurerevokesession_verify_failurews_ticket_mintedws_ticket_rejectedtoken_auth_successtoken_auth_failureN)__name__
__module____qualname____doc__LOGIN_STARTLOGIN_SUCCESSLOGIN_FAILURELOGOUTREFRESH_SUCCESSREFRESH_FAILUREREVOKESESSION_VERIFY_FAILUREWS_TICKET_MINTEDWS_TICKET_REJECTEDTOKEN_AUTH_SUCCESSTOKEN_AUTH_FAILURE     R/root/.hermes/venv/lib/python3.12/site-packages/hermes_cli/dashboard_auth/audit.pyr   r   "   sJ    
  K#M#MF'O'OF5)---r0   r   c                     t         j                  j                  d      xs  t        t	        j
                         dz        } t	        |       dz  dz  S )a
  ``$HERMES_HOME/logs/dashboard-auth.log`` with the standard fallback.

    Mirrors ``hermes_constants.get_hermes_home`` semantics: env var wins,
    else ``~/.hermes``. A local copy avoids an import cycle with the
    middleware which lives below ``hermes_cli``.
    HERMES_HOMEz.hermeslogszdashboard-auth.log)osenvirongetstrr   home)r9   s    r1   _resolve_log_pathr:   6   s@     ::>>-(HC		i0G,HD:!555r0   c                   |j                         D ci c]  \  }}|t        vr|| }}}t        j                  j	                  t        j
                  j                        j                         | j                  d|}t        j                  |d      dz   }t               }	 |j                  j                  dd       t        5  t        |dd	      5 }|j!                  |       d
d
d
       d
d
d
       y
c c}}w # 1 sw Y   xY w# 1 sw Y   y
xY w# t"        $ r }	t$        j'                  d|	       Y d
}	~	y
d
}	~	ww xY w)u   Append one event to the audit log.

    Token-like fields are dropped. Missing log directory is created.
    Write failures are logged at WARNING but never raise — auth must not
    fail because the audit logger broke.
    )tsevent),:)
separators
T)parentsexist_okazutf-8)encodingNz)dashboard-auth audit log write failed: %s)itemsr   _dtdatetimenowtimezoneutc	isoformatvaluejsondumpsr:   parentmkdir_write_lockopenwrite	Exception_logwarning)
r=   fieldskvsafe_fieldsentrylinepathfes
             r1   	audit_logra   A   s(     A$$ 	
1K 
 lls||//0::< E
 ::e
3d:DDE$6 	dC'2 a	 	 	 	  E@!DDEsS   C:%#D DD )D1D  D		DDD D 	E!D<<E)returnr   )r=   r   rX   r   rb   None)r"   
__future__r   rH   rG   enumrN   loggingr5   	threadingpathlibr   typingr   	getLoggerr   rV   LockrR   r   r   __annotations__Enumr   r:   ra   r/   r0   r1   <module>rn      s{   
 #     	   w"inn ( )  ) . .(6Er0   