
    qi}2                     T   S r SSKrSSKrSSKJr  SSKJr  SSKJrJrJ	r	  SSK
JrJr  SSKJrJrJr  SSKJr  SS	KJrJrJr  S
r\R0                  " \5      rSrSR9                  5       rSSSSS.r0 r\RA                  5        H  u  r!r"\" H  r#\!\\#'   M
     M     1 Skr$ " S S\5      r%g)zR
WSGI middleware that handles GET requests on collections to display directories.
    N)fnmatch)unquote)EnvironmentFileSystemLoaderselect_autoescape)__version__util)HTTP_MEDIATYPE_NOT_SUPPORTEDHTTP_OKDAVError)BaseMiddleware)get_uri_namesafe_re_encodesend_redirect_responsereStructuredTextz/:dir_browserzZ
<dm:mount xmlns:dm="http://purl.org/NET/webdav/mount">
  <dm:url>{}</dm:url>
</dm:mount>
)xlsxltxlmxlsmxlsxxltmxltx)ppspptpptmpptxpotmpotxppsmppsx)docdotdocmdocxdotmdotx)vsdvsdmvsdxvstmvstx)excel
powerpointwordvisio>   odpodtodxc                   H   ^  \ rS rSrSrU 4S jrS rS rS	S jrS r	Sr
U =r$ )
WsgiDavDirBrowser,   zPWSGI middleware that handles GET requests on collections to display directories.c                 v  > [         TU ]  XU5        [        R                  " USSS9U l        UR                  S5      =(       d    SU l        U R                  R                  S5      nU(       a%  [        R                  R                  U5      U l
        OF[        R                  R                  [        R                  R                  [        5      S5      U l
        [        R                  R                  U R                  5      (       d  [        SU R                  < 35      eU R                   R#                  [$        U R                  SS	9  UR                  S
0 5      R                  S0 5      R'                  [$        S5        [)        U R                  S9n[+        U[-        5       S9nUR/                  S5      U l        g )Ndir_browserT)as_dict
mount_path htdocs_pathhtdocsz Invalid dir_browser htdocs_path )readonly	simple_dcuser_mapping)
searchpath)loader
autoescapeztemplate.html)super__init__r	   get_dict_value
dir_configgetr9   ospathrealpathr;   joindirname__file__isdir
ValueErrorwsgidav_appadd_providerASSET_SHARE
setdefaultr   r   r   get_templatetemplate)selfrP   next_appconfigr;   templateLoadertemplateEnv	__class__s          U/home/kali/flask_env/lib/python3.13/site-packages/wsgidav/dir_browser/_dir_browser.pyrD   WsgiDavDirBrowser.__init__/   sF   7--fmTR !**\28boo))-8!ww//<D!ww||BGGOOH,ExPDww}}T--..?@P@P?STUU 	%%k43C3Cd%S

