o
    éT•jf  ã                   @   sÚ   d Z ddlZddlZddlZddlZddlZg d¢ZG dd„ deƒZddd„Z	dd	d
„Z
ddd„Zddd„Zdd„ ZzddlZejejf W n" eefyh   zddlZW n eyb   eZY Y dS w e
ZY dS w e	ZdS )a‡  Utilities to get a password and/or the current user name.

getpass(prompt[, stream]) - Prompt for a password, with echo turned off.
getuser() - Get the user name from the environment or password database.

GetPassWarning - This UserWarning is issued when getpass() cannot prevent
                 echoing of the password contents while reading.

On Windows, the msvcrt module will be used.

é    N)ÚgetpassÚgetuserÚGetPassWarningc                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú/usr/lib/python3.10/getpass.pyr      s    r   ú
Password: c           
      C   sÂ  d}t  ¡ �Ñ}z%t dtjtjB ¡}t |d¡}| |¡ t 	|¡}| |¡ |s+|}W n/ t
y[   | ¡  ztj ¡ }W n ttfyP   d}t| |ƒ}Y nw tj}|sYtj}Y nw |durÉzLt |¡}|dd… }|d  tj M  < tj}	ttdƒrƒ|	tjO }	zt ||	|¡ t| ||d�}W t ||	|¡ | ¡  nt ||	|¡ | ¡  w W n tjyÈ   |dur¹‚ ||urÁ| ¡  t| |ƒ}Y nw | d¡ |W  d  ƒ S 1 sÚw   Y  dS )a  Prompt for a password, with echo turned off.

    Args:
      prompt: Written on stream to ask for the input.  Default: 'Password: '
      stream: A writable file object to display the prompt.  Defaults to
              the tty.  If no tty is available defaults to sys.stderr.
    Returns:
      The seKr3t input.
    Raises:
      EOFError: If our input tty or stdin was closed.
      GetPassWarning: When we were unable to turn echo off on the input.

    Always restores terminal settings before returning.
    Nz/dev/ttyzw+é   ÚTCSASOFT)ÚinputÚ
)Ú
contextlibÚ	ExitStackÚosÚopenÚO_RDWRÚO_NOCTTYÚioÚFileIOÚenter_contextÚTextIOWrapperÚOSErrorÚcloseÚsysÚstdinÚfilenoÚAttributeErrorÚ
ValueErrorÚfallback_getpassÚstderrÚtermiosÚ	tcgetattrÚECHOÚ	TCSAFLUSHÚhasattrr   Ú	tcsetattrÚ
_raw_inputÚflushÚerrorÚwrite)
ÚpromptÚstreamÚpasswdÚstackÚfdÚttyr   ÚoldÚnewÚtcsetattr_flagsr   r   r	   Úunix_getpass   sb   



€þ€ö



ÿö
$Ïr5   c                 C   sŽ   t jt jurt| |ƒS | D ]}t |¡ qd}	 t ¡ }|dks$|dkr%n|dkr+t‚|dkr6|dd… }n|| }qt d¡ t d¡ |S )	z:Prompt for password with echo off, using Windows getwch().Ú é   úr   úúNéÿÿÿÿ)r   r   Ú	__stdin__r    ÚmsvcrtÚputwchÚgetwchÚKeyboardInterrupt)r,   r-   ÚcÚpwr   r   r	   Úwin_getpassa   s$   
÷


rC   c                 C   s0   t jdtdd� |stj}td|d� t| |ƒS )Nz%Can not control echo on the terminal.é   )Ú
stacklevelz&Warning: Password input may be echoed.)Úfile)ÚwarningsÚwarnr   r   r!   Úprintr(   )r,   r-   r   r   r	   r    x   s   ÿ
r    r6   c                 C   sš   |st j}|s
t j}t| ƒ} | r7z| | ¡ W n ty2   |  |jd¡} |  |j¡} | | ¡ Y nw | 	¡  | 
¡ }|s?t‚|d dkrK|d d… }|S )NÚreplacer;   r   )r   r!   r   Ústrr+   ÚUnicodeEncodeErrorÚencodeÚencodingÚdecoder)   ÚreadlineÚEOFError)r,   r-   r   Úliner   r   r	   r(   �   s(   ür(   c                  C   s<   dD ]} t j | ¡}|r|  S qddl}| t  ¡ ¡d S )zÂGet the username from the environment or password database.

    First try various environment variables, then the password
    database.  This works on Windows as long as USERNAME is set.

    )ÚLOGNAMEÚUSERÚLNAMEÚUSERNAMEr   N)r   ÚenvironÚgetÚpwdÚgetpwuidÚgetuid)ÚnameÚuserrY   r   r   r	   r   š   s   ÿr   )r
   N)r6   NN)Ú__doc__r   r   r   r   rG   Ú__all__ÚUserWarningr   r5   rC   r    r(   r   r"   r#   r'   ÚImportErrorr   r=   r   r   r   r   r	   Ú<module>   s2    

D

	ÿ
ú