
    qi|c                        S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJ	r	J
r
  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJrJrJrJr  Sr \
RB                  " \"5      r#S r$Sr%\" \%5         " S S5      r&g)a  
::

     _      __         _ ___  ___ _   __
    | | /| / /__ ___  (_) _ \/ _ | | / /
    | |/ |/ (_-</ _ `/ / // / __ | |/ /
    |__/|__/___/\_, /_/____/_/ |_|___/
               /___/

WSGI container, that handles the HTTP requests. This object is passed to the
WSGI server and represents our WsgiDAV application to the outside.

On init:

    Use the configuration dictionary to initialize lock manager, property manager,
    domain controller.

    Create a dictionary of share-to-provider mappings.

    Initialize middleware objects and setup the WSGI application stack.

For every request:

    Find the registered DAV provider for the current request.

    Add or modify info in the WSGI ``environ``:

        environ["SCRIPT_NAME"]
            Mount-point of the current share.
        environ["PATH_INFO"]
            Resource path, relative to the mount path.
        environ["wsgidav.provider"]
            DAVProvider object that is registered for handling the current
            request.
        environ["wsgidav.config"]
            Configuration dictionary.
        environ["wsgidav.verbose"]
            Debug level [0-3].

    Log the HTTP request, then pass the request to the first middleware.

    Note: The OPTIONS method for the '*' path is handled directly.

    N)unquote)__version__util)DAVProvider)DEFAULT_CONFIG)FilesystemProvider)HTTPAuthenticator)LockManager)LockStorageDict)BaseMiddleware)PropertyManager)check_python_versiondynamic_import_class#dynamic_instantiate_class_from_optssafe_re_encodereStructuredTextc                    / nSnU H   nX0;  d  M
  UR                  SU< S35        M"     0 SS_SS_SS	_S
S_SS_SS_SS_SS_SS	_SS_SS_SS_SS_SS_SS_SS	_SS _S!S"S#S$S%S&S'S(S)S*S+S,S-S..EnUR                  5        H^  u  pVSU;   a'  UR                  SS/5      u  pxU R                  U0 5      n	OXpU	(       d  M=  X;   d  MD  UR                  S0U< S1U< S235        M`     U(       a  [	        S3S4R                  U5      -   5      eg5)6N)provider_mappingzMissing required option .acceptbasiczhttp_authenticator.accept_basicacceptdigestz http_authenticator.accept_digest!accept_put_without_content_lengthz	(removed)catchallzerror_printer.catch_alldebug_litmuszlogging.debug_litmusdebug_methodszlogging.debug_methodsdefaultdigestz$http_authenticator.default_to_digestzdir_browser.app_classmiddleware_stackzdir_browser.ms_mountz dir_browser.ms_sharepoint_pluginz!dir_browser.ms_sharepoint_supportzdir_browser.ms_sharepoint_urldomain_controllerz$http_authenticator.domain_controllerdomaincontrolleremulate_win32_lastmodzhotfixes.emulate_win32_lastmodenable_loggerszlogging.enable_loggersz http_authenticator.preset_domainznt_dc.preset_domainznt_dc.preset_serverlock_managerlock_storagezlogging.logger_date_formatzlogging.logger_formatverbosemutable_live_propsproperty_managerzhotfixes.re_encode_path_infoz(see Cors middleware)z&http_authenticator.trusted_auth_headerzhotfixes.unquote_path_infozsimple_dc.user_mapping)z http_authenticator.preset_serverlocksmanagerr"   logger_date_formatlogger_formatzlogging.verbosemutableLivePropspropsmanagerre_encode_path_inforesponse_headerstrusted_auth_headerunquote_path_infouser_mapping   zDeprecated option z: use z	 instead.zInvalid configuration:
  - z
  - T)appenditemssplitget
