
    qi                     ^    S r SSKJr  SSKJr  Sr\R                  " \5      r " S S\5      r	g)zw
WSGI middleware used for CORS support (optional).

Respond to CORS preflight OPTIONS request and inject CORS headers.
    )util)BaseMiddlewarereStructuredTextc                   :   ^  \ rS rSrU 4S jrS rS rS rSrU =r	$ )Cors   c                   > [         TU ]  XU5        UR                  SS 5      nUc  0 nUR                  S5      n[        U5      [        L a  UR                  5       nUS:w  a  U/nO&U(       a  U Vs/ s H  ofR                  5       PM     nnSR                  [        R                  " UR                  S5      5      5      nSR                  [        R                  " UR                  S5      5      5      nSR                  [        R                  " UR                  S5      5      5      n	UR                  SS	5      n
UR                  S
5      nUR                  S5      n/ nU
(       a  UR                  S5        U(       aK  [        U5      [        La  [        SU 35      eUR                  5        H  u  pUR                  X45        M     US S  nU	(       a  UR                  SU	45        US S  nU(       a  UR                  SU45        U(       a  UR                  SU45        U(       a%  UR                  S[	        [        U5      5      45        UU l        UU l        XPl        g s  snf )Ncorsallow_origin*,allow_headersallow_methodsexpose_headersallow_credentialsFmax_age
add_always)z Access-Control-Allow-Credentialstruez'cors.add_always must be a list a dict: zAccess-Control-Expose-HeaderszAccess-Control-Allow-HeaderszAccess-Control-Allow-MethodszAccess-Control-Max-Age)super__init__gettypestrstripjoinr   to_setappenddict
ValueErroritemsintnon_preflight_headerspreflight_headersallow_origins)selfwsgidav_appnext_appconfigoptsr$   aor   r   r   r   r   always_headersr   nvadd_non_preflightadd_preflight	__class__s                     D/home/kali/flask_env/lib/python3.13/site-packages/wsgidav/mw/cors.pyr   Cors.__init__   s   7zz&$'<D0#%)//1M#!.2?@-BXXZ-M@TXXo-F!GHTXXo-F!GH$++dhh7G.H"IJ HH%8%@((9%,/
JKN#4/ =n=MN  ',,.!!1&) / 'qM>OP"1  "@-!PQ  "@-!PQ  ":CG<M!NO%6"!.*G As   1I!c                 x    U R                  SS 5      nU R                   SU R                  R                   SU S3$ )Ncors.allow_origin.())
get_config
__module__r0   __name__)r%   r   s     r1   __repr__Cors.__repr__C   s<    ':DA//"!DNN$;$;#<Al^1MM    c                 0    U R                  SS5      (       + $ )z6Optionally return True to skip this module on startup.r4   F)r8   )r%   s    r1   is_disabledCors.is_disabledG   s    ??#6>>>r=   c                   ^ ^^
 US   R                  5       nUR                  S5      nUR                  S5      nUR                  S5      nS m
T R                  S:X  a  S/m
OUT R                  ;   a  SU4S/m
T
(       a+  [        R	                  S	U S
US   < S
U< SU SU< 3
5        O*[        R                  SU S
US   < S
U< SU SU< 3
5        US:H  =(       a    US LnU(       a>  SS[        R                  " 5       4/nT
(       a  UT
T R                  -   -  nT" SU5        S/$ SU
U U4S jjn	T R                  X5      $ )NREQUEST_METHODHTTP_ORIGIN"HTTP_ACCESS_CONTROL_REQUEST_METHOD#HTTP_ACCESS_CONTROL_REQUEST_HEADERSr   )Access-Control-Allow-Originr   rF   )VaryOriginzGranted CORS  	PATH_INFOz, headers: z
, origin: zDenied CORS OPTIONS)zContent-Length0Datez204 No Contentr=   c                 n   > T(       a$  [         R                  " UTTR                  -   5        T" XU5        g N)r   update_headers_in_placer"   )statusheadersexc_infoacao_headersr%   start_responses      r1   wrapped_start_response-Cors.__call__.<locals>.wrapped_start_responsew   s1    ,, 4#=#== 6H5r=   rO   )
upperr   r$   _loggerdebugwarningr   get_rfc1123_timer#   r'   )r%   environrU   methodoriginac_req_methac_req_headersis_preflightresp_headersrV   rT   s   ` `       @r1   __call__Cors.__call__K   sv   )*002]+kk"FG %JK$@ALt))).7"L
 MMxq)=(@/^,<JvjR OOvha(<'?q/^,<JvjR
 *F{$/F  (..01L t/E/E EE+\:5L	6 	6 }}W==r=   )r$   r"   r#   )
r:   r9   __qualname____firstlineno__r   r;   r?   rd   __static_attributes____classcell__)r0   s   @r1   r   r      s    /+bN?4> 4>r=   r   N)
__doc__wsgidavr   wsgidav.mw.base_mwr   __docformat__get_module_loggerr:   rY   r    r=   r1   <module>rp      s5   
  -"

 
 
*n>> n>r=   