
    Fij                        d Z ddlmZ ddlZddlZddlZddlmZ ddhZddhZ	d	d
hZ
ddddZddddZddZddZddZdS )z1Secret input prompts with masked typing feedback.    )annotationsN)Callable
*mask	read_charCallable[[], str]writeCallable[[str], object]promptstrr   returnc                  g } ||           	  |             }|dk    r |d           t           |t          v r  |d           d                    |          S |dk    r |d           t          |t          v r |d           t           |t
          v r"|r|                                  |d           |dk    r|                    |           |r ||           )zCRead one secret line while writing a mask character per typed char.T r   z )EOFError_ENTER_CHARSjoinKeyboardInterrupt
_EOF_CHARS_BACKSPACE_CHARSpopappend)r   r   r   r   valuechs         =/home/ubuntu/.hermes/hermes-agent/hermes_cli/secret_prompt.py_collect_masked_inputr$      s    E	E&MMMY[[88E$KKKNE$KKK775>>!<<E$KKK##E$KKKN!!! 		g<< R 	E$KKK5    c                  t           j        }t           j        }t          |          rt          |          st	          j        |           S t
          j        dk    rG	 t          | |          S # t          t          f$ r  t          $ r t	          j        |           cY S w xY w	 t          | |          S # t          t          f$ r  t          $ r t	          j        |           cY S w xY w)zPrompt for a secret while showing masked typing feedback.

    Falls back to ``getpass.getpass`` when stdin/stdout are not interactive or
    when raw terminal handling is unavailable.
    ntr   )sysstdinstdout_stream_is_ttygetpassosname_masked_secret_prompt_windowsr   r   	Exception_masked_secret_prompt_posix)r   r   r)   r*   s       r#   masked_secret_promptr2   8   s    IEZF%   'v(>(> 'v&&&	w$	+0dCCCC!8, 	 	 	 	+ 	+ 	+?6*****	+'*6====x(    ' ' 'v&&&&&'s$   A- -/BB#B4 4/C&%C&boolc                h    	 t          |                                           S # t          $ r Y dS w xY w)NF)r3   isattyr0   )streams    r#   r+   r+   T   s?    FMMOO$$$   uus    # 
11c               F    dd l d	fd}d
d}t          ||| |          S )Nr   r   r   c                 d                                     } | dv r                                  dS | S )N>      à r   )getwch)r"   msvcrts    r#   r   z0_masked_secret_prompt_windows.<locals>.read_char^   s3    ]]__!!!MMOOO6	r%   textNonec                    t           j                            |            t           j                                         d S Nr(   r*   r   flushr=   s    r#   r   z,_masked_secret_prompt_windows.<locals>.writee   2    

r%   r   r   r   r=   r   r   r>   )r<   r$   )r   r   r   r   r<   s       @r#   r/   r/   [   sW    MMM         !E6EEEEr%   c               T   dd l }dd l}t          j                                        }|                    |          }d	d}d
d}	 |                    |           t          ||| |          |                    ||j	        |           S # |                    ||j	        |           w xY w)Nr   r   r   c                 @    t           j                            d          S )N   )r(   r)   read r%   r#   r   z._masked_secret_prompt_posix.<locals>.read_chars   s    y~~a   r%   r=   r>   c                    t           j                            |            t           j                                         d S r@   rA   rC   s    r#   r   z*_masked_secret_prompt_posix.<locals>.writev   rD   r%   r   rE   rF   )
termiosttyr(   r)   fileno	tcgetattrsetrawr$   	tcsetattr	TCSADRAIN)r   r   rM   rN   fd	old_attrsr   r   s           r#   r1   r1   l   s    NNNJJJ					B!!"%%I! ! ! !   <

2$YvDIII"g/;;;;"g/;;;;s   'B	 	B')
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r3   )__doc__
__future__r   r,   r-   r(   collections.abcr   r   r   r   r$   r2   r+   r/   r1   rK   r%   r#   <module>rY      s    7 7 " " " " " "  				 



 $ $ $ $ $ $ &> d|f
 % % % % % %P 69 ' ' ' ' ' '8   F F F F"< < < < < <r%   