ValueErrorjoin)
configerrorsmandatory_fieldsfielddeprecated_fieldsoldnewkvds
             H/home/kali/flask_env/lib/python3.13/site-packages/wsgidav/wsgidav_app.py_check_configrC   M   s   F,!MM4UIQ?@ " 8 :  	,[  	-	 
 	.  	0  	?  	 !3  	  	+,O  	()L  	C  	B  	 !A  	2   	";! " 	+,A# $ -B&&:0$0*=3G90= B &++-#:99S!$DA

1b!Aq1MM.sgVC7)LM . 7(--:OOPP    )   	   c                   4    \ rS rSrS rSS.S jrS rS rSrg	)

WsgiDAVApp   c                 :   [         R                  " [        5      U l        [        R
                  " U R                  U5        U R                  nUS   R                  S5      SLa  [        R                  " U5        [        R                  U l	        SU 0n[        U5        UR                  SS5      U l        [        R                  " USSS	9nUR                  S
S5      U l        [        U R                  5      [        La  [!        S5      eUR                  SS5      U l        UR                  S5      nUSL a  [%        5       nO$['        U[(        [*        45      (       a	  [-        XBS9nU(       d  S U l        O0[1        US5      (       d  [!        SU< 35      e[3        U5      U l        UR                  S5      nUSL a  [5        5       nO$['        U[(        [*        45      (       a	  [-        XRS9nU(       d  S U l        OXPl        UR                  S5      nU(       a=  UR9                  S5      (       a  UR;                  S5      (       a  [!        SU< S35      eOSnX`l        [        R                  " USSS	9nU R                  S   n0 U l        S U l         URC                  5        H  u  pU RE                  X5        M     S U l#        S nUR                  S/ 5      n/ nX l$        [K        U5       GHc  nS n[        RL                  " U5      (       a  [O        U5      nU" X RH                  U5      nOr[        U5      [*        L a  SU RH                  0n[-        XS9nOH[P        RR                  " U5      (       a+  [U        U[V        5      (       d   eU" X RH                  U5      nOUn['        U[X        5      (       a  Xl#        UR[                  5       nU(       af  []        [_        USS 5      5      (       a1  URa                  5       (       a  [        Rc                  SU S35        GM0  URe                  U5        Xl$        GMJ  [        Rg                  SU S35        GMf     [        Ri                  S[j         S[        Rl                   S [n        Rn                  " SS!9 35        U R                  S":  aD  [        Ri                  S#[p        Rr                  " 5       < S$[p        Rt                  " 5       < S%35        U R                  S:  a\  [        Ri                  S&U R.                   35        [        Ri                  S'U R6                   35        [        Ri                  S(U 35        U R                  S":  a?  [        Ri                  S)5        [K        U5       H  n[        Ri                  S*U 35        M     U R                  S:  az  [        Ri                  S+5        U R@                   HU  n	U R>                  U	   n
U(       a  URw                  U	5      (       a  S,nOSnOS-n[        Ri                  S*U	< S.U
 U 35        MW     UR                  S/5      (       a+  UR                  S05      (       d  [        Rc                  S15        U(       av  U R>                  RC                  5        HX  u  pURw                  U	5      (       d  M  [        Rc                  S2Ry                  XR{                  5       (       a  S3OS45      5        MZ     U R<                  (       a$  [        Ri                  S5U R<                  < S35        g )6NloggingenableF${application}r$   rE   hotfixesT)as_dictr,   z-re_encode_path_info must be bool (or omitted)r/   r#   expandrefreshzInvalid lock_storage: r&   
mount_path/z>If a mount_path is set, it must start (but not end) with '/': r    http_authenticatorr   r   is_disabledzApp z'.is_disabled() returned True: skipping.zCould not add middleware zWsgiDAV/z Python/ )aliased   zDefault encoding: z (file system: )zLock manager:      zProperty manager:  zDomain controller: zMiddleware stack:z  - z"Registered DAV providers by route:z (anonymous)z (custom auth)z: accept_basicssl_certificatezHBasic authentication is enabled: It is highly recommended to enable SSL.z*Share {!r} will allow anonymous {} access.readwritezConfigured mount path: )>copydeepcopyr   r8   r   deep_updater5   init_logging_loggerloggerrC   r$   get_dict_valuer,   typeboolr6   r/   r   
isinstancestrdictr   r"   hasattrr
   r   prop_manager
startswithendswithrS   provider_mapsorted_share_listr3   add_providerrV   applicationreversedis_basestringr   inspectisclass
issubclassr   r	   get_domain_controllercallablegetattrrW   warningr2   errorinfor   PYTHON_VERSIONplatformsysgetdefaultencodinggetfilesystemencodingis_share_anonymousformatis_readonly)selfr8   rQ   rN   r#   rm   rS   	auth_confr   shareproviderr   r   mw_listmwapp	app_classhints                     rB   __init__WsgiDAVApp.__init__   s	   mmN3f-)  *%7f%ll #D)fzz)Q/&&vz4H#+<<0Et#L (()5LMM!).A5!Izz.14*,LsDk22>L  $D<33 #9,9I!JKK +L 9Dzz"454*,LsDk22>L  $D , ZZ-
((--1D1DS1I1I TU_Tbbcd  2J
 J$''0DdS	  ;;'9:!%/557OEe.  8 #'  "::&8"=  
 +,B C!!"%% 14	&6&6?bT!*D,<,<=9"L$$ ""n5555//8  #011*-'$'$=$=$?! GC=>>3??CTCTOOd3%/V$WXNN3''*$ 9"Q?@G -J 	{m8D,?,?+@(BSBS\`BaAbc	
 <<1LL$S%;%;%=$@PSPiPiPkOnnop <<1LL.t/@/@.ABCLL.t/@/@.ABCLL./@.ABC<<1 LL,-w'tB4[) ( <<1LL=>//,,U3$(;;EBB-!+DtE9Bxj?@ 0 ==((<M1N1NOOZ #'#4#4#:#:#<$77>>OODKK!-A-A-C-C6 $= ??LL24??2EQGHrD   F)readonlyc          	      n   SUR                  S5      -   nXR                  ;  d   eU R                  R                  S5      =(       d    0 n[	        U5      [
        L a+  [        R                  " X R                  5      n[        X#US9nO[	        U5      [        L ao  SU;   a  SU 0n[        X%S9nOSU;   aG  [        [        R                  " US   U R                  5      [        UR                  SS	5      5      US9nO6[        S
U 35      e[	        U5      [        [        4;   a  [        SU S35      e[        U[         5      (       d  [        SU S35      eUR#                  U5        U R$                  (       a  UR'                  U R$                  5        UR)                  U R*                  5        UR-                  U R.                  5        X R                  U'   U R                  R1                  5        Vs/ s H  ofR3                  5       PM     snU l        [7        U R4                  [8        SS9U l        U$ s  snf )z1Add a provider to the provider_map routing table.rT   fs_dav_provider)r   fs_optsclassrM   rP   rootr   Fz4Provider expected {'class': ...}` or {'root': ...}: z	Provider z*: tuple/list syntax is no longer supportedzInvalid provider z (not instance of DAVProvider)T)keyreverse)striprp   r8   r5   rg   rj   r   fix_pathr   rk   r   rh   r6   listtupleri   r   set_share_pathrS   set_mount_pathset_lock_managerr"   set_prop_managerrm   keyslowerrq   sortedlen)r   r   r   r   r   rQ   ss          rB   rr   WsgiDAVApp.add_providerJ  s    ekk#&&-----++//"34:>S 
 }}X{{;H)(wWH(^t#(" +D1>xW8# .MM(6"2DKK@!(,,z5"AB# !NxjY  (^e},H:%OP  (K00#H:-KL  	&??##DOO4 	!!$"3"34!!$"3"34#+% 
 6:5F5F5K5K5M!N5M'')5M!N!'(>(>CQU!V "Os   1H2c                     SnUR                  5       nU R                   H/  nUS:X  a  Un  O&X4:X  d  UR                  US-   5      (       d  M-  Un  O   Uc  gX R                  R	                  U5      4$ )zXGet the registered DAVProvider for a given path.

Returns:
    tuple: (share, provider)
NrT   )NN)r   rq   rn   rp   r5   )r   pathr   
lower_pathrs        rB   resolve_providerWsgiDAVApp.resolve_provider  sz     ZZ\
''A CxJ$9$9!c'$B$B ( =''++E222rD   c              #   @  ^ ^^^#    TS   nT R                   (       a  [        R                  " U5      =nTS'   T R                  (       a  [	        TS   5      n[        R
                  " U5      (       d/  [        R                  SU< 35        [        R                  " U5      nT R                  TS'   S TS'   T R                  TS'   T R                  U5      u  pEUTS'   US:X  d  U(       d  UTS'   OTS==   U-  ss'   U[        U5      S  TS'   [        R
                  " U5      (       d   eTS   S:X  d  TS   R                  S5      (       d   eTS   S	;   d  TS   R                  S5      (       a   eTS   S:X  d  TS   R                  S5      (       d   e[        R                  " 5       mSUU UU4S
 jjnT R!                  TU5      n U S h  vN   [#        US5      (       a  UR%                  5         g  N&! [#        US5      (       a  UR%                  5         f f = f7f)N	PATH_INFOzGot non-native PATH_INFO: zwsgidav.configzwsgidav.providerzwsgidav.verboserT   SCRIPT_NAMErU   )rU   rT   c                 
  > 0 nU HC  u  pEUR                  5       U;   a  [        R                  SU 35        XSUR                  5       '   ME     SnUR                  S5      n[	        U R                  SS5      S   5      nTS   S:g  =(       a    US	:  =(       a    US
;  n	U	(       a"  US;   a  [        R                  SU S35        SnOG[        U5      [        La5  [        R                  SR                  UR                  S5      5      5        Sn[        R                  " T5        [        R                  " T5      S:w  a-  TR                  S5      (       d  [        R                  S5        SnU(       a;  UR                  S5      S:w  a&  [        R                  S5        UR                  S5        TR                  S:  GaC  TR                  S5      n
U
(       d  Sn
/ nST;   a/  UR                  SR                  TR                  S5      5      5        TR                  SS5      S:w  a/  UR                  SR                  TR                  S5      5      5        ST;   a/  UR                  SR                  TR                  S5      5      5        S T;   a/  UR                  S!R                  TR                  S 5      5      5        S"T;   a/  UR                  S#R                  TR                  S"5      5      5        TR                  S:  a5  S$T;   a/  UR                  S%R                  TR                  S$5      5      5        TR                  S&:  a5  S'T;   a/  UR                  S(R                  TR                  S'5      5      5        TR                  S&:  a5  S)T;   a/  UR                  S*R                  TR                  S)5      5      5        TR                  S&:  a5  S+T;   a/  UR                  S,R                  TR                  S+5      5      5        TR                  S:  a,  UR                  S-[        R                  " 5       T-
  S. S/35        S0R!                  U5      n[        R#                  S1R                  TR                  S2S5      U
[        R$                  " 5       TR                  S5      ['        TR                  S3S5      [(        R*                  R,                  (       a  [(        R*                  R,                  OS45      UU S595        T" XU5      $ )6NzDuplicate header in response: Fzcontent-lengthrX   r1   r   REQUEST_METHODHEAD   )   i0  )NrU   z*Missing required Content-Length header in z-response: closing connectionTzDInvalid Content-Length header in response ({!r}): closing connectionzwsgidav.all_input_readz9Input stream not completely consumed: closing connection.
connectionclosez"Adding 'Connection: close' header.)
Connectionr   rE   zwsgidav.auth.user_namez(anonymous)HTTP_DESTINATIONz	dest="{}"CONTENT_LENGTHrU   z	length={}
HTTP_DEPTHzdepth={}
HTTP_RANGEzrange={}HTTP_OVERWRITEzoverwrite={}HTTP_EXPECTzexpect="{}"rZ   HTTP_CONNECTIONzconnection="{}"HTTP_USER_AGENTz
agent="{}"HTTP_TRANSFER_ENCODINGztransfer-enc={}zelap=z.3fsecz, z@{addr} - {user} - [{time}] "{method} {path}" {extra} -> {status}REMOTE_ADDRr   zutf-8)addrusertimemethodr   extrastatus)r   rd   r}   r5   intr4   rg   rj   r   r   read_and_discard_inputget_content_lengthr|   r2   r$   r   r7   r~   get_log_timer   r   stdoutencoding)r   r-   exc_info
headerDictheadervalueforceCloseConnectioncurrentContentLength
statusCodecontentLengthRequireduserInfor   environr   start_response
start_times               rB   _start_response_wrapper4WsgiDAVApp.__call__.<locals>._start_response_wrapper  s>   J!1<<>Z/MM$B6("KL-26<<>* "2 $) #->>2B#C V\\#q1!45J()V3 1#%1j0 " %)=)K @Lij (,$*+36Zaa"'78
 (,$ ''0 &&w/14W[[(> > O (,$#
|(D(O DE ''(?@ ||q ";;'?@,H%0LL!3!3GKK@R4S!TU;;/4:LL!3!3GKK@P4Q!RS7*LL!2!27;;|3L!MN7*LL!2!27;;|3L!MN#w.LL!6!6w{{CS7T!UV<<1$')ALL!5!5gkk-6P!QR<<1$):g)ELL)00=N1OP <<1$):g)ELL!4!4W[[AR5S!TU<<1$)AW)LLL)00=U1VW <<1$LL5z)A#(Fc!JK		%( V]]$[[;%!..0&{{+;<+#KKR836::3F3FCJJ//G $% ^   "&HEErD   r   )N)r,   r   re_encode_wsgir/   r   is_strrd   r|   to_strr8   r$   r   r   rn   ro   r   rs   rl   r   )	r   r   r   r   r   r   r   app_iterr   s	   ```     @rB   __call__WsgiDAVApp.__call__  s     {# ##*.*=*=d*CCD7;' !!7;/0D {{4  OO8AB;;t$D %)KK !&*"#%)\\!" //5
 '/"# C<u#'GK M"e+"#'E
#5GK  {{4     }%+w}/E/P/PQT/U/UUU}%2';

(3-; 	  {#r)W[-A-L-LS-Q-QQQYY[
k	F k	F\ ##G-DE	!x))   x))  *s0   GH	G7 G5G7 "H5G7 7$HH)rs   r8   rV   r"   re   rS   rm   rp   r,   rq   r/   r$   N)	__name__
__module____qualname____firstlineno__r   rr   r   r   __static_attributes__ rD   rB   rH   rH      s    xt 9> >@3.wrD   rH   )'__doc__r`   rv   r   r   r   urllib.parser   wsgidavr   r   wsgidav.dav_providerr   wsgidav.default_confr   wsgidav.fs_dav_providerr   wsgidav.http_authenticatorr	   wsgidav.lock_man.lock_managerr
   wsgidav.lock_man.lock_storager   wsgidav.mw.base_mwr   !wsgidav.prop_man.property_managerr   wsgidav.utilr   r   r   r   __docformat__get_module_loggerr   rd   rC   MIN_PYTHON_VERSION_INFOrH   r   rD   rB   <module>r      s~   
+X    
    % , / 6 8 5 9 - =  #

 
 
*6t !  , -I IrD   