Ë
    "ïàj2  ã                   óL  — d Z ddlZddlZddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZmZ ddlmZmZmZ ddlmZ dd	lmZmZmZ d
Z ej0                  e«      ZdZdj9                  «       ZdddddœZi ZejA                  «       D ]  \  Z!Z"e"D ]  Z#e!ee#<   Œ	 Œ h d£Z$ G d„ de«      Z%y)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                   ó<   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zdd„Zd„ Zˆ xZ	S )ÚWsgiDavDirBrowserzPWSGI middleware that handles GET requests on collections to display directories.c                 ón  •— t         ‰| �  |||«       t        j                  |dd¬«      | _        |j                  d«      xs d| _        | j                  j                  d«      }|r%t        j                  j                  |«      | _
        nFt        j                  j                  t        j                  j                  t        «      d«      | _
        t        j                  j                  | j                  «      st        d| j                  ›�«      ‚| j                   j#                  t$        | j                  d¬	«       |j                  d
i «      j                  di «      j'                  t$        d«       t)        | j                  ¬«      }t+        |t-        «       ¬«      }|j/                  d«      | _        y )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Úgetr8   ÚosÚpathÚrealpathr:   ÚjoinÚdirnameÚ__file__ÚisdirÚ
ValueErrorÚwsgidav_appÚadd_providerÚASSET_SHAREÚ
setdefaultr   r   r   Úget_templateÚtemplate)ÚselfrO   Únext_appÚconfigr:   ÚtemplateLoaderÚtemplateEnvÚ	__class__s          €úO/srv/dav/.venv/lib/python3.12/site-packages/wsgidav/dir_browser/_dir_browser.pyrC   zWsgiDavDirBrowser.__init__0   sE  ø€ Ü‰Ñ˜ h°Ô7ä×-Ñ-¨f°mÈTÔRˆŒð !Ÿ*™* \Ó2Ò8°bˆŒà—o‘o×)Ñ)¨-Ó8ˆÙÜ!Ÿw™w×/Ñ/°Ó<ˆDÕä!Ÿw™wŸ|™|¬B¯G©G¯O©O¼HÓ,EÀxÓPˆDÔä�w‰w�}‰}˜T×-Ñ-Ô.ÜÐ?À×@PÑ@PÐ?SÐTÓUÐUð 	×Ñ×%Ñ%¤k°4×3CÑ3CÈdÐ%ÔSà�
‰
�; Ó#×'Ñ'¨¸Ó;×FÑFÜ˜ô	
ô
 *°T×5EÑ5EÔFˆÜ!¨ÔDUÓDWÔXˆØ#×0Ñ0°ÓAˆ�ó    c                 ó<   — | j                   j                  d«      du S )NÚenableF)rE   rF   )rU   s    r[   Úis_disabledzWsgiDavDirBrowser.is_disabledM   s   € Ø�‰×"Ñ" 8Ó,°Ð5Ð5r\   c           
      ó\  — |d   }d }|d   r|d   j                  ||«      }|d   dv �rò|�rï|j                  �rât        j                  |«      dk7  r| j	                  t
        d«       |d   dk(  rt        j                  ||t        d¬	«      S | j                  j                  d
«      ržd
|j                  dd«      v rŠt        j                  |«      }|j                  dd«      d   }t        j                  t        j                  |«      «      } |dddt        t!        |«      «      fddt        j"                  «       fg«       |gS | j                  j                  d«      }|r>|j%                  d«      s-t&        j)                  d|› d|› d�«       t+        |||› d�¬«      S | j-                  ||«      } | j.                  j0                  di |¤Ž}t        j                  |«      } |dddt        t!        |«      «      fddt        j"                  «       fg«       |gS | j3                  ||«      S )NÚ	PATH_INFOúwsgidav.providerÚREQUEST_METHOD)ÚGETÚHEADr   z,The server does not handle any body content.re   T)Úis_headÚdavmountÚQUERY_STRINGr9   ú?é   z200 OK)úContent-Typezapplication/davmount+xmlzContent-Length)zCache-ControlÚprivateÚDateÚdirectory_slashú/z	Redirect z to )Úlocation)rk   ztext/html; charset=utf-8© )Úget_resource_instÚis_collectionr	   Úget_content_lengthÚ_failr
   Úsend_status_responser   rE   rF   Úmake_complete_urlÚsplitÚto_bytesÚDAVMOUNT_TEMPLATEÚformatÚstrÚlenÚget_rfc1123_timeÚendswithÚ_loggerÚinfor   Ú_get_contextrT   ÚrenderrV   )	rU   ÚenvironÚstart_responserH   Údav_resÚcollectionUrlÚresrn   Úcontexts	            r[   Ú__call__zWsgiDavDirBrowser.__call__P   s4  € Ø�{Ñ#ˆàˆØÐ%Ò&ØÐ0Ñ1×CÑCÀDÈ'ÓRˆGð Ð$Ñ%¨Ò8ÚØ×%Ó%ä×&Ñ& wÓ/°1Ò4Ø—
‘
Ü0ØBôð
 Ð'Ñ(¨FÒ2Ü×0Ñ0Ø˜^¬W¸dôð ð
 �‰×"Ñ" :Ô.°:ÀÇÁØ óBñ 4ô !%× 6Ñ 6°wÓ ?�Ø -× 3Ñ 3°C¸Ó ;¸AÑ >�Ü—m‘mÔ$5×$<Ñ$<¸]Ó$KÓL�ñ ØàDØ)¬3¬s°3«x«=Ð9Ø4Ø¤×!6Ñ!6Ó!8Ð9ð	ôð �u�à"Ÿo™o×1Ñ1Ð2CÓDˆOÙ t§}¡}°SÔ'9Ü—‘˜y¨¨¨d°4°&¸Ð:Ô;Ü-Ø˜^¸¸¸a°jôð ð ×'Ñ'¨°Ó9ˆGà&�$—-‘-×&Ñ&Ñ1¨Ñ1ˆCÜ—-‘- Ó$ˆCÙØà@Ø%¤s¬3¨s«8£}Ð5Ø0ØœT×2Ñ2Ó4Ð5ð	ôð �5ˆLà�}‰}˜W nÓ5Ð5r\   c                 óÐ   — t        ||||«      }| j                  dk\  rHt        j                  dt	        |j                  «       t        j                  j                  «      › �«       |‚)z$Wrapper to raise (and log) DAVError.é   zRaising DAVError )	r   Úverboser€   Úwarningr   Úget_user_infoÚsysÚstdoutÚencoding)rU   ÚvalueÚcontext_infoÚsrc_exceptionÚerr_conditionÚes         r[   ru   zWsgiDavDirBrowser._fail“   sT   € ä�U˜L¨-¸ÓGˆØ�<‰<˜1ÒÜ�O‰OØ#¤N°1·?±?Ó3DÄcÇjÁj×FYÑFYÓ$ZÐ#[Ð\ôð ˆr\   c                 ó
  — |j                   sJ ‚|d   j                  «       }| j                  j                  d«      }| j                  j                  d«      }|j                  dv }| j
                  t        z   g t        t        |j                  «       «      |j                  «       || j                  ||rdndddœ
}| j                  j                  d	«      }|d
u rd}|rH|j                  ddt        j                  › d�«      }|j                  dt        j                  «       «      }||d<   |d   }	|j                  «       }
|
�€êg }
|j                  dd¬«      }|D �]Ï  }|j!                  «       }|j                  «       }d}g }g }t#        |«      }|j                   r|j%                  d«       d|› d�}g }|sµ|j                   s©t&        j                  j)                  |«      d   j+                  d«      j-                  «       }t.        j                  |«      }|r6|r/d|› d�}|j%                  d«       |r8|j%                  d|› d�«       n"|r d}n|t0        v r|rd}|j%                  d«       |j3                  «       r|j%                  d «       ||d!j5                  |«      d"j5                  |«      d!j5                  |«      |j7                  «       |j9                  «       |j                   |j;                  «       |j                  d#«      |j                  d$«      d%œ}|
j%                  |«       �ŒÒ | j                  j                  d&g «      }t        j<                  |«      r|j?                  d'«      }g }|
D ]¸  }d}|D ])  }tA        |d(   |«      sŒ|j%                  |d(   «       d
} n |rŒ6|j                  d)«      }|€d"|d*<   nt        j                  |«      |d*<   d+|d,<   |j                  d-«      s+|j                  d.«      }|�t        jB                  |«      |d,<   |	j%                  |«       Œº |r$tD        jG                  d/tI        |«      › d0|› �«       d1}|d1k(  r|	jK                  d2„ ¬3«       d4|v r•|jM                  tO        |j                  d4«      «      |j                  d4«      xs d5|j                  d6«      d7j5                  |j                  d8«      xs g «      d7j5                  |j                  d9«      xs g «      d:œ«       |S );zP
        @see: http://www.webdav.org/specs/rfc4918.html#rfc.section.9.4
        rb   Úms_sharepoint_supportÚlibre_office_support)r9   ro   z	read-onlyz
