
    3yio              
         d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlmZm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, ddl-m.Z. dZ/ G d dee,         Z0 ejb                  d      Z2dddddddddd 	Z3y)!    )annotationsN)ForeStyle)Futurewait)ThreadPoolExecutor)fnmatch)sha1)ExtraScriptValue)MkDocsConfig)PluginError)
BasePluginevent_priority)FileFiles)is_error_template)Match)ParseResulturlparseunquote)Elementtostring   )PrivacyConfig)FragmentParser   c                  "   e Zd ZdZd Z ed      d        Z ed      d        Z ed      d        Z ed      d	        Z	 ed      d
        Z
 ed      d        ZddZdddZddZddZddZddZd d!dZd"dZd#dZddZd$dZd%dZy)&PrivacyPluginTc                   t        |j                  xs d      | _        | j                  j                  sy t        | j                  j                        | _        g | _        t        g       | _
        g | _        ddd| j                  j                  | _        | j                  j                  sdt        _        y t        j                  | j                  j                   j#                                y )N z6url\(\s*([\"']?)(?P<url>(?:https?:)?//[^)'\"]+)\1\s*\)z;[\"'](?P<url>(?:https?:)?//[^\"']+\.(?:css|js(?:on)?))[\"'].css.jsT)r   site_urlsiteconfigenabledr   concurrencypool	pool_jobsr   assetsassets_doneassets_expr_maplogdisabledsetLevel	log_levelupper)selfr&   s     a/var/www/html/content_weaver/venv/lib/python3.12/site-packages/material/plugins/privacy/plugin.py	on_configzPrivacyPlugin.on_config<   s    V__23	{{"" 't{{'>'>?	') Bi')MQ 
 kk)) 
 {{CLLL..4467    ic               v   | j                   j                  sy | j                   j                  sy |j                         D ]  }d }| j	                  |      D ]  }| j                  ||      r| j                  ||d      }d|j                  v s9|j                  rFt        |j                               }||j                  vsn|j                  j                  |        |s| j                  j                  |       |j                  |        |j                  D ]3  }t        |      }| j                  |      r | j                  ||d       5 |j                  D ]X  }t!        |t"              rt        |      }t        |j                        }| j                  |      rE| j                  ||d       Z y )NT
concurrentzmermaid.min.js)r&   r'   r+   media_files_parse_media_is_excluded_queuepathr$   r   geturlextra_javascriptappendremove	extra_cssr   
isinstancestr)r3   filesr&   	initiatorfileurlscriptr>   s           r4   on_fileszPrivacyPlugin.on_filesW   s   {{"" {{!! **, 	(ID ((3 C((i8;;sF;FD (3883FOO!1#**,!?!)@)@@"33::6BC ""9-Y'-	(2 $$ 	<D4.C$$S)Cd;	< -- 	<F&#&)&1 6;;'C$$S)Cd;	<r6   c                  | j                   j                  sy | j                   j                  sy t        j                  d|t        j
                  t        j                  z        D ]^  }| j                  |      }t        |j                  d            }| j                  ||j                        rK| j                  ||d       ` y )Nz'<img[^>]+src=['\"]?(?:https?:)?//[^>]+>flagssrcTr8   )r&   r'   r+   refindallIM_parse_fragmentr   getr<   rH   r=   )r3   htmlpager&   rF   matchelrI   s           r4   on_page_contentzPrivacyPlugin.on_page_content   s    {{"" {{!! ZZ6"$$+
 		<E %%e,B 266%=)C$$S$))4Cd;		<r6   2   c               X   | j                   j                  sy t        | j                         | j                  j	                          | j
                  D ]U  }t        j                  |j                        \  }}|dvs*| j                  j                  |       |j                  |       W y Nr!   )r&   r'   r   r*   clearr+   	posixpathsplitextdest_urir,   rA   )r3   envr&   rF   rH   _	extensions          r4   on_envzPrivacyPlugin.on_env   s    {{"" 	T^^ KK 	#D$--dmm<LAy/  ''-T"		#r6   ic                   | j                   j                  sy |j                  d      sy t        ||j                  |j
                  d      }| j                  |||      S )Nz.htmlF)r&   r'   endswithr   docs_dirsite_dir_parse_html)r3   output_contenttemplate_namer&   rG   s        r4   on_post_templatezPrivacyPlugin.on_post_template   sT    {{"" %%g. %P		6BBr6   c               j    | j                   j                  sy | j                  ||j                  |      S N)r&   r'   rj   rH   )r3   outputrW   r&   s       r4   on_post_pagezPrivacyPlugin.on_post_page   s-    {{"" 		6::r6   c                  | j                   j                  sy t        | j                         | j                  j	                          | j
                  D ]  }t        j                  |j                        \  }}|dv r@| j                  j                  | j                  j                  | j                  |             i|| j                  vsxt        j                  j!                  t#        |j$                              s|j'                           t        | j                         | j                  j)                          y r]   )r&   r'   r   r*   r^   r+   r_   r`   ra   rA   r)   submit_patchr,   osr>   existsrE   abs_src_path	copy_fileshutdown)r3   r&   rH   rc   rd   s        r4   on_post_buildzPrivacyPlugin.on_post_build   s    {{"" 	T^^ KK 	%D$--dmm<LAyO+%%dii&6&6KK'  T---77>>#d&7&7"89NN$	% 	T^^		r6   c                |    |j                   xs | j                  j                   }|| j                  j                   k7  S ro   )hostnamer%   )r3   rI   r|   s      r4   _is_externalzPrivacyPlugin._is_external   s/    <<5499#5#5499----r6   Nc                .   | j                  |      sy| j                  j                  syd}|rMdj                  t        j
                  t        j                  d|j                   dt        j                  g      }| j                  j                  rc| j                  j                  D ]  }t        | j                  |      |      s y t        j                  d|j                          d| d       y| j                  j                   D ]I  }t        | j                  |      |      st        j                  d|j                          d| d        y | j                  j"                  s*t        j%                  d	|j                          d
|        yy)NTr    zin 'z' FzExcluding external file 'zdue to inclusion patternszdue to exclusion patternszExternal file:  )r}   r&   r+   joinr   WHITEr   DIMsrc_uri	RESET_ALLassets_includer	   _path_from_urlr.   debugr?   assets_excludeassets_fetchwarning)r3   rI   rG   viapatterns        r4   r<   zPrivacyPlugin._is_excluded   so     % {{!! ''

