
    `gj                        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y)z1Secret input prompts with masked typing feedback.    )annotationsN)Callable
*maskc               j   g } ||       	  |        }|dk(  r |d       t         |t        v r |d       dj                  |      S |dk(  r |d       t        |t        v r |d       t         |t
        v r|r|j                           |d       |dk(  r|j                  |       |r ||       )zCRead one secret line while writing a mask character per typed char. z
z )EOFError_ENTER_CHARSjoinKeyboardInterrupt
_EOF_CHARS_BACKSPACE_CHARSpopappend)	read_charwritepromptr   valuechs         K/root/.hermes/venv/lib/python3.12/site-packages/hermes_cli/secret_prompt.py_collect_masked_inputr       s     E	&M
[8&MN&M775>!<&M##&MN!!		g< R$K5     c                  t         j                  }t         j                  }t        |      rt        |      st	        j                  |       S t
        j                  dk(  r	 t        | |      S 	 t        | |      S # t        t        f$ r  t        $ r t	        j                  |       cY S w xY w# 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_promptr.   8   s     IIEZZF% v(>v&&	ww$	+0dCC'*6== "8, 	 	+??6**	+
 x(  'v&&'s$    A; .B. ;-B+*B+.-CCc                T    	 t        | j                               S # t        $ r Y yw xY w)NF)boolisattyr,   )streams    r   r'   r'   T   s*    FMMO$$ s    	''c               >    dd l dfd}dd}t        ||| |      S )Nr   c                 R    j                         } | dv rj                          y| S )N>      à r   )getwch)r   msvcrts    r   r   z0_masked_secret_prompt_windows.<locals>.read_char^   s(    ]]_!!MMO	r!   c                ~    t         j                  j                  |        t         j                  j                          y Nr$   r&   r   flushtexts    r   r   z,_masked_secret_prompt_windows.<locals>.writee   $    



r!   r   returnstrr>   rB   rA   None)r8   r    )r   r   r   r   r8   s       @r   r+   r+   [   s#     !E6EEr!   c               @   dd l }dd l}t        j                  j	                         }|j                  |      }dd}dd}	 |j                  |       t        ||| |      |j                  ||j                  |       S # |j                  ||j                  |       w xY w)Nr   c                 @    t         j                  j                  d      S )N   )r$   r%   read r!   r   r   z._masked_secret_prompt_posix.<locals>.read_chars   s    yy~~a  r!   c                ~    t         j                  j                  |        t         j                  j                          y r:   r;   r=   s    r   r   z*_masked_secret_prompt_posix.<locals>.writev   r?   r!   r   r@   rC   )
termiosttyr$   r%   fileno	tcgetattrsetrawr    	tcsetattr	TCSADRAIN)r   r   rK   rL   fd	old_attrsr   r   s           r   r-   r-   l   s    				B!!"%I!<

2$YvDI"g//;"g//;s   A> >B)
r   zCallable[[], str]r   zCallable[[str], object]r   rB   r   rB   rA   rB   )r   rB   r   rB   rA   rB   )rA   r0   )__doc__
__future__r   r(   r)   r$   collections.abcr   r   r   r   r    r.   r'   r+   r-   rI   r!   r   <module>rW      s    7 "  	 
 $ &> d|f
 % %"% %
 % 	%P 69 '8F"<r!   