
    ^jN                        d dl Z d dlZd dl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mZmZmZmZ dd	lmZ dd
lmZ  G d d      Zy# e$ r ej                  dk\  rd dl
Z
nd dlmZ Y Qw xY w# e$ r d dlmZmZ Y [w xY w)    N)deepcopy)OrderedDict)
HTMLParser      )urlparseurljoin   )CloudflareCode1020CloudflareIUAMErrorCloudflareSolveErrorCloudflareChallengeErrorCloudflareCaptchaErrorCloudflareCaptchaProvider)Captcha)JavaScriptInterpreterc                   v    e Zd Zd Zed        Zed        Zd Zd Zed        Z	ed        Z
d Zd	 Zd
 Zd Zy)
Cloudflarec                     || _         y N)cloudscraper)selfr   s     R/var/www/lego-monitor/venv/lib/python3.12/site-packages/cloudscraper/cloudflare.py__init__zCloudflare.__init__.   s
    (    c                     t         j                  dk\  rAt         j                  dk\  rt        j                  |       S t	               j                  |       S t	               j                  |       S )N)r   r   r   )sysversion_infohtmlunescaper   )	html_texts    r   r!   zCloudflare.unescape5   sS    v%6)}}Y//<((33|$$Y//r   c                    	 | j                   j                  dd      j                  d      xr | j                  dv xr t	        j
                  d| j                  t        j                  t        j                  z        xr@ t	        j
                  d| j                  t        j                  t        j                  z        S # t        $ r Y yw xY w)NServer 
cloudflare)i  i  z/cdn-cgi/images/trace/jsch/5<form .*?="challenge-form" action="/\S+__cf_chl_f_tk=F
headersget
startswithstatus_coderesearchtextMSAttributeErrorresps    r   is_IUAM_ChallengezCloudflare.is_IUAM_ChallengeC   s    	  2.99,G $$
2II<diiPRPTPTU IIPIIDD244K		  		s   B>C 	CCc                     	 | j                  |      xr@ t        j                  d|j                  t        j                  t        j
                  z        S # t        $ r Y yw xY w)NzDcpo.src\s*=\s*['"]/cdn-cgi/challenge-platform/\S+orchestrate/jsch/v1F)r5   r-   r.   r/   r0   r1   r2   r   r4   s     r   is_New_IUAM_Challengez Cloudflare.is_New_IUAM_ChallengeY   s[    
	&&t, II_IIDD244K  		   AA 	A! A!c                     	 | j                  |      xr@ t        j                  d|j                  t        j                  t        j
                  z        S # t        $ r Y yw xY w)NzQcpo.src\s*=\s*['"]/cdn-cgi/challenge-platform/\S+orchestrate/(captcha|managed)/v1F)is_Captcha_Challenger-   r.   r/   r0   r1   r2   r7   s     r   is_New_Captcha_Challengez#Cloudflare.is_New_Captcha_Challengel   s[    
	))$/ IIlIIDD244K  		r9   c                    	 | j                   j                  dd      j                  d      xr | j                  dk(  xr t	        j
                  d| j                  t        j                  t        j                  z        xr@ t	        j
                  d| j                  t        j                  t        j                  z        S # t        $ r Y yw xY w)Nr$   r%   r&     z(/cdn-cgi/images/trace/(captcha|managed)/r'   Fr(   r3   s    r   r;   zCloudflare.is_Captcha_Challenge   s    	  2.99,G $$+III499VXVZVZ]_]a]aVab IIPIIDD244K		  		s   B?C 	CCc                    	 | j                   j                  dd      j                  d      xrQ | j                  dk(  xr@ t	        j
                  d| j                  t        j                  t        j                  z        S # t        $ r Y yw xY w)Nr$   r%   r&   r>   z'<span class="cf-error-code">1020</span>F)
r)   r*   r+   r,   r-   r.   r/   r0   DOTALLr2   r3   s    r   is_Firewall_BlockedzCloudflare.is_Firewall_Blocked   s    	  2.99,G $$+II>IIDD299$  		s   A=B   	BBc                    | j                  |      r | j                  j                  t        d       | j	                  |      r | j                  j                  t
        d       | j                  |      r | j                  j                  t
        d       | j                  |      s| j                  |      r"| j                  j                  rt        d       yy)Nz9Cloudflare has blocked this request (Code 1020 Detected).zrDetected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.zjDetected a Cloudflare version 2 challenge, This feature is not available in the opensource (free) version.z*Detected a Cloudflare version 1 challenge.TF)rA   r   simpleExceptionr   r<   r   r8   r;   r5   debugprintr7   s     r   is_Challenge_RequestzCloudflare.is_Challenge_Request   s    ##D)--"K
 ((.--( E
 %%d+--(|
 $$T*d.D.DT.J  &&BCr   c           
        	 	 t        j                  d|t         j                  t         j                  z        j	                         	t        	fddD              s | j                  j                  t        d       t               }t        j                  d	d   t         j                  t         j                  z        D ]N  }t        t        j                  d|            }|j                  d      d	v s6|j                  |d   |d
   i       P 	 t!        |      }	 t#        j$                  |      j'                  ||j(                        d<   |j.                   d|j(                   | j1                  	d          dS # t        $ r# | j                  j                  t        d       Y w xY w# t*        $ r8}| j                  j                  t        dt-        |d|              Y d }~d }~ww xY w)Nza<form (?P<form>.*?="challenge-form" action="(?P<challengeUUID>.*?__cf_chl_f_tk=\S+)"(.*?)</form>)c              3   &   K   | ]  }|v  
 y wr    .0keyformPayloads     r   	<genexpr>z5Cloudflare.IUAM_Challenge_Response.<locals>.<genexpr>        Ocsk)O   formchallengeUUIDzRCloudflare IUAM detected, unfortunately we can't extract the parameters correctly.z^\s*<input\s(.*?)/>rR   z(\S+)="(\S+)"name)rjschl_vcpassvaluejschl_answerz+Unable to parse Cloudflare anti-bots page: message://rS   urldata)r-   r.   r0   r@   	groupdictallr   rC   r   r   findallr1   dictr*   updater2   r	   r   dynamicImportsolveChallengenetloc	Exceptiongetattrschemer!   )