EIIy((), C ;;%%;;55 !4..s3W= !
 II+CJJL>C5 A% &  {{11 	Gt**3/9		/

~Ru E) * 	 {{''KK/#**,q>? r6   c                    t               }|j                  |       |j                          t        |j                  t
              r|j                  S t        d|z         )Nz7Couldn't parse due to possible syntax error in HTML: 

)r   feedcloserD   resultr   r   )r3   fragmentparsers      r4   rT   zPrivacyPlugin._parse_fragment0  sS    !H fmmW-==  G
 	
r6   c           	        t        j                  |j                        \  }}|| j                  vrg S |j                  sg S t        j                  | j                  |   t
        j                  t
        j                  z        }t        |j                  d      5 }t        j                  ||j                               }|D cg c]  }t        |j                  d             c}cd d d        S c c}w # 1 sw Y   y xY w)NrM   	utf-8-sigencodingrI   )r_   r`   ra   r-   rw   rP   compilerR   rS   openfinditerreadr   group)r3   rG   rc   rd   exprfresultsr   s           r4   r;   zPrivacyPlugin._parse_mediaD  s     )))*<*<=9D000I %%I zz$..y9244"$$;O)(([A 	IQkk$1G@GHfHV\\%01H	I 	IH	I 	Is   )C6!C1%C61C66C?c                     dfdd fd}t        j                  d||t         j                  t         j                  z        S )Nc                    t        j                        rCt        j                  xs d      }t	        j
                  |j                  | j                        S | j                        S )N/)	r   r   r   r$   r_   r   r>   rI   url_relative_to)rH   baser&   rG   s     r4   resolvez*PrivacyPlugin._parse_html.<locals>.resolve[  sN     !2!23 637 ~~dii::++I66r6   c                   
j                  | j                               }
j                  j                  r|j                  dk(  rĉ
j                  j
                  j                         D ]  \  }}|j                  ||        
j                  j                  rp|j                  d      dk(  r\t        j                  d|j                  dd            }d|vr|j                  d       |j                  ddj                  |             |j                  d	k(  rtt        |j                  d
            }
j                  |      sH|j                  dd      }|dk(  ry|dv r,
j!                  |      }|r|j                  d
 	|             |j                  dk(  s|j                  dk(  rXt        |j                  d            }
j                  |      s,
j!                  |      }|r|j                  d 	|             |j                  dk(  rXt        |j                  d
            }
j                  |      s,
j!                  |      }|r|j                  d
 	|             
