
    nij                         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Zd dl	Z	d dl
Z
d dlZd dlZd dlmZmZmZ d dlmZ d dlmZ d dlmZ  G d d          ZdS )    N)datetime	timedeltatimezone)KaggleClient)KaggleCredentials)ExchangeOAuthTokenRequestc                       e Zd ZdZdefdZ G d d          Z G d dej        j	                  Z
ed             Zd	ed
ee         ddfdZd
ee         dedefdZd ZdefdZdd
ee         dedefdZdS )KaggleOAuth	kagglesdkclientc                     || _         |                                | _        d| _        d | _        t          j        t                    | _        d S NF)	_clienthttp_client_http_client_server_running_credslogging	getLogger__name___logger)selfr   s     S/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/kagglesdk/kaggle_oauth.py__init__zKaggleOAuth.__init__   sB    "..00$(22    c                   D    e Zd Zd ZddefdZddedefdZdedefd	Zd
S )KaggleOAuth.OAuthStatec                     t          t          j                              | _        t          j                                        | _        t          j                            | j                  | _	        d S N)
struuiduuid4stater
   
OAuthState_generate_code_verifiercode_verifier_generate_code_challengecode_challenger   s    r   r   zKaggleOAuth.OAuthState.__init__   sQ    TZ\\**DJ!,!7!O!O!Q!QD"-"8"Q"QRVRd"e"eDr       lengthc                 *    t          j        |           S r   )secretstoken_urlsafer+   s    r   _generate_statez&KaggleOAuth.OAuthState._generate_state#   s    (000r   @   returnc                 f    d| cxk    rdk    sn t          d          t          j        |           S )N*      z;Code verifier length must be between 42 and 128 characters.)
ValueErrorr-   r.   r/   s    r   r%   z.KaggleOAuth.OAuthState._generate_code_verifier&   sA    &&&&3&&&& !^___(000r   r&   c                     |                      d          }t          j        |                                          }t	          j        |                              d          }|S )Nzutf-8)encodehashlibsha256digestbase64urlsafe_b64encodedecode)r&   code_verifier_bytescode_challenge_bytescode_challenge_base64s       r   r'   z/KaggleOAuth.OAuthState._generate_code_challenge+   sZ    "/"6"6w"?"?#*>2E#F#F#M#M#O#O $*$<=Q$R$R$Y$YZa$b$b!((r   N)r*   )r1   )	r   
__module____qualname__r   intr0   r    r%   r'    r   r   r$   r      s        	f 	f 	f
	1 	1C 	1 	1 	1 	1	1 	1C 	1 	1 	1 	1 	1
	)C 	)C 	) 	) 	) 	) 	) 	)r   r$   c                   D     e Zd Zddddd	 	 	 d fdZd Zd	 Zd
 Z xZS ) KaggleOAuth.OAuthCallbackHandlerNoauthoauth_state
on_successloggerrI   r
   rJ   r   c                r    || _         || _        || _        || _         t	                      j        |i | d S r   )_oauth_oauth_state_on_successr   superr   )r   rI   rJ   rK   rL   argskwargs	__class__s          r   r   z)KaggleOAuth.OAuthCallbackHandler.__init__2   sE      DK +D)D!DLEGGd-f-----r   c                     | j         dk    rd S 	 |                                  |                                  d S # |                                  w xY w)Nz/favicon.ico)path_handle_oauth_callback_stop_serverr)   s    r   do_GETz'KaggleOAuth.OAuthCallbackHandler.do_GETA   s[    yN**$++---!!#####!!####s	   9 Ac                    t           j                            | j                  }t           j                            |j                  }d|v rzd|v ru|d         d         }|d         d         }| j                            d           | j                            d|            | j                            d|            || j        j	        k    rp| 
                    d           |                     dd	           |                                  | j                            d
           |                     |           d S | j                            d| j        j	         d|            | 
                    d           |                     dd	           |                                  | j                            d           d S | j                            d| j                    | 
                    d           |                     dd	           |                                  | j                            d           d S )Ncoder#   r   z
Received OAuth Callback:z	  code : z	  state:    zContent-typez	text/htmls^   <html><body><h1>Authentication Successful!</h1><p>You can close this window.</p></body></html>zInvalid state! Expected: z, Received: i  s9   <html><body><h1>Authentication Failed!</h1></body></html>z"
Received Invalid OAuth Callback: s\   <html><body><h1>Authentication Failed!</h1><p>Invalid callback parameters.</p></body></html>)urllibparseurlparserV   parse_qsqueryr   debugrO   r#   send_responsesend_headerend_headerswfilewriterP   error)r   
parsed_urlquery_paramsr[   r#   s        r   rW   z7KaggleOAuth.OAuthCallbackHandler._handle_oauth_callbackI   sJ   ..ty99J!<001ABBL%%'\*A*A#F+A.$W-a0""#@AAA""#5t#5#5666""#6u#6#6777D-333&&s+++$$^[AAA$$&&&J$$y   $$T*****L&&'o4CTCZ'o'ohm'o'oppp&&s+++$$^[AAA$$&&&J$$%abbbbb""#T#T#TUUU""3'''  ===  """
  s    r   c                 8    | j                                          d S r   )rN   stop_serverr)   s    r   rX   z-KaggleOAuth.OAuthCallbackHandler._stop_serveri   s    K##%%%%%r   )rI   r
   rJ   r   )r   rB   rC   r   rY   rW   rX   __classcell__)rT   s   @r   OAuthCallbackHandlerrG   1   s         $(48	. 	. !	. 2		. 	. 	. 	. 	. 	.	$ 	$ 	$	 	 	@	& 	& 	& 	& 	& 	& 	&r   rn   c                      t          j                    dv rdS dt          j        v rt          j        d         dk    rdS dS )N)WindowsDarwinTDISPLAY F)platformsystemosenvironrE   r   r   _can_open_browserzKaggleOAuth._can_open_browserl   sC    ? 5554
