
    e                         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ZddlZddl	m
Z
 ddlmZ ddlmZmZmZ ddlmZ d	d
lmZ  ej        d          Z G d de          ZdS )z
Authenticate a user
    )unicode_literalsN)input   )errors)OIDC_CLIENT_ID
get_configstore_token)	WebServer   )SubCommandBaserepo_clic                   N    e Zd ZdZdZd Zd Zd Zd ZddZ	d	 Z
d
 Zd Zd ZdS )
SubCommandloginTc                 .    |                                   d S N)r   )selfs    7lib/python3.11/site-packages/repo_cli/commands/login.pymainzSubCommand.main   s    

    c                     |                                  }t          || j                   | j        j        }|rdnd}| j                            |           |S )Nzlogin as ADMIN successfulzlogin successful)interactive_get_tokenr	   argsapiis_admin_jwtloginfo)r   tokenis_adminmsgs       r   r   zSubCommand.login   sY    **,,E49%%%8(-5M));Mcr   c                     t          | j        dd           r| j        j        }nt          d          }|| _        t          | j        dd           }||fS )Nlogin_usernamez
Username: login_password)getattrr   r"   r   username)r   r%   passwords      r   get_login_and_passwordz!SubCommand.get_login_and_password&   sX    49.55 	+y/HH\**H 49&6==!!r   c                     t                      }|                    d          r|                                 }n|                                 }|S )Noauth2)r   getoauth2_get_tokendirect_get_token)r   configr   s      r   r   z SubCommand.interactive_get_token/   sH    ::h 	,))++EE))++Er   Nc                     | j                             |          }|s0d}t                              |           t	          j        |          |S )z
        Returns user opaque token

        Args:
            force_scopes (bool): True if old token should be recreated with new scopes
        force_scopeszSUnable to request the user token. Server was unable to return any valid user token!)r   get_user_tokenloggererrorr   RepoCLIError)r   r0   
user_tokenr    s       r   get_and_validate_user_tokenz&SubCommand.get_and_validate_user_token7   sR     X,,,,GG
 	+gCLL%c***r   c                    |                                  \  }}t          d          D ]}	 |t          j        t          j                  }| j                            ||           |                     d| j        v r| j        j	        nd           }|c S # t          j        $ r t                              d           d }Y w xY wt          j        d          )N   )streamr0   r/   z7Invalid Username password combination, please try againz%You've reached maximum login attempts)r'   rangegetpasssysstderrr   r   r6   r   r0   r   Unauthorizedr2   r3   r4   )r   r%   r&   _r5   s        r   r,   zSubCommand.direct_get_tokenG   s    !88::(q 	 	A#&cjAAAHx222!==%22 "&!7!7 >  

 "!!!&   VWWW
 !"IJJJs   A(B+CCc                 <   | j                                         }t          j        d|j                  }|s5t
                              d|j                    t          j                    |	                    |d         dz             }|
                                S )Nz (/auth/realms/([a-z][a-z-]+)/).*zAuth path is not supported: r   z .well-known/openid-configuration)path)r   get_authorize_urlrematchrA   r2   r   r   WrongRepoAuthSetup_replacegeturl)r   urlmatchess      r   get_openid_configuration_urlz'SubCommand.get_openid_configuration_url]   s    h((**(=sxHH 	.KKAsxAABBB+---ll
-O OlPPzz||r   c                 j   |                                  }| j                            d|            t          t          || j                  }|                                }|                                 | j                            d           t          j	        |
                                           |                    d           |j        s0d}t                              |           t          j        |          |j        | j        _        |                     | j        j                  }|S )NzOpenID configuration: )	client_idopenid_configuration_url
verify_sslz!Opening browser to get a token...x   zNUnable to request the user token. Server was unable to return any valid token!r/   )rJ   r   debugr
   r   rN   startr   
webbrowseropenlocalhost_urljoinaccess_tokenr2   r3   r   r4   r   _jwtr6   r   r0   )r   rM   serverthreadr    r5   s         r   r+   zSubCommand.oauth2_get_tokeng   s   #'#D#D#F#F J0HJJKKK$%=
 
 

 9:::,,..///C" 	+bCLL%c***+55/ 6 
 

 r   c                 h   |                     ddt                    x| _        }|                    dt	          j                    d           |                    ddd	
           |                    ddd
           |                    dddd           |                    | j                   d S )Nr   zAuthenticate a user)helpdescriptionz
--hostnamezQSpecify the host name of this login, this should be unique (default: %(default)s))defaultr[   z
--usernamer"   zASpecify your username. If this is not given, you will be prompted)destr[   z
--passwordr#   zASpecify your password. If this is not given, you will be promptedz--force-scopesr0   
store_truez8Previous token will be recreated with actual user scopes)r^   actionr[   )r   )
add_parser__doc__	subparseradd_argumentplatformnodeset_defaultsr   )r   
subparsersrc   s      r   ra   zSubCommand.add_parser~   s    %/%:%:/W &; &
 &
 	
 	MOOd 	 	
 	
 	

 	!T 	 	
 	
 	

 	!T 	 	
 	
 	

 	K	 	 	
 	
 	
 	DI.....r   r   )__name__
__module____qualname__namemanages_authr   r   r'   r   r6   r,   rJ   r+   ra    r   r   r   r      s        DL    " " "      K K K,    ./ / / / /r   r   )rb   
__future__r   r;   loggingre   rC   r<   rR   	six.movesr    r   utils.configr   r   r	   utils.local_auth_serverr
   baser   	getLoggerr2   r   rn   r   r   <module>rw      s    ( ' ' ' ' '    				 



                 B B B B B B B B B B / / / / / /            		:	&	&@/ @/ @/ @/ @/ @/ @/ @/ @/ @/r   