r   bodyr]   interpreterpayloadchallengeParaminputPayload
hostParsederM   s
            @r   IUAM_Challenge_Responsez"Cloudflare.IUAM_Challenge_Response   s   	))4 ryy  ik  O5NOO!!11'h
 "mG"$**-C[QWEXZ\Z^Z^acaeaeZe"f R#BJJ/?$PQ##F+/HHNNL$8,w:O#PQR c]
	&;&I&I'nT:#4#45 N# !''(J,=,=+>t}}[YhMi?j>kl
 	
%  	--#d	  	--#=gaTU>V=WX 	s0   C0F  4F  2F/  )F,+F,/	G08.G++G0c                   
 	 t        j                  d|t         j                  t         j                  z        j	                         
t        
fddD              s | j                  j                  t        d       t        t        j                  d
d               }|d   dk(  rd	nd
}| j                  j                  r_| j                  j                  | j                  j                  j                  d      k7  r#| j                  | j                  j                  d<   | j                  j                   d   | j                  j                  d<   t#        j$                  |j'                               j)                  |d   |      }t        d|j                  dd      fd|d   fd|j                  d      fd|fg      }|d
k(  r|j+                  d|i       t-        |      }	|	j.                   d|	j0                   | j3                  
d          |dS # t        t        f$ r$ | j                  j                  t        d       Y w xY w)Nzi<form (?P<form>.*?="challenge-form" action="(?P<challengeUUID>.*?__cf_chl_captcha_tk__=\S+)"(.*?)</form>)c              3   &   K   | ]  }|v  
 y wr   rI   rJ   s     r   rN   z8Cloudflare.captcha_Challenge_Response.<locals>.<genexpr>  rO   rP   rQ   zUCloudflare Captcha detected, unfortunately we can't extract the parameters correctly.zM(name="r"\svalue|data-ray|data-sitekey|name="cf_captcha_kind"\svalue)="(.*?)"rR   zname="cf_captcha_kind" valuer-   	reCaptchahCaptchaproxyz