;#'';FF	

 *T5E5EF!DUDWX#00A    c                 <    U R                   R                  S5      SL $ )NenableF)rF   rG   )rV   s    r\   is_disabledWsgiDavDirBrowser.is_disabledL   s    ""8,55r^   c           
         US   nS nUS   (       a  US   R                  X15      nUS   S;   Ga%  U(       Ga  UR                  (       Ga  [        R                  " U5      S:w  a  U R	                  [
        S5        US   S:X  a  [        R                  " X[        SS	9$ U R                  R                  S
5      (       a  S
UR                  SS5      ;   a  [        R                  " U5      nUR                  SS5      S   n[        R                  " [        R                  U5      5      nU" SSS[        [!        U5      5      4SS[        R"                  " 5       4/5        U/$ U R                  R                  S5      nUR                  S5      nU(       aF  U(       a?  UR%                  S5      (       d)  [&        R)                  SU SU S35        [+        XUS-   S9$ U R-                  X5      n	U R.                  R0                  " S0 U	D6n[        R                  " U5      nU" SSS[        [!        U5      5      4SS[        R"                  " 5       4/5        U/$ U R3                  X5      $ )N	PATH_INFOwsgidav.providerREQUEST_METHOD)GETHEADr   z,The server does not handle any body content.rh   T)is_headdavmountQUERY_STRINGr:   ?   z200 OK)Content-Typezapplication/davmount+xmlzContent-Length)zCache-ControlprivateDatedirectory_slashREQUEST_URI/z	Redirect z to )location)rn   ztext/html; charset=utf-8 )get_resource_instis_collectionr	   get_content_length_failr
   send_status_responser   rF   rG   make_complete_urlsplitto_bytesDAVMOUNT_TEMPLATEformatstrlenget_rfc1123_timeendswith_loggerinfor   _get_contextrU   renderrW   )
rV   environstart_responserI   dav_rescollectionUrlresrq   requrest_uricontexts
             r\   __call__WsgiDavDirBrowser.__call__O   sB   {#%&01CCDRG $%8%%%&&w/14

0B
 '(F200Wd 
 "":..:B 4 !% 6 6w ? - 3 3C ;A >mm$5$<$<]$KL D)3s3x=94!6!6!89	 u"oo112CDO";;}5L<8M8Mc8R8Ryd<.JK-lS6H  ''9G--&&11C--$C@%s3s8}50T2245	 5L}}W55r^   c                     [        XX45      nU R                  S:  aH  [        R                  S[	        UR                  5       [        R                  R                  5       35        Ue)z$Wrapper to raise (and log) DAVError.   zRaising DAVError )	r   verboser   warningr   get_user_infosysstdoutencoding)rV   valuecontext_infosrc_exceptionerr_conditiones         r\   ry   WsgiDavDirBrowser._fail   sP    U-G<<1OO#N1??3DcjjFYFY$Z#[\ r^   c                 
   UR                   (       d   eUS   R                  5       nU R                  R                  S5      nU R                  R                  S5      nUR                  S;   nU R
                  [        -   / [        [        UR                  5       5      UR                  5       UU R                  UU(       a  SOSSS.
nU R                  R                  S	5      nUS
L a  SnU(       aI  UR                  SS[        R                   S35      nUR                  S[        R                  " 5       5      nXS'   US   n	UR                  5       n
U
Gc  / n
UR                  SSS9nU GH  nUR!                  5       nUR                  5       nSn/ n/ n[#        U5      nUR                   (       a  UR%                  S5        SU S3n/ nU(       d  UR                   (       d  [&        R                  R)                  U5      S   R+                  S5      R-                  5       n[.        R                  U5      nU(       aE  U(       a4  SU S3nUR%                  S5        U(       a  UR%                  SU S35        O.U(       a  SnO$U[0        ;   a  U(       a  SnUR%                  S5        UR3                  5       (       a  UR%                  S 5        UUS!R5                  U5      S"R5                  U5      S!R5                  U5      UR7                  5       UR9                  5       UR                   UR;                  5       UR                  S#5      UR                  S$5      S%.nU
R%                  U5        GM     U R                  R                  S&/ 5      n[        R<                  " U5      (       a  UR?                  S'5      n/ nU
 H  nSnU H/  n[A        US(   U5      (       d  M  UR%                  US(   5        S
n  O   U(       a  MC  UR                  S)5      nUc  S"US*'   O[        R                  " U5      US*'   S+US,'   UR                  S-5      (       d-  UR                  S.5      nUb  [        RB                  " U5      US,'   U	R%                  U5        M     U(       a$  [D        RG                  S/[I        U5       S0U 35        S1nUS1:X  a  U	RK                  S2 S39  S4U;   a  URM                  [O        UR                  S45      5      UR                  S45      =(       d    S5UR                  S65      S7R5                  UR                  S85      =(       d    / 5      S7R5                  UR                  S95      =(       d    / 5      S:.5        U$ );z@
@see: http://www.webdav.org/specs/rfc4918.html#rfc.section.9.4
re   ms_sharepoint_supportlibre_office_support)r:   rs   z	read-onlyz
read-writeF)
r<   rowsversiondisplay_pathurl
is_top_dirrX   is_readonlyaccessis_authenticatedresponse_trailerTz${version} - ${time}z
${version}z,<a href='https://github.com/mar10/wsgidav/'>z</a>z${time}trailerr   N1)depthadd_self	directoryz./rs   rm   .zms-z:ofe|u|msofficezT<a class='edit2' title='Edit with Libre Office' href='vnd.libreoffice.command:ofv|u|z
'>Edit</a>zvnd.libreoffice.command:ofv|u|symlink r:   typetypeComment)href
ofe_prefixa_classadd_link_htmltr_classdisplay_namelast_modifiedrw   content_lengthdisplay_typedisplay_type_commentignore,r   r   str_modified-str_sizerw   r   zDir browser ignored z
 entries: namec                 X    SR                  U S   (       + U S   R                  5       5      $ )Nz{}{}rw   r   )r   lower)vs    r\   <lambda>0WsgiDavDirBrowser._get_context.<locals>.<lambda>.  s(    fmm/**An,=,C,C,Er^   )keyzwsgidav.auth.user_name	anonymouszwsgidav.auth.realmz, zwsgidav.auth.roleszwsgidav.auth.permissions)r   	user_namerealm
user_rolesuser_permissions)(rw   r   rF   rG   rI   r9   rR   r   r   get_hrefreplacer	   public_wsgidav_infor   get_directory_infoget_descendantsget_display_infor   appendrH   splitextlstripr   MS_OFFICE_EXT_TO_TYPE_MAPOPEN_OFFICE_EXTENSIONSis_linkrK   get_display_nameget_last_modifiedrx   is_basestringr|   r   byte_number_stringr   debugr   sortupdatebool)rV   r   r   r   r   r   r   r   r   r   dir_info_list	childListr   dir   r   
tr_classes	a_classesrel_hrefr   extms_office_typeentryignore_patternsignored_listr   patr   r   r   s                                 r\   r   WsgiDavDirBrowser._get_context   s    $$$$01==? $ 3 34K L#223IJ\\Y.
 oo3"#G$4$4$67##%$oo&%0kl %
 //%%&89d?,Goo>t?W?W>XX\]G ooi1F1F1HIG$	v  224 M//cE/JI ))+||~!

	 (-$$%%k2!#H:Q/H ""3+<+<''**403::3?EEGC%>%B%B3%GN%0+.~.>g)FJ%,,Z83 - 4 4&z  |D  {E  EO  %P!"
 2)IJ  66/)IJ%,,Z8;;==$$Y/ %","xx	2%'WW]%; # 4$'$8$8$:%(%:%:%<%(%6%6&)&<&<&>$&FF6N,.FF=,A $$U+m !p //--h;o..-33C8O"EF&50#66 ''n(=>!F ' !IIo6M$(*n%(,(=(=m(Ln% #E*99_--!&+;!<!-(,(?(?(OE*%KK1 #2 MM&s<'8&9L>R
 6>II   $w.NN(,W[[9Q-R(S")++.F"G"V;$[[)=>"&))GKK8L,M,SQS"T(,		$>?E2)
 r^   )rF   r;   r9   rU   )NNN)__name__
__module____qualname____firstlineno____doc__rD   ra   r   ry   r   __static_attributes____classcell__)r[   s   @r\   r4   r4   ,   s)    ZB:6B6Hd dr^   r4   )&r   rH   r   r   urllib.parser   jinja2r   r   r   wsgidavr   r	   wsgidav.dav_errorr
   r   r   wsgidav.mw.base_mwr   wsgidav.utilr   r   r   __docformat__get_module_loggerr   r   rR   stripr~   MS_OFFICE_TYPE_TO_EXT_MAPr   itemstelr   r   r4   ru   r^   r\   <module>r     s    
 
    C C % M M - M M"

 
 
* 
EG	  CP:4	   &,,.EAr'(!!$  / / T Tr^   