Ë
    ÛJêj‘
  ã                  ó¬   — d Z ddlmZ ddlZddlmZ ddlmZmZ  ed¬«       G d„ d	«      «       Z	 ed¬«       G d
„ d«      «       Z
 G d„ d«      Zg d¢Zy)zGLocal heuristic PII/secret redaction for text entering persistent data.é    )ÚannotationsN)Ú	dataclass)ÚAuditEventTypeÚAuditLogT)Úfrozenc                  ó"   — e Zd ZU ded<   ded<   y)ÚPrivacyFindingÚstrÚcategoryÚintÚcountN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úQ/home/oem/CyberBrain26-unified/src/cyberbrain26/security_plane/privacy_gateway.pyr	   r	      s   … àƒMØ„Jr   r	   c                  ó4   — e Zd ZU ded<   ded<   edd„«       Zy)ÚPrivacyResultr
   Útextztuple[PrivacyFinding, ...]Úfindingsc                ó,   — t        | j                  «      S ©N)Úboolr   )Úselfs    r   ÚredactedzPrivacyResult.redacted   s   € ä�D—M‘MÓ"Ð"r   N)Úreturnr   )r   r   r   r   Úpropertyr   r   r   r   r   r      s   … à
ƒIØ(Ó(àò#ó ñ#r   r   c                  óÜ   — e Zd ZU dZd ej
                  d«      dfd ej
                  d«      dfd ej
                  d«      d	fd
 ej
                  d«      dffZded<   ddœdd„Zddœdd„Z	y)ÚPrivacyGatewayzòDetect and redact common text PII and secret patterns locally.

    This deterministic filter is a privacy aid, not complete PII detection. It
    records categories and counts without copying matched source values into
    audit events.
    Úsecret_assignmentz](?i)\b(password|passwd|secret|api[_-]?key|token|authorization)\s*[:=]\s*(['\"]?)[^\s,'\";]+\2z[REDACTED:SECRET]Ú	api_tokenzC\b(?:ghp_[A-Za-z0-9]{20,}|sk-[A-Za-z0-9_-]{20,}|AKIA[A-Z0-9]{16})\bÚemailz-(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\bz[REDACTED:EMAIL]Úphonez!(?<!\w)\+?\d[\d(). -]{7,}\d(?!\w)z[REDACTED:PHONE]z,tuple[tuple[str, re.Pattern[str], str], ...]Ú_RULESN©Ú	audit_logc               ó   — || _         y r   r'   )r   r(   s     r   Ú__init__zPrivacyGateway.__init__=   s	   € Ø"ˆ�r   r   )Úcontextc               óÊ  — t        |t        «      st        d«      ‚|}g }| j                  D ]:  \  }}}|j	                  ||«      \  }}|sŒ|j                  t        ||¬«      «       Œ< |r_| j                  �S| j                  j                  t        j                  d|dd|D �	ci c]  }	|	j                  |	j                  “Œ c}	i¬«       t        |t        |«      ¬«      S c c}	w )z7Return sanitized text and non-sensitive finding counts.z)privacy gateway accepts text strings only)r   r   Úprivacy_redactionr   r   )ÚactionÚresourceÚresultÚmetadata)r   r   )Ú
isinstancer
   Ú	TypeErrorr&   ÚsubnÚappendr	   r(   Úrecordr   ÚDATA_ACCESSr   r   r   Útuple)
r   r   r+   Ú	sanitizedr   r   ÚpatternÚreplacementr   Úitems
             r   ÚredactzPrivacyGateway.redact@   sÙ   € ä˜$¤Ô$ÜÐGÓHÐHØˆ	Ø)+ˆØ.2¯k©kò 	PÑ*ˆH�g˜{Ø&Ÿ|™|¨K¸ÓCÑˆI�uÚØ—‘¤¸ÈÔ NÕOð	Pñ ˜Ÿ™Ð2Ø�N‰N×!Ñ!Ü×*Ñ*Ø*Ø Ø!Ø$ÈXÖ&VÀT t§}¡}°d·j±jÑ'@Ò&VÐWð "ô ô  )´e¸H³oÔFÐFùò 'Ws   Â#C )r(   zAuditLog | Noner   ÚNone)r   r
   r+   r
   r   r   )
r   r   r   Ú__doc__ÚreÚcompiler&   r   r*   r=   r   r   r   r!   r!      s¡   … ñð  ØˆB�J‰Jð3óð  ð	
ð ØˆB�J‰JÐ]Ó^Øð	
ð ØˆB�J‰JÐGÓHØð	
ð ØˆB�J‰JÐ;Ó<Øð	
ð'<€FÐ8ó ð4 8<õ #ð 39ö Gr   r!   )r	   r!   r   )r?   Ú
__future__r   r@   Údataclassesr   Ú!cyberbrain26.security_plane.auditr   r   r	   r   r!   Ú__all__r   r   r   ú<module>rF      se   ðÙ Må "ã 	Ý !ç Fñ �$Ô÷ð ó ðñ
 �$Ô÷#ð #ó ð#÷7Gñ 7Gòt @�r   