read-writeF)
r;   ÚrowsÚversionÚdisplay_pathÚurlÚ
is_top_dirrW   Ú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./ro   rj   ú.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ú r9   ÚtypeÚtypeComment)ÚhrefÚ
ofe_prefixÚa_classÚadd_link_htmlÚtr_classÚdisplay_nameÚlast_modifiedrs   Úcontent_lengthÚdisplay_typeÚdisplay_type_commentÚignoreú,r´   rµ   Ústr_modifiedú-Ústr_sizers   r¶   zDir browser ignored z
 entries: Únamec                 óP   — dj                  | d    | d   j                  «       «      S )Nz{}{}rs   r´   )r{   Úlower)Úvs    r[   ú<lambda>z0WsgiDavDirBrowser._get_context.<locals>.<lambda>.  s*   € ˜fŸm™mØ˜/Ñ*Ð*¨A¨nÑ,=×,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)(rs   r    rE   rF   rH   r8   rQ   r   r   Úget_hrefÚreplacer	   Úpublic_wsgidav_infor~   Úget_directory_infoÚget_descendantsÚget_display_infor   ÚappendrG   ÚsplitextÚlstriprÀ   ÚMS_OFFICE_EXT_TO_TYPE_MAPÚOPEN_OFFICE_EXTENSIONSÚis_linkrJ   Úget_display_nameÚget_last_modifiedrt   Úis_basestringrx   r   Úbyte_number_stringr€   Údebugr}   ÚsortÚupdateÚbool)rU   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‚   zWsgiDavDirBrowser._get_contextœ   s  € ð ×$Ò$Ð$Ð$àÐ0Ñ1×=Ñ=Ó?ˆØ $§¡× 3Ñ 3Ð4KÓ LÐØ#Ÿ™×2Ñ2Ð3IÓJÐØ—\‘\ YÐ.ˆ