j#                  |      S )Natarget_blankz\S+relr    noopenerr   linkhref
preconnect)iconpreload
stylesheetrJ   imgrO   image)rT   r   r&   linkstaglinks_attr_mapitemssetlinks_noopenerrU   rP   rQ   rA   r   r   r<   r=   _print)rX   rY   keyvaluer   rI   rH   r&   rG   r   r3   s          r4   replacez*PrivacyPlugin._parse_html.<locals>.replacec  s   %%ekkm4B {{  RVVs]"&++"<"<"B"B"D 'JCFF3&' ;;--vvh'83 jjr1BC%S0JJz2 uchhsm4 vvrvvf~.((i8&&+C l*! ??#{{37FF674=9 vv!RVVu_rvve}-((i8;;sF3Dugdm4 vv rvvf~.((i8;;sF3Dvwt}5 ;;r?"r6   zP<(?:(?:a|link|image)[^>]+href|(?:script|img)[^>]+src)=['\"]?(?:https?:)?//[^>]+>rM   )rH   r   rX   r   )rP   subrR   rS   )r3   rp   rG   r&   r   r   s   ` `` @r4   rj   zPrivacyPlugin._parse_htmlX  s<    	73	# 3	#l vv_VRTTBDD[
 	
r6   c                    d}|j                   D ]/  }t        |j                   |   t              r!||j                   |<   1 t        |d      }|j	                  dd      j	                  d| dd      S )	N__temp__unicoder   z />>z=""r    )attribrD   rE   r   r   )r3   rY   tempnamedatas        r4   r   zPrivacyPlugin._print  sm    II 	'Dbiios3"&		$	'
 y1||E3'//#dV2CCr6   c                   | j                  |      }t        j                  | j                  j                  |      }| j
                  j                  |      }|s| j                  ||      }|j                         |_	        t        j                  |j                        \  }}|rC|rA| j                  j                  | j                  j                  | j                   ||             n| j!                  ||      sy | j
                  j                  |j"                        s| j
                  j                  |       |j$                  r"|xj                  d|j$                   z  c_	        |S )N#)r   r_   r   r&   assets_fetch_dirr+   get_file_from_path_path_to_filer?   rI   r`   r>   r*   rA   r)   rs   _fetchr   r   )	r3   rI   r&   r9   r>   fullrH   rc   rd   s	            r4   r=   zPrivacyPlugin._queue  s   ""3'~~dkk::DA {{--d3 %%dF3Dzz|DH %--chh7LAyZ%%dii&6&6KKv'  {{40 ;;11$,,?""4( <<HH!CLL>**H r6   c                   t         j                  j                  |j                        r| j                  j
                  s^|j                  }|j                  j                  d      rd|j                   |_        t        j                  d|j                          	 t        j                  |j                  ddj                  g d      it              }|j                          |j"                  d   j%                  d      d   }t&        j                  |      }|r|j)                  |      s||z  }| j+                  ||j,                         ||j                  k7  r>	 t        j.                  t         j                  j1                  |      |j                         t         j                  j;                  |j                        \  }	}t         j                  j                  |j                        rt         j                  j=                  |j                        |_        t         j                  j;                  |j                        \  }	}|j>                  j)                  |      s?|xj8                  |z  c_        |xj@                  |z  c_         |xj>                  |z  c_        |j@                  |_        | jC                  |      D ])  }
