o
    i
                     @   sl   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 deZdS )zGitlab SSO Oauth Helper class.    )TYPE_CHECKINGClassVarListOptionalTupleUnion)urljoinN)DiscoveryDocumentOpenIDSSOBasec                       s   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dZdefddZdee
 deee
d	f ee
d	f f fddZddeded defddZ  ZS ) 	GitlabSSOz%Class providing login via Gitlab SSO.Zgitlab)Z	read_userZopenidZprofilescopeacceptzapplication/jsonadditional_headerszhttps://gitlab.comNF	client_idclient_secretredirect_uriallow_insecure_http	use_statebase_endpoint_urlreturnc                    s&   t  |||||| |p| j| _d S N)super__init__r   )selfr   r   r   r   r   r   r   	__class__ M/home/app/Keep/.python/lib/python3.10/site-packages/fastapi_sso/sso/gitlab.pyr      s   
zGitlabSSO.__init__c                    s&   t | jdt | jdt | jddS )zHOverride the discovery document method to return Yandex OAuth endpoints.z/oauth/authorizez/oauth/tokenz/api/v4/user)Zauthorization_endpointZtoken_endpointZuserinfo_endpoint)r   r   )r   r   r   r   get_discovery_document*   s
   


z GitlabSSO.get_discovery_document	full_namec                 C   sT   |rt |ts	dS | }t|dkr|d dfS |d }d|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    Z
name_parts
first_name	last_namer   r   r   _parse_name2   s   zGitlabSSO._parse_nameresponsesessionzhttpx.AsyncClientc              	      sB   |  |d\}}t|d | jt|d |||d |d dS )z4Converts Gitlab user info response to OpenID object.nameemailidusernameZ
avatar_url)r.   providerr/   r(   r)   Zdisplay_nameZpicture)r*   getr
   r1   r$   )r   r+   r,   r(   r)   r   r   r   openid_from_response@   s   
zGitlabSSO.openid_from_response)NFFNNr   )__name__
__module____qualname____doc__r1   r   r   __annotations__r   r   r$   r   r   pydanticZ
AnyHttpUrlboolr   r   r	   r   r   r*   dictr
   r3   __classcell__r   r   r   r   r      s>   
 
	.$r   )r7   typingr   r   r   r   r   r   urllib.parser   r9   Zfastapi_sso.sso.baser	   r
   r   Zhttpxr   r   r   r   r   <module>   s     