o
    ff                     @   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rzLt|}|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 sw   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 )zGet 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

	
