
    j                        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                  :    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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_rejectedN)__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     >/usr/local/lib/hermes-agent/hermes_cli/dashboard_auth/audit.pyr   r   "   sQ         
  K#M#MF'O'OF5)-r,   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)r6   s    r-   _resolve_log_pathr7   4   sF     :>>-((HC	i0G,H,HD::!555r,   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      r-   
<dictcomp>zaudit_log.<locals>.<dictcomp>F   s4       A$$$ 	
1$$$r,   )tsr8   ),:)
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dumpsr7   parentmkdir_write_lockopenwrite	Exception_logwarning)r8   r9   safe_fieldsentrylinepathfes           r-   	audit_logrb   ?   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>)r.   r   )r8   r   r9   r   r.   r:   )r    
__future__r   rL   rK   enumrR   loggingr2   	threadingpathlibr   typingr   	getLoggerr   rZ   LockrV   r   r   __annotations__Enumr   r7   rb   r+   r,   r-   <module>rm      sD  
 
 
 # " " " " "        				                w""in (i ) ) )       . . . . . . . .$6 6 6 6E E E E E Er,   