
    (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dS )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                  B    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dS )
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     E/home/rurouni/.hermes/hermes-agent/hermes_cli/dashboard_auth/audit.pyr   r   "   s]         
  K#M#MF'O'OF5)---r0   r   returnr   c                     t           j                            d          p"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)r:   s    r1   _resolve_log_pathr;   6   sF     :>>-((HC	i0G,H,HD::!555r0   eventfieldsr   Nonec                   d |                                 D             }t          j                            t          j        j                                                  | j        d|}t          j	        |d          dz   }t                      }	 |j                            dd           t          5  t          |dd	
          5 }|                    |           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS # t           $ r&}t"                              d|           Y d}~dS 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.
    c                ,    i | ]\  }}|t           v||S r/   )r   ).0kvs      r1   
<dictcomp>zaudit_log.<locals>.<dictcomp>H   s4       A$$$ 	
1$$$r0   )tsr<   ),:)
separators
T)parentsexist_okazutf-8)encodingNz)dashboard-auth audit log write failed: %s)items_dtdatetimenowtimezoneutc	isoformatvaluejsondumpsr;   parentmkdir_write_lockopenwrite	Exception_logwarning)r<   r=   safe_fieldsentrylinepathfes           r1   	audit_logrf   A   s      K
 ls|/00::<<  E
 :e
333d:DDE$666 	 	dC'222 a              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  E E E@!DDDDDDDDDEs`   #D 4DC)D)C-	-D0C-	1D4D DD D	D 
D>D99D>)r2   r   )r<   r   r=   r   r2   r>   )r"   
__future__r   rP   rO   enumrV   loggingr6   	threadingpathlibr   typingr   	getLoggerr   r^   LockrZ   r   r   __annotations__Enumr   r;   rf   r/   r0   r1   <module>rq      sD  
 
 
 # " " " " "        				                w""in (i ) ) )       . . . . . . . .(6 6 6 6E E E E E Er0   