
    ]j                     B   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 dZd ZddZd	 Zd
 Zd Z e       Zeed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   dj%                  eD  cg c]  } dj'                  |        c}       Zd ZddZyc c} w )    N)OrderedDict)chain)settings)	force_strz@child-src is deprecated in CSP v3. Use frame-src and worker-src.c                     i dt        t        dd       dt        t        dd       dt        t        ddg      dt        t        d	d       d
t        t        dd       dt        t        dd       dt        t        dd       dt        t        dd       dt        t        dd       dt        t        dd       dt        t        dd       dt        t        dd       dt        t        dd       dt        t        dd       dt        t        dd       d t        t        d!d       d"t        t        d#d       t        t        d$d       t        t        d%d       t        t        d&d       t        t        d'd       t        t        d(d       t        t        d)d       t        t        d*d       t        t        d+d       t        t        d,d       t        t        d-d       t        t        d.d       t        t        d/d0      t        t        d1d0      d2S )3N	child-srcCSP_CHILD_SRCzconnect-srcCSP_CONNECT_SRCdefault-srcCSP_DEFAULT_SRCz'self'z
script-srcCSP_SCRIPT_SRCzscript-src-attrCSP_SCRIPT_SRC_ATTRzscript-src-elemCSP_SCRIPT_SRC_ELEMz
object-srcCSP_OBJECT_SRCz	style-srcCSP_STYLE_SRCzstyle-src-attrCSP_STYLE_SRC_ATTRzstyle-src-elemCSP_STYLE_SRC_ELEMzfont-srcCSP_FONT_SRCz	frame-srcCSP_FRAME_SRCzimg-srcCSP_IMG_SRCzmanifest-srcCSP_MANIFEST_SRCz	media-srcCSP_MEDIA_SRCzprefetch-srcCSP_PREFETCH_SRCz
worker-srcCSP_WORKER_SRCCSP_BASE_URICSP_PLUGIN_TYPESCSP_SANDBOXCSP_FORM_ACTIONCSP_FRAME_ANCESTORSCSP_NAVIGATE_TOCSP_REPORT_URICSP_REPORT_TOCSP_REQUIRE_SRI_FORCSP_REQUIRE_TRUSTED_TYPES_FORCSP_TRUSTED_TYPESCSP_UPGRADE_INSECURE_REQUESTSFCSP_BLOCK_ALL_MIXED_CONTENT)zbase-urizplugin-typessandboxzform-actionzframe-ancestorsznavigate-to
report-uriz	report-tozrequire-sri-forzrequire-trusted-types-forztrusted-typeszupgrade-insecure-requestszblock-all-mixed-content)getattrr        3/root/env/lib/python3.12/site-packages/csp/utils.pyfrom_settingsr.      s5   )WX=) 	wx):DA) 	wx):XJG	)
 	gh(8$?) 	78-BDI) 	78-BDI) 	gh(8$?) 	WX=) 	'(,@$G) 	'(,@$G) 	GHnd;) 	WX=) 	78]D9) 	*<dC)  	WX=!)" 	*<dC#)$ 	gh(8$?%)( Hnd;*<dC8]D9x):DA"8-BDIx):DAh(8$?X="8-BDI%,+T&3 !+>E%,5u&>#*3U$<O) )r,   c           
      \   | 
t               } ||ni }||ni }i }t        t        | |            D ]G  }||v r||   }n| |   }|t        j                  |      }t	        |t
        t        f      s|f}|||<   I |j                         D ]N  \  }}|	t	        |t
        t        f      s|f}|j                  |      |||<   9||xx   t        |      z  cc<   P |j                  dd      }i }|j                         D ]h  \  }	}
t        |
      r|
d   du rd||	<   n't        |
      r|
d   du rndj                  |
      ||	<   |	dk(  sKt        j                  t        t               j |r$t!        t"        |      }dj                  |      |d<   |rFt%        t&        d	d
g      }|D ]/  }|j                  |d      }|dd|z  j)                         ||<   1 dj                  |j                         D cg c]%  \  }}dj+                  ||      j)                         ' c}}      S c c}}w )z0Builds the policy as a string from the settings.Nr)   r   T F r   CSP_INCLUDE_NONCE_INr   z
'nonce-%s'z; z{} {})r.   setr   copy
isinstancelisttupleitemsgetpoplenjoinwarningswarnCHILD_SRC_DEPRECATION_WARNINGDeprecationWarningmapr   r*   r   stripformat)configupdatereplacenoncecspkv
report_uripolicy_partskeyvalueinclude_nonce_insectionpolicyvals                  r-   build_policyrS   =   sM    ~ )VrF ,g"G
Cvw'( 	<
Aq	A=		!Aa$/DCF	  #1=a$/Dwwqz!AA%("# t,JLiik 
M
Uu:%(d* "LZE!H- #L+MM79KL
M J/
%(XXj%9\""8-C$1?4' 	MG!%%gr2F&,lU.B&DEJUW !	M
 99$0$6$6$8: !S nnQ,224 : ; ; :s   6*H(
c                 ,    |rdj                  | |      S y)Nz {}="{}"r0   rC   	attr_namerR   s     r-   _default_attr_mapperrX   {   s    
  C00r,   c                 *    |rdj                  |       S y)N {}r0   rU   rV   s     r-   _bool_attr_mapperr[      s     ||I&&r,   c                 T    |dv rdj                  |       S |rdj                  |       S y)zThe `async` attribute works slightly different than the other bool
    attributes. It can be set explicitly to `false` with no surrounding quotes
    according to the spec.)FFalsez	 {}=falserZ   r0   rU   rV   s     r-   _async_attr_mapperr^      s3     !!),,	||I&&r,   rG   idsrctypeasyncdefer	integritynomoduler0   z{{{}}}c                     t        j                  d|       }|r8t        |j                               r|j	                  d      j                         S | S )z+Extract content defined between script tagsz$<script[\s|\S]*>([\s|\S]+?)</script>   )researchr;   groupsgrouprB   )textmatchess     r-   _unwrap_scriptrn      sA    ii?FG3w~~'(}}Q%%''Kr,   c                 :   i }t         j                         D ]   \  }} |||j                  |            ||<   " | r|j                  d      st        |       nd}t	        j
                  di |j                         }dj                  ||      j                         S )Nr`   r0   z<script{}>{}</script>r+   )SCRIPT_ATTRSr8   r9   rn   ATTR_FORMAT_STRrC   rstriprB   )contentkwargsdatarW   mappercattrss          r-   build_script_tagry      s    D *//1 C	6 FJJy,ABYC $+6::e3Dw"A""*T*113E#**5!4::<=r,   )NNNN)N)r4   rh   r=   collectionsr   	itertoolsr   django.confr   django.utils.encodingr   r?   r.   rS   rX   r[   r^   rp   r<   rC   rq   rn   ry   )as   0r-   <module>r      s     	  #    + G *Z;;|	 },W )T *U +V *W )W 0[ ,Z  ''|D!8??1-DE
> Es   5B