| jE                  |
|      r| jG                  |
|d       + y# t        $ r/}t        j!                  d|j                   d	|        Y d }~y
d }~ww xY w# t2        $ rQ}|j4                  t4        j6                  k7  r"t        j!                  d|j8                          ||_        Y d }~d }~ww xY w)Nz//zhttp:zDownloading external file: z
User-Agentr   )z)Mozilla/5.0 (Windows NT 10.0; Win64; x64)z&AppleWebKit/537.36 (KHTML, like Gecko)z"Chrome/98.0.4758.102 Safari/537.36)headerstimeoutzCouldn't retrieve z: Fzcontent-type;r   zCouldn't create symbolic link: Tr8   )$ru   r>   isfilerw   r&   cacherI   
startswithr.   inforequestsrU   r   DEFAULT_TIMEOUT_IN_SECSraise_for_status	Exceptionr   r   split
extensionsrg   _save_to_filecontentsymlinkbasenameOSErrorerrnoEEXISTr   r`   realpathabs_dest_pathra   r;   r<   r=   )r3   rH   r&   r>   reserrormimerd   erc   rI   s              r4   r   zPrivacyPlugin._fetch  s    ww~~d//08I8I$$D xx""4("488*- HH2488*=>llHH %chh' 4" $$& ;;~.44S9!<D"t,Iy!9	! tS[[1t(((-JJrww//5t7H7HI ww''(9(9:977>>$++, " 0 01B1B CD77++D,=,=>LAy %%..y9	) *""i/" == $$T* 	<C$$S$/Cd;	<
 m  0
"UGDE$  
-ww%,,.=dll^L )-D%%
-s2   A	K7 "=L2 7	L/ %L**L/2	N;ANNc           	         t        j                  d      5 }d fd}t        j                  j                        \  }}t        j                   j                  |   t
        j                  t
        j                  z        } j                  j                  |j                  ||j                                      d d d        y # 1 sw Y   y xY w)Nr   r   c                `   | j                  d      }j                  t        |            }t        j                  j
                  j                  |      }j                  j                  |      }|st        j                  t        j                  j	                  j
                  j                  |            }t        j                  t        j                  |      |      }j                  j                  |      }|s*t        j                  d       t!        j"                  d       |j$                  j'                  d      r9t        j                  j(                  j+                         |j$                        }n|j-                        }| j                         j/                  ||      S )NrI   zxFile not found. This is likely a bug in the built-in privacy plugin. Please create an issue with a minimal reproduction.r   r#   )r   r   r   r_   r   r&   r   r+   r   ru   readlinkr>   	cache_dirdirnamer.   r   sysexitrI   rg   r%   r?   r   r   )	rX   r   r>   r   rH   r   rI   rG   r3   s	          r4   r   z%PrivacyPlugin._patch.<locals>.replace=  s7   E* **8E?; ~~dkk&B&BDI {{55d;;;rww||DKK4I4I4'PQD$>>)*;*;D*A4HD  ;;99$?D II(
 HHQK 88$$U+#..)9)9);TXXFC ..y9C {{},,UC88r6   r   )r   rw   r_   r`   ra   rP   r   r-   rR   rS   r   r   r   r   )r3   rG   r   r   rc   rd   r   s   ``     r4   rt   zPrivacyPlugin._patch9  s    )(([A 2	Q%9P %--i.@.@ALAy::d229=rttbdd{KD ''!&&(+_2	 2	 2	s   B&C		Cc                   t        j                  |j                        }t        j                  dd|      }|j
                  rVt        j                  |      \  }}t        |j
                  j                  d            j                         d d }| d| | }|j                  ddd|      }|j                         dd  S )	Nz/\.z/_utf-8   .r    )schemequeryr   r>      )r_   normpathr>   rP   r   r   r`   r
   encode	hexdigest_replacer?   )r3   rI   r>   r   rd   digests         r4   r   zPrivacyPlugin._path_from_urls  s    !!#((+vvfdD) 99'006OD) #))**734>>@!DFV1VHYK0D llBr$lOzz|ABr6   c                    t        t        j                  | j                  j                  t        |            t        j                  j                  | j                  j                        |j                  d      S )NF)r   r_   r   r&   r   r   ru   r>   abspathr   ri   )r3   r>   r&   s      r4   r   zPrivacyPlugin._path_to_file  sO    NN4;;77GGGOODKK112OO	
 	
r6   c                   t        j                  t         j                  j                  |      d       t	        |t
              rt        |d      }t        |d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)NT)exist_okr   wb)	ru   makedirsr>   r   rD   rE   bytesr   write)r3   r>   r   r   s       r4   r   zPrivacyPlugin._save_to_file  s`    
BGGOOD)d;gs#GW-G$ 	GGG	 	 	s   A88B)rI   URLro   )rI   r  rG   zFile | None)r   rE   )rG   r   returnz	list[URL])rp   rE   rG   r   r&   r   )rY   r   )F)rI   r  r&   r   )rH   r   r&   r   )rG   r   )r>   rE   r&   r   )r>   rE   r   zstr | bytes)__name__
__module____qualname__supports_multiple_instancesr5   r   rK   rZ   re   rm   rq   rz   r}   r<   rT   r;   rj   r   r=   r   rt   r   r   r    r6   r4   r   r   8   s    "&86 D0< 0<x D< <, B# #( C
C 
C C; ; B @.
-d
(I(D
XD*ZZz3t &
r6   r   zmkdocs.material.privacyr#   z.avifz.gifz.jpgz.pngz.svgz.webpr"   )	zapplication/javascriptz
image/avifz	image/gifz
image/jpegz	image/pngzimage/svg+xmlz
image/webpztext/javascriptztext/css)4
__future__r   r   loggingru   r_   rP   r   r   coloramar   r   concurrent.futuresr   r   concurrent.futures.threadr   r	   hashlibr
   mkdocs.config.config_optionsr   mkdocs.config.defaultsr   mkdocs.exceptionsr   mkdocs.pluginsr   r   mkdocs.structure.filesr   r   mkdocs.utilsr   r   urllib.parser   r  r   r   xml.etree.ElementTreer   r   r&   r   r   r   r   r   	getLoggerr.   r   r  r6   r4   <module>r     s   * #   	  	  
   + 8   9 / ) 5 . *  > > 3 ! " \	J}- \	F g12 $

r6   