
    ȯei*                    ,   U d Z ddlm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
mZ ddlmZ ddlmZmZmZmZmZ ddlmZ  ee      Zded	<   ej2                  rd
ndZded<    G d de	      ZddZdZddZ G d d      ZddZ ddZ!ddZ"ddZ#ddZ$y)z(Manage the user's Streamlit credentials.    )annotationsN)Final
NamedTupleNoReturncast)uuid4)cli_utilconfigenv_util	file_utilutil)
get_loggerr   _LOGGERz$%userprofile%/.streamlit/config.tomlz~/.streamlit/config.toml_CONFIG_FILE_PATHc                  "    e Zd ZU ded<   ded<   y)_Activation
str | Noneemailboolis_validN)__name__
__module____qualname____annotations__     _/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/streamlit/runtime/credentials.pyr   r   '   s    Nr   r   c                    t         j                  j                  dk(  xr2 t        j                   xs t
        j                  j                  d      } d| rdnd t        j                  dd       d	t        j                  d
d       S )Nzutf-8
WT_SESSIONz
      u   👋  zWelcome to Streamlit!Tboldz

      If you'd like to receive helpful onboarding emails, news, offers, promotions,
      and the occasional swag, please enter your email address below. Otherwise,
      leave this field blank.

      zEmail: bluefg)
sysstdoutencodingr   
IS_WINDOWSosenvirongetr	   style_for_cli)
show_emojis    r   email_promptr/   ,   s    
 $$/ ?2::>>,#? 
w"%h&<&<=T[_&`%a b iF348 8r   zT
Collecting usage statistics. To deactivate, set browser.gatherUsageStats to false.
c                   ddl }| d| vryd}	 |j                  dd      j                         }|j                  dd      }d
ddddd}dt        t                     d| dd| d}|j                  ||t        j                  |      j                         d      }|j                          y# t        $ r t        j                  d	       Y yw xY w)z0Send the user's email for metrics, if submitted.r   N@r    z&https://data.streamlit.io/metrics.json   )timeouturlzFailed to fetch metrics URLz*/*zen-US,en;q=0.9zapplication/jsonzlocalhost:8501zlocalhost:8501/)acceptzaccept-languagezcontent-typeoriginreferersubmittedEmailprovided_emailtrack)anonymous_id	messageIdeventauthor_emailsourcetypeuserId
   )headersdatar3   )requestsr,   json	Exceptionr   	exceptionstrr   postdumpsencoderaise_for_status)r   rE   metrics_urlresponse_jsonrC   rD   responses          r   _send_emailrQ   E   s    }5(K 4a % 

$& 	 $''r2 +*"$G \!"D }}ZZ$$&	  H ;  78s   3B, ,CCc                  z    e Zd ZU dZdZded<   edd       ZddZddZ	dddZ
ddd	Zedd
       ZddZdddZy)CredentialszCredentials class.NzCredentials | None
_singletonc                b    | j                   
t                t        dt        j                         S )zReturn the singleton instance.rS   )rT   rS   r   )clss    r   get_currentzCredentials.get_currentw   s&     >>!MM;#9#9::r   c                |    t         j                  t        d      d| _        t	               | _        | t         _        y)zInitialize class.Nz;Credentials already initialized. Use .get_current() instead)rS   rT   RuntimeError
activation_get_credential_file_path
_conf_fileselfs    r   __init__zCredentials.__init__   s9    !!-M  /38:!%r   c                ,    t        j                  |       S N)r   repr_r]   s    r   __repr__zCredentials.__repr__   s    zz$r   c                F   | j                   t        j                  d       yddl}	 t	        | j
                        5 }|j                  |      j                  d      }ddd       t        t        |j                  d            | _         y# 1 sw Y   1xY w# t        $ r# |r| j                  |        Y yt        d      t        $ rS |r%| j                          | j                  |        Y yt        t        j                  d      | j
                  z        w xY w)	zLoad from toml file.Nz/Credentials already loaded. Not rereading file.r   generalr   )show_instructionsz7Credentials not found. Please run "streamlit activate".zz
                Unable to load credentials from %s.
                Run "streamlit reset" and try again.
                )rZ   r   errortomlopenr\   loadr,   rY   _verify_emailFileNotFoundErroractivaterG   resettextwrapdedent)r^   auto_resolverh   frD   s        r   rj   zCredentials.load   s   ??&MMKL	doo& 3!yy|''	23|""+DHHW,=>DO	3 3
 ! 	L0@AI   	

L0@A ??$ 	s.   B !B/B BB D :8D 4,D c                    	 | j                  |       | j
                  | j
                  j                  st        d       yy# t        t        f$ r}t        t	        |             Y d}~Wd}~ww xY w)zTCheck if streamlit is activated.

        Used by `streamlit run script.py`
        NzActivation email not valid.)rj   rG   rY   _exitrI   rZ   r   )r^   rq   es      r   _check_activatedzCredentials._check_activated   s^    
	IIl# ??"$//*B*B/0 +C <( 	#a&MM	s   A A/A**A/c                    t         j                         }d|_        	 t        j                  |j
                         y# t        $ r t        j                  d       Y yw xY w)zReset credentials by removing file.

        This is used by `streamlit activate reset` in case a user wants
        to start over.
        Nz Error removing credentials file.)	rS   rW   rZ   r*   remover\   OSErrorr   rH   )rV   cs     r   rn   zCredentials.reset   sO     ##%	BIIall# 	B@A	Bs   = AAc                   ddl m} | j                  yt        j                  t        j
                  j                  | j                        d       d| j                  j                  i}ddl	}t        | j                  d      5 }|j                  d|i|       ddd       	 t        | j                  j                         y# 1 sw Y   *xY w# |$ r t        j                  d	       Y yw xY w)
