Ë
    {Éi  ã                   óh   — d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	  G d„ de«      Z
 G d„ d	e«      Zy
)z<
Security Middleware for Cache Control and Security Headers
é    )ÚCallable)ÚRequestÚResponse)ÚBaseHTTPMiddleware)Úsettingsc                   óB   ‡ — e Zd ZdZd	dedefˆ fd„Zdededefd„Z	ˆ xZ
S )
ÚSecurityMiddlewarea†  
    Middleware to add security headers and prevent caching of sensitive information.
    
    Security headers added:
    - Cache-Control: Prevents caching
    - Pragma: Additional cache prevention (legacy support)
    - Expires: Ensures content expires immediately
    - Permissions-Policy: Controls browser permissions
    - Content-Security-Policy: Frame security (production only)
    Úadd_cspÚadd_permissions_policyc                 ó@   •— t         ‰|   |«       || _        || _        y )N)ÚsuperÚ__init__r
   r   )ÚselfÚappr
   r   Ú	__class__s       €úU/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/middleware/security.pyr   zSecurityMiddleware.__init__   s   ø€ Ü‰Ñ˜ÔØˆŒØ&<ˆÕ#ó    ÚrequestÚ	call_nextÚreturnc              ƒ   óx  K  —  ||«      ƒ d{  –—† }d|j                   d<   d|j                   d<   d|j                   d<   | j                  rd|j                   d	<   | j                  r"t        j                  d
k(  rd|j                   d<   d|j                   d<   d|j                   d<   d|j                   d<   |S 7 Œ©­w)z Add security headers to responseNú#no-cache, no-store, must-revalidateúCache-Controlúno-cacheÚPragmaÚ0ÚExpiresz4camera=(), microphone=(), geolocation=(), payment=()úPermissions-PolicyÚprodzÖframe-ancestors 'self' *.yourdomain.com; default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self'úContent-Security-PolicyÚ
SAMEORIGINzX-Frame-OptionsÚnosniffzX-Content-Type-Optionsz1; mode=blockzX-XSS-Protection)Úheadersr   r
   r   ÚAPP_ENV©r   r   r   Úresponses       r   ÚdispatchzSecurityMiddleware.dispatch   sÕ   è ø€ á" 7Ó+×+ˆð -Rˆ×Ñ˜Ñ)Ø%/ˆ×Ñ˜Ñ"Ø&)ˆ×Ñ˜Ñ#ð ×&Ò&àFð ×ÑÐ1Ñ2ð
 <Š<œH×,Ñ,°Ò6ð%ð ×ÑÐ6Ñ7ð /;ˆ×ÑÐ*Ñ+ð 6?ˆ×ÑÐ1Ñ2ð 0?ˆ×ÑÐ+Ñ,àˆðE ,ús   ‚B:ŽB8B*B:)TT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úboolr   r   r   r   r'   Ú__classcell__)r   s   @r   r	   r	      s5   ø„ ñ	ñ= Tð =È$õ =ð
$ gð $¸(ð $Àx÷ $r   r	   c                   ó$   — e Zd ZdZdededefd„Zy)ÚNoCacheMiddlewarez–
    Simplified middleware focused only on preventing caching.
    
    Use this when you only need cache control without other security headers.
    r   r   r   c              ƒ   óî   K  —  ||«      ƒ d{  –—† }d|j                   d<   d|j                   d<   d|j                   d<   d|j                   d	<   t        j                  d
k(  rd|j                   d<   |S 7 Œd­w)z(Add cache prevention headers to responseNr   r   r   r   r   r   zcamera=(), microphone=()r   r   z'frame-ancestors 'self' *.yourdomain.comr    )r#   r   r$   r%   s       r   r'   zNoCacheMiddleware.dispatchK   sŒ   è ø€ á" 7Ó+×+ˆð -Rˆ×Ñ˜Ñ)Ø%/ˆ×Ñ˜Ñ"Ø&)ˆ×Ñ˜Ñ#ð 'ð 	×ÑÐ-Ñ.ô
 ×Ñ˜vÒ%à9ð ×ÑÐ6Ñ7ð ˆð% ,ús   ‚A5ŽA3A%A5N)r(   r)   r*   r+   r   r   r   r'   © r   r   r/   r/   D   s!   „ ñð gð ¸(ð Àxô r   r/   N)r+   Útypingr   Úfastapir   r   Ústarlette.middleware.baser   Úsrc.core.configr   r	   r/   r1   r   r   ú<module>r6      s3   ðñõ ç %Ý 8å $ô5Ð+ô 5ôpÐ*õ r   