o
    i                     @   sL   d Z ddlmZmZm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Github SSO Oauth Helper class.    )TYPE_CHECKINGClassVarOptional)DiscoveryDocumentOpenIDSSOBaseNc                   @   s~   e Zd ZU dZdZdgZeed< ddiZeed< dZ	d	e
fd
dZdded d	ee fddZddeded d	efddZdS )	GithubSSOz%Class providing login via Github SSO.Zgithubz
user:emailscopeacceptzapplication/jsonadditional_headersz"https://api.github.com/user/emailsreturnc                    s   ddddS )Nz(https://github.com/login/oauth/authorizez+https://github.com/login/oauth/access_tokenzhttps://api.github.com/user)Zauthorization_endpointZtoken_endpointZuserinfo_endpoint )selfr   r   M/home/app/Keep/.python/lib/python3.10/site-packages/fastapi_sso/sso/github.pyget_discovery_document   s
   z GithubSSO.get_discovery_documentNsessionzhttpx.AsyncClientc                    sT   |sdS | | jI dH }|jdkrdS | }|D ]}|d r'|d   S qdS )zyAttempt to get primary email from Github for a current user.
        The session received must be authenticated.
        N   primaryemail)getemails_endpointstatus_codejson)r   r   responseZemailsr   r   r   r   _get_primary_email   s   
zGithubSSO._get_primary_emailr   c                    s<   t |dp| |I d H | jt|d |d |d dS )Nr   idloginZ
avatar_url)r   providerr   Zdisplay_nameZpicture)r   r   r   r   str)r   r   r   r   r   r   openid_from_response)   s   
zGithubSSO.openid_from_response)N)__name__
__module____qualname____doc__r   r	   r   __annotations__r   r   r   r   r   r   r   dictr   r   r   r   r   r   r      s   
  r   )r#   typingr   r   r   Zfastapi_sso.sso.baser   r   r   Zhttpxr   r   r   r   r   <module>   s    