z!Save to toml file and send email.r   )RequestExceptionNT)exist_okr   wre   zError saving email:)requests.exceptionsr|   rZ   r*   makedirspathdirnamer\   r   rh   ri   dumprQ   r   rH   )r^   r|   rD   rh   rr   s        r   savezCredentials.save   s    8??" 	BGGOODOO4tD ../$//3' 	,1IIy$'+	,	5--.		, 	,
   	534	5s   C"C CC+*C+c           	        	 | j                          | j                  r.| j                  j                  rt	        d       yt	        d       yd}|s!ddl}|j                  t               ddd      }t        |      | _        | j                  j                  r| j                          dt        j                  d	d
       dt        j                  t               d}t        j                  |       |radt        j                  ddd
       dt        j                  dd       dt        j                  dd
       d}t        j                  |       d
}nt        j                  d       |s yy# t        $ r Y mw xY w)zCActivate Streamlit.

        Used by `streamlit activate`.
        zAlready activatedzUActivation not valid. Please run `streamlit activate reset` then `streamlit activate`Fr   Nr    )textprompt_suffixdefaultshow_defaultz&
  You can find our privacy policy at z#https://streamlit.io/privacy-policyT)	underlinea-  

  Summary:
  - This open source library collects usage statistics.
  - We cannot see and do not store information contained inside Streamlit apps,
    such as text, charts, images, etc.
  - Telemetry data is stored in servers in the United States.
  - If you'd like to opt out, add the following to zS,
    creating that file if necessary:

    [browser]
    gatherUsageStats = false
z
  zGet started by typing:r#   )r%   r"   $r$    zstreamlit hellor!   
zPlease try again.)rj   rY   rZ   r   rt   clickpromptr/   rk   r   r	   r-   r   print_to_clir   rg   )r^   rf   	activatedr   r   telemetry_textinstructions_texts          r   rm   zCredentials.activate   sz   
	IIK ??'')*K
 I%"$!&	 %  #0"6??++IIK*&&.&<&<=bnr&s%t u4 5=4J4JK\4]3^ _&N )).9(12vDIJ K#&)*!H,B,BCT[_,`+a b-)
 !--.?@ $IMM"56Q  !  	 	s   E3 3	F ?F )returnrS   r   Noner   rI   )F)rq   r   r   r   )T)rf   r   r   r   )r   r   r   __doc__rT   r   classmethodrW   r_   rc   rj   rv   rn   r   rm   r   r   r   rS   rS   r   sW    %)J"); ;
& "H1 B B5.?7r   rS   c                    | j                         } t        |       dkD  r5| j                  d      dk7  r!t        j	                  d       t        dd      S t        | d      S )ar  Verify the user's email address.

    The email can either be an empty string (if the user chooses not to enter
    it), or a string with a single '@' somewhere in it.

    Parameters
    ----------
    email : str

    Returns
    -------
    _Activation
        An _Activation object. Its 'is_valid' property will be True only if
        the email was validated.

    r   r1      z"That doesn't look like an email :(NFT)striplencountr   rg   r   )r   s    r   rk   rk   '  sS    " KKME 5zA~%++c*a/:;4''ud##r   c                X    t         j                  |        t        j                  d       y)zExit program with error.N)r   rg   r&   exit)messages    r   rt   rt   C  s    MM'HHRLr   c                 ,    t        j                  d      S )Nzcredentials.toml)r   get_streamlit_file_pathr   r   r   r[   r[   I  s    ,,-?@@r   c                 P    t         j                  j                  t                     S ra   )r*   r   existsr[   r   r   r   _check_credential_file_existsr   M  s    77>>3566r   c                    t               sYt        j                  d      st        j                  d      s/t        j                  d      st	        j
                  t               yt        j                         j                          y)zCheck credentials and potentially activate.

    Note
    ----
    If there is no credential file and we are in headless mode, we should not
    check, since credential would be automatically set to an empty string.

    zserver.headlesszserver.showEmailPromptzbrowser.gatherUsageStatsN)
r   r
   
get_optionis_manually_setr	   r   _TELEMETRY_HEADLESS_TEXTrS   rW   rv   r   r   r   check_credentialsr   Q  s^     )*+,  !9:%%&@A!!":;..0r   r   )r   r   r   r   )r   rI   r   r   )r   rI   r   r   )r   r   r   )%r   
__future__r   rF   r*   r&   ro   typingr   r   r   r   uuidr   	streamlitr	   r
   r   r   r   streamlit.loggerr   r   r   r   r)   r   r   r/   r   rQ   rS   rk   rt   r[   r   r   r   r   r   <module>r      s    / "  	 
  4 4  A A 'H% %
  ,	# 5 * 
8( 
* Zr7 r7j$8A71r   