User-Agentzdata-sitekeyrU   zname="r" valuer%   cf_captcha_kindidzdata-rayzg-recaptcha-responsezh-captcha-responser[   rS   r\   )r-   r.   r0   r@   r_   r`   r   rC   r   r   ra   r2   KeyErrorproxiescaptchar*   r)   r   rd   lowersolveCaptcharc   r	   ri   rf   r!   )r   providerprovider_paramsrj   r]   rl   captchaTypecaptchaResponsedataPayloadro   rM   s             @r   captcha_Challenge_Responsez%Cloudflare.captcha_Challenge_Response   s=   	))Yryy 	
 ik  O5NOO!!11*k
 "

d'G *11O)PTX)X+^hK $$):):)B)BdFWFWF_F_FcFcdkFl)l15D%%g. 372C2C2K2KL2Y!!,/ "//NN

,N#	
 	 "'++.34(F GH7;;z*+#_5	#
  *$ 4oFGc]
 !''(J,=,=+>t}}[YhMi?j>kl
 	
a ) 	--&g	s   B&H /IIc                    | j                  |      r| j                  j                  rU| j                  j                   | j                  j                  |j
                  j                  |j                  fi |      }| j                  |      s|S | j                  j                  rIt        | j                  j                  t              r%| j                  j                  j                  d      s | j                  j                  t        d       | j                  j                  j                  d      dk(  r|S | j                  | j                  j                  j                  d      | j                  j                  |j                  |j                        }n| j                  j                   sl	 t#        t%        j&                  d|j                        j)                  d            t#        d      z  }t        |t*        t"        f      r|| j                  _        t3        j4                  | j                  j                          | j7                  |j                  |j                  | j                  j8                        }|rtd }t;        |      }d	|d
<    ||d|d         |d<   t=        |j                        } ||d|j>                   d|j@                   |j                  d      |d<    | j                  j
                  d|d   fi |}|jB                  dk(  r | j                  j                  tD        d       |jF                  s|S t;        |      } ||dd|j                  i      |d<   t=        |jH                  d         j@                  s$tK        |j                  |jH                  d         }	n|jH                  d   }	 | j                  j
                  |j
                  j                  |	fi |S  | j                  j
                  |j
                  j                  |j                  fi |S # t,        t.        f$ r$ | j                  j                  t0        d       Y Iw xY w)Nr~   z}Cloudflare Captcha detected, unfortunately you haven't loaded an anti Captcha provider correctly via the 'captcha' parameter.return_responsez submit\(\);\r?\n\s*},\s*([0-9]+)r   i  zCCloudflare IUAM possibility malformed, issue extracing delay value.c                     	 | |   j                  |       | |   S # t        t        f$ r! i | |<   | |   j                  |       | |   cY S w xY wr   )rc   r2   ry   )objrT   newValues      r   
updateAttrz1Cloudflare.Challenge_Response.<locals>.updateAttr  s\    %I$$X.t9$&1 % "CII$$X.t9$%s    -A
AFallow_redirectsr^   r)   r[   )OriginRefererPOSTr]   i  z5Invalid challenge answer detected, Cloudflare broken?r   Location)&r;   r   
doubleDowndecodeBrotliperform_requestrequestmethodr]   r{   
isinstancerb   r*   rC   r   r   r/   delayfloatr-   r.   groupintr2   
ValueErrorr   timesleeprq   rk   r   r	   ri   rf   r,   r   is_redirectr)   r
   )
r   r4   kwargs
submit_urlr   r   cloudflare_kwargs	urlParsedchallengeSubmitResponseredirect_locations
             r   Challenge_ResponsezCloudflare.Challenge_ResponseJ  s   $$T*   ++((555D%%55dll6I6I488^W]^ ,,T2 %%--!$"3"3";";TB((0044Z@!!11-=   ((,,Z8<MM 88!!))--j9!!))			J $$**!		? II  %(	
 d$E "%#u627))/ JJt((../ 55		!!--J % !) 038/0(2!6")f% !*I+5!!*!1!1 2#i6F6F5GH#xx,i( '@d&7&7&?&?5!' $'# '22c9!!11(K +66.. %-V$4!/9% 7 ; ;<0!),   7 ? ?
 KLSS(//33/77
C)%
 )@(G(G
(S%0t((00LL''% (  )t  (()<)<dhhQ&QQA '
3 %%55+]s   1A+P3 3/Q&%Q&N)__name__
__module____qualname__r   staticmethodr!   r5   r8   r<   r;   rA   rF   rq   r   r   rI   r   r   r   r   ,   sz    ) 0 0  *&&  *  (<+
bK
b^Rr   r   )r-   r   r   copyr   collectionsr   r   ImportErrorr   r    html.parserr	   r
   urllib.parse
exceptionsr   r   r   r   r   r   r{   r   interpretersr   r   rI   r   r   <module>r      s    
 
   #+%/*   /
|R |R=  +
6!*	+  /../s"   A A5 A21A25BB