""rz)'<'B'B4ur   r[   scopesrJ   r   c           	      ^   t                      }||_        |j        |_        d|_        | j        j        j                            |          }t          | j        |j	        |j
        t          j        t          j                  t          |j                  z   |j        |          | _        d S )Nauthorization_code)seconds)r   refresh_tokenaccess_tokenaccess_token_expirationusernamery   )r   r[   r&   
grant_typer   securityoauth_clientexchange_oauth_tokenr   refreshTokenaccessTokenr   nowr   utcr   
expires_inr   r   )r   r[   ry   rJ   requestresponses         r   _exchange_oauth_tokenz!KaggleOAuth._exchange_oauth_tokenv   s    +-- + 91<(5JJ7SS'<"/!-$,L$>$>S[SfAgAgAg$g&
 
 
r   no_launch_browserr2   c                    
 | ot                                           } j                                        }|r7t	          j        dd          }d| } j                            d|            t                                            j        	                    t           j
        |j        j                  }|rt          j        |           t          d           t          d| d           d	t           f fd


 fd}d _        t%          j        d|f|          5 } j                            d| d            j        r|                                  j         j                            d           d d d            n# 1 swxY w Y   nWt          d           t          d|            t          dd           t+                      }	                     |	            j        S )Ni@  i(#  zhttp://localhost:z!Will listen for the callback at: )	client_idredirect_uriscoper#   r(   z&Your browser has been opened to visit:z  z

r[   c                 6                         |            d S r   )r   )r[   rJ   ry   r   s    r   r   z9KaggleOAuth._run_oauth_flow.<locals>.exchange_oauth_token   s!    **4EEEEEr   c                  :    t          j        | j        d|S )NrH   )r
   rn   r   )rR   rS   r   rJ   r   s     r   handler_factoryz4KaggleOAuth._run_oauth_flow.<locals>.handler_factory   s8    "7 +3<    r   Tz	127.0.0.1zListening for callback on port z...z)OAuth flow completed (or server stopped).zW
Go to the following link in your browser, and complete the sign-in prompts at Kaggle:
zF
Once finished, enter the verification code provided in your browser: rs   )end)r
   rx   r   get_oauth_default_redirect_urlrandomrandintr   rb   r$   build_start_oauth_urlOAUTH_CLIENT_IDr#   r(   
webbrowseropenprintr    r   socketserver	TCPServerhandle_requestinputr   r   )r   ry   r   use_browserr   portoauth_start_urlr   httpdr[   r   rJ   s   ``        @@r   _run_oauth_flowzKaggleOAuth._run_oauth_flow   s   ++O0M0M0O0O(GGII 	S>$--D5t55LLQ<QQRRR!,,..+AA!1%#&5 B 
 
   	BOO,,,:;;;,,,,---F3 F F F F F F F F       $(D 'd(;_MM PQV""#NT#N#N#NOOO* +((*** * +""#NOOO	P P P P P P P P P P P P P P P mnnn((()))Y    77D&&tV[AAA{s   +AFFFc                     d| _         d S r   )r   r)   s    r   rl   zKaggleOAuth.stop_server   s    $r   credsc                 L    |st          d          |                                S )NzAuthentication failed.)	Exception
introspect)r   r   s     r   _ensure_creds_validzKaggleOAuth._ensure_creds_valid   s+     	64555!!!r   Fc                     |                      ||          }|                     |          }|                                 t          d| d           |S )Nz
You are now logged in as [z]
)r   r   saver   )r   ry   r   r   r   s        r   authenticatezKaggleOAuth.authenticate   sW    $$V->??++E22

:X:::;;;r   N)F)r   rB   rC   r   r   r   r$   httpserverBaseHTTPRequestHandlerrn   staticmethodrx   r    listr   boolr   r   rl   r   r   rE   r   r   r
   r
      sb       !O3| 3 3 3 3) ) ) ) ) ) ) )(9& 9& 9& 9& 9&t{A 9& 9& 9&v   \
# 
tCy 
Og 
 
 
 
 3d3i 3D 3M^ 3 3 3 3j% % %"): " " " "
 49  Rc      r   r
   )r<   r9   http.serverr   r   rv   rt   r   r-   r   r!   urllib.parser]   r   r   r   r   kagglesdk.kaggle_clientr   kagglesdk.kaggle_credsr   &kagglesdk.security.types.oauth_servicer   r
   rE   r   r   <module>r      s          				                 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 4 4 4 4 4 4 L L L L L Lu u u u u u u u u ur   