ð —o‘o¬Ñ3ØÜ"Ü# G×$4Ñ$4Ó$6Ó7Ø×#Ñ#Ó%à$Ø—o‘oØ&Ù%0‘k°lØ %ñ
ˆð —/‘/×%Ñ%Ð&8Ó9ˆØ�d‰?Ø,ˆGáØ—o‘oØØ>¼t×?WÑ?WÐ>XÐX\Ð]óˆGð —o‘o i´×1FÑ1FÓ1HÓIˆGà$ˆ�	Ñà�v‰ˆð  ×2Ñ2Ó4ˆàÑ àˆMØ×/Ñ/°cÀEÐ/ÓJˆIØ ó 6,�Ø×)Ñ)Ó+�Ø—|‘|“~�Ø!�
Ø�
Ø�	ô (¨Ó-�Ø×$Ò$Ø×%Ñ% kÔ2Ø!# H :¨QÐ/�Hà "�á"¨3×+<Ò+<ÜŸ'™'×*Ñ*¨4Ó0°Ñ3×:Ñ:¸3Ó?×EÑEÓG�CÜ%>×%BÑ%BÀ3Ó%G�NÙ%Ù0Ø+.¨~Ð.>¸gÐ)F˜JØ%×,Ñ,¨ZÔ8Ù3Ø -× 4Ñ 4Ø&zð  |Dð  {Eð  EOð  %Põ!"ñ
 2Ø)I™Jð Ô 6Ñ6Ù/Ø)I˜JØ%×,Ñ,¨ZÔ8à—;‘;”=Ø×$Ñ$ YÔ/ð %Ø",Ø"Ÿx™x¨	Ó2Ø%'§W¡W¨]Ó%;Ø #§¡¨Ó 4Ø$'×$8Ñ$8Ó$:Ø%(×%:Ñ%:Ó%<Ø%(×%6Ñ%6Ø&)×&<Ñ&<Ó&>Ø$&§F¡F¨6£NØ,.¯F©F°=Ó,Añ�ð ×$Ñ$ UÖ+ðm6,ðp Ÿ/™/×-Ñ-¨h¸Ó;ˆÜ×Ñ˜oÔ.Ø-×3Ñ3°CÓ8ˆOàˆØ"ò 	ˆEàˆFØ&ò �Ü˜5 Ñ0°#Õ6Ø ×'Ñ'¨¨nÑ(=Ô>à!�FÙðñ Øà!ŸI™I oÓ6ˆMØÐ$Ø(*��nÒ%ä(,×(=Ñ(=¸mÓ(L��nÑ%à #ˆE�*ÑØ—9‘9˜_Ô-Ø!&§¡Ð+;Ó!<�Ø!Ð-Ü(,×(?Ñ(?ÀÓ(O�E˜*Ñ%à�K‰K˜Õð1	ñ2 Ü�M‰MØ&¤s¨<Ó'8Ð&9¸ÀLÀ>ÐRôð
 ˆØ�6Š>Ø�I‰Iñð ô ð $ wÑ.Ø�N‰Nä(,¨W¯[©[Ð9QÓ-RÓ(SØ")§+¡+Ð.FÓ"GÒ"VÈ;Ø$Ÿ[™[Ð)=Ó>Ø"&§)¡)¨G¯K©KÐ8LÓ,MÒ,SÐQSÓ"TØ(,¯	©	ØŸ™Ð$>Ó?ÒEÀ2ó)ñô
ð ˆr\   )NNN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rC   r_   rŠ   ru   r‚   Ú__classcell__)rZ   s   @r[   r4   r4   -   s#   ø„ ÙZôBò:6òA6óFödr\   r4   )&rì   rG   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€   rQ   Ústriprz   ÚMS_OFFICE_TYPE_TO_EXT_MAPrÒ   ÚitemsÚtÚelr—   rÓ   r4   rq   r\   r[   ú<module>rû      sÊ   ðñó 
Û 
Ý Ý  ç CÑ Cç %ß MÑ MÝ -ß MÑ Mà"€à
 ˆ$×
 Ñ
  Ó
*€à€ð÷ 
�EƒGð	 ð CØPØ:Ø4ñ	Ð ð Ð Ø&×,Ñ,Ó.ò )�E€A€rØò )ˆØ'(Ð! !Ò$ñ)ð)ò /Ð ôS˜õ Sr\   