
    AHj                     R    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e      Z
y)zGithub SSO Oauth Helper class.    )TYPE_CHECKINGClassVarOptional)DiscoveryDocumentOpenIDSSOBaseNc                       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
Zdded   d	ee   fdZddeded   d	efdZy)	GithubSSOz%Class providing login via Github SSO.githubz
user:emailscopeacceptzapplication/jsonadditional_headersz"https://api.github.com/user/emailsreturnc                    K   ddddS w)Nz(https://github.com/login/oauth/authorizez+https://github.com/login/oauth/access_tokenzhttps://api.github.com/user)authorization_endpointtoken_endpointuserinfo_endpoint )selfs    N/root/tools/cai/cai_env/lib/python3.12/site-packages/fastapi_sso/sso/github.pyget_discovery_documentz GithubSSO.get_discovery_document   s     &PK!>
 	
s   	Nsessionzhttpx.AsyncClientc                    K   |sy|j                  | j                         d{   }|j                  dk7  ry|j                         }|D ]  }|d   s	|d   c S  y7 8w)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   responseemailsr   s        r   _get_primary_emailzGithubSSO._get_primary_email   sl       T%9%9::3& 	&EYW~%	&  ;s   "AA.A
Ar!   c                    K   t        |j                  d      xs | j                  |       d {   | j                  t	        |d         |d   |d         S 7 )w)Nr   idlogin
avatar_url)r   providerr%   display_namepicture)r   r   r#   r(   str)r   r!   r   s      r   openid_from_responsezGithubSSO.openid_from_response)   sX     ,,w'S$2I2I'2R,R]]8D>"!'*\*
 	
,Rs   -AA*A)N)__name__
__module____qualname____doc__r(   r   r   __annotations__r   r   r   r   r   r+   r#   dictr   r,   r       r   r
   r
      sz    /H#nE8$$,.@#AA:O
.? 
9L0M YabeYf 
4 
(K^B_ 
kq 
r3   r
   )r0   typingr   r   r   fastapi_sso.sso.baser   r   r   httpxr
   r   r3   r   <module>r7      s&    $ 4 4 C C%
 %
r3   