Ë
    "ïàj–  ã                   ó^   — d Z ddlmZ ddlmZ dZ ej                  e«      Z G d„ de«      Z	y)zw
WSGI middleware used for CORS support (optional).

Respond to CORS preflight OPTIONS request and inject CORS headers.
é    )Úutil)ÚBaseMiddlewareÚreStructuredTextc                   ó0   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zˆ xZS )ÚCorsc                 óx  •— t         ‰| �  |||«       |j                  dd «      }|€i }|j                  d«      }t        |«      t        u r|j                  «       }|dk7  r#|g}n|r|D �cg c]  }|j                  «       ‘Œ }}dj                  t        j                  |j                  d«      «      «      }dj                  t        j                  |j                  d«      «      «      }dj                  t        j                  |j                  d«      «      «      }	|j                  dd	«      }
|j                  d
«      }|j                  d«      }g }|
r|j                  d«       |rJt        |«      t        urt        d|› �«      ‚|j                  «       D ]  \  }}|j                  ||f«       Œ |d d  }|	r|j                  d|	f«       |d d  }|r|j                  d|f«       |r|j                  d|f«       |r%|j                  dt	        t        |«      «      f«       || _        || _        || _        y c c}w )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                     €ú>/srv/dav/.venv/lib/python3.12/site-packages/wsgidav/mw/cors.pyr   zCors.__init__   s  ø€ Ü‰Ñ˜ h°Ô7Ø�z‰z˜& $Ó'ˆØˆ<ØˆDàŸ™ Ó0ˆÜ�Ó¤#Ñ%Ø)×/Ñ/Ó1ˆMØ Ò#Ø!. ‘ÙØ2?Ö@¨B˜RŸX™X�ZÐ@ˆMÐ@àŸ™¤§¡¨T¯X©X°oÓ-FÓ!GÓHˆØŸ™¤§¡¨T¯X©X°oÓ-FÓ!GÓHˆØŸ™¤$§+¡+¨d¯h©hÐ7GÓ.HÓ"IÓJˆØ ŸH™HÐ%8¸%Ó@ÐØ—(‘(˜9Ó%ˆØŸ™ ,Ó/ˆàˆ
ÙØ×ÑÐJÔKÙÜ�NÓ#¬4Ñ/Ü Ø=¸nÐ=MÐNóð ð '×,Ñ,Ó.ò *‘��1Ø×!Ñ! 1 a &Õ)ð*ð '¡q˜MÐÙØ×$Ñ$Ð&EÀ~Ð%VÔWà"¡1˜ˆÙØ× Ñ Ð"@À-Ð!PÔQÙØ× Ñ Ð"@À-Ð!PÔQÙØ× Ñ Ð":¼CÄÀGÃÓ<MÐ!NÔOà%6ˆÔ"Ø!.ˆÔà*ˆÕùòG As   Á*H7c                 óx   — | j                  dd «      }| j                  › d| j                  j                  › d|› d�S )Núcors.allow_originú.ú(ú))Ú
get_configÚ
__module__r/   Ú__name__)r$   r
   s     r0   Ú__repr__zCors.__repr__D   s<   € Ø—‘Ð':¸DÓAˆØ—/‘/Ð" ! D§N¡N×$;Ñ$;Ð#<¸A¸l¸^È1ÐMÐMó    c                 ó(   — | j                  dd«       S )z6Optionally return True to skip this module on startup.r2   F)r6   )r$   s    r0   Úis_disabledzCors.is_disabledH   s   € à—?‘?Ð#6¸Ó>Ð>Ð>r:   c                 óF  ‡ ‡‡
— |d   j                  «       }|j                  d«      }|j                  d«      }|j                  d«      }d Š
‰ j                  dk(  rdgŠ
n|‰ j                  v rd|fdgŠ
‰
r(t        j	                  d	|› d
|d   ›d
|›d|› d|›�
«       n't        j                  d|› d
|d   ›d
|›d|› d|›�
«       |dk(  xr |d u}|r8ddt        j                  «       fg}‰
r|‰
‰ j                  z   z  } ‰d|«       dgS dˆ
ˆ ˆfd„	}	‰ j                  ||	«      S )NÚREQUEST_METHODÚHTTP_ORIGINÚ"HTTP_ACCESS_CONTROL_REQUEST_METHODÚ#HTTP_ACCESS_CONTROL_REQUEST_HEADERSr   )úAccess-Control-Allow-Originr   rB   )ÚVaryÚOriginzGranted CORS ú Ú	PATH_INFOz, headers: z
, origin: zDenied CORS ÚOPTIONS)zContent-LengthÚ0ÚDatez204 No Contentr:   c                 ód   •— ‰r#t        j                  |‰‰j                  z   «        ‰| ||«       y ©N)r   Úupdate_headers_in_placer!   )ÚstatusÚheadersÚexc_infoÚacao_headersr$   Ústart_responses      €€€r0   Úwrapped_start_responsez-Cors.__call__.<locals>.wrapped_start_responsex   s3   ø€ ÙÜ×,Ñ,ØØ  4×#=Ñ#=Ñ=ôñ ˜6 7¨HÕ5r:   rK   )
Úupperr   r#   Ú_loggerÚdebugÚwarningr   Úget_rfc1123_timer"   r&   )r$   ÚenvironrQ   ÚmethodÚoriginÚac_req_methÚac_req_headersÚis_preflightÚresp_headersrR   rP   s   ` `       @r0   Ú__call__zCors.__call__L   st  ú€ ØÐ)Ñ*×0Ñ0Ó2ˆØ—‘˜]Ó+ˆØ—k‘kÐ"FÓGˆØ Ÿ™Ð%JÓKˆàˆØ×Ñ Ò$Ø@ÐA‰LØ�t×)Ñ)Ñ)à.°Ð7Ø"ðˆLñ
 Ü�M‰MØ ˜x q¨°Ñ)=Ð(@ÀØ�/ ¨^Ð,<¸JÀvÀjðRõô �O‰OØ˜v˜h a¨°Ñ(<Ð'?¸qØ�/ ¨^Ð,<¸JÀvÀjðRôð
  Ñ*ÒF¨{À$Ð/Fˆñ ð (Øœ×.Ñ.Ó0Ð1ðˆLñ Ø ¨t×/EÑ/EÑ EÑE�áÐ+¨\Ô:Ø�5ˆL÷	6ð �}‰}˜WÐ&<Ó=Ð=r:   )r8   r7   Ú__qualname__r   r9   r<   r_   Ú__classcell__)r/   s   @r0   r   r      s   ø„ ô/+òbNò?ö4>r:   r   N)
Ú__doc__Úwsgidavr   Úwsgidav.mw.base_mwr   Ú__docformat__Úget_module_loggerr8   rT   r   © r:   r0   ú<module>rh      s7   ðñõ Ý -à"€à
 ˆ$×
 Ñ
  Ó
*€ôn>ˆ>õ n>r:   