
    AHj
                     r    d Z ddlmZmZmZmZmZmZ ddlm	Z	 ddl
Z
ddlmZmZmZ erddlZ G d de      Zy)zGitlab SSO Oauth Helper class.    )TYPE_CHECKINGClassVarListOptionalTupleUnion)urljoinN)DiscoveryDocumentOpenIDSSOBasec                       e Zd ZU dZdZg dZeed<   ddiZeed<   dZ		 	 	 	 	 dd
e
de
deeej                  e
f      dededeee
      dee
   dd	f fdZdefdZdee
   deee
d	f   ee
d	f   f   fdZddeded   defdZ xZS )	GitlabSSOz%Class providing login via Gitlab SSO.gitlab)	read_useropenidprofilescopeacceptzapplication/jsonadditional_headerszhttps://gitlab.comN	client_idclient_secretredirect_uriallow_insecure_http	use_statebase_endpoint_urlreturnc                 X    t         |   ||||||       |xs | j                  | _        y N)super__init__r   )	selfr   r   r   r   r   r   r   	__class__s	           N/root/tools/cai/cai_env/lib/python3.12/site-packages/fastapi_sso/sso/gitlab.pyr    zGitlabSSO.__init__   s9     		
 "3!Ld6L6L    c                    K   t        | j                  d      t        | j                  d      t        | j                  d      dS w)zHOverride the discovery document method to return Yandex OAuth endpoints.z/oauth/authorizez/oauth/tokenz/api/v4/user)authorization_endpointtoken_endpointuserinfo_endpoint)r	   r   )r!   s    r#   get_discovery_documentz GitlabSSO.get_discovery_document*   sC      '.d.D.DFX&Y%d&<&<nM!()?)?!P
 	
s   AA	full_namec                     |rt        |t              sy|j                         }t        |      dk(  r|d   dfS |d   }dj	                  |dd       }||fS )z>Parses the full name from Gitlab into the first and last name.)NN   r   N )
isinstancestrsplitlenjoin)r!   r*   
name_parts
first_name	last_names        r#   _parse_namezGitlabSSO._parse_name2   s`    
9c :__&
z?aa=$&&]
HHZ^,	9$$r$   responsesessionzhttpx.AsyncClientc           
         K   | j                  |j                  d            \  }}t        |d   | j                  t	        |d         |||d   |d         S w)z4Converts Gitlab user info response to OpenID object.nameemailidusername
avatar_url)r;   providerr<   r4   r5   display_namepicture)r6   getr   r?   r/   )r!   r7   r8   r4   r5   s        r#   openid_from_responsezGitlabSSO.openid_from_response@   sb      $ 0 0f1E F
I7#]]8D>"!!*-\*
 	
s   AA)NFFNNr   )__name__
__module____qualname____doc__r?   r   r   __annotations__r   r   r/   r   r   pydantic
AnyHttpUrlboolr   r    r
   r)   r   r6   dictr   rC   __classcell__)r"   s   @r#   r   r      s!   /H8E88$,.@#AA, CG$)%)+/MM M uX%8%8#%=>?	M
 "M M S	"M $C=M 
M(
.? 
%Xc] %uU39=MuUXZ^U^O_=_7` %
4 
(K^B_ 
kq 
r$   r   )rG   typingr   r   r   r   r   r   urllib.parser	   rI   fastapi_sso.sso.baser
   r   r   httpxr    r$   r#   <module>rS      s,    $ H H    C C>
 >
r$   