
    AHjW
                         d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
 ddlmZmZmZ erddlZ ej                   e      Zdddddedeee      d	e
eeegef   f   d
eeeeef   ed   gef      de	e   f
dZy)zpA generic OAuth client that can be used to quickly create support for any OAuth provider
with close to no code.
    N)TYPE_CHECKINGAnyCallableDictListOptionalTypeUnion)DiscoveryDocumentOpenIDSSOBasegeneric)namedefault_scoperesponse_convertorr   r   discovery_documentr   httpx.AsyncClientreturnc                 6      G  fddt               }|S )a>  A factory to create a generic OAuth client usable with almost any OAuth provider.
    Returns a class.

    Args:
        name: Name of the provider
        default_scope: default list of scopes (can be overriden in constructor)
        discovery_document: a dictionary containing discovery document or a callable returning it
        response_convertor: a callable that will receive JSON response from the userinfo endpoint
            and should return OpenID object

    Example:
        ```python
        from fastapi_sso.sso.generic import create_provider

        discovery = {
            "authorization_endpoint": "http://localhost:9090/auth",
            "token_endpoint": "http://localhost:9090/token",
            "userinfo_endpoint": "http://localhost:9090/me",
        }

        SSOProvider = create_provider(name="oidc", discovery_document=discovery)
        sso = SSOProvider(
            client_id="test",
            client_secret="secret",
            redirect_uri="http://localhost:8080/callback",
            allow_insecure_http=True
            )
        ```

    c                   X    e Zd ZdZW ZW  xs dgZdeffdZd
dede	d   de
ffd	Zy)+create_provider.<locals>.GenericSSOProviderzSSO Provider Template.openidr   c                 6   K   t              r |       S S w)z#Get document containing handy urls.)callable)selfr   s    O/root/tools/cai/cai_env/lib/python3.12/site-packages/fastapi_sso/sso/generic.pyget_discovery_documentzBcreate_provider.<locals>.GenericSSOProvider.get_discovery_document<   s!     *+)$//%%s   Nresponsesessionr   c                 x   K   s+t         j                  d       t        | j                        S  ||      S w)NzHNo response convertor was provided, returned OpenID will always be empty)provider)loggerwarningr   r!   )r   r   r   r   s      r   openid_from_responsez@create_provider.<locals>.GenericSSOProvider.openid_from_responseB   s:     %ij!]]  &h88s   7:)N)__name__
__module____qualname____doc__r!   scoper   r   dictr   r   r$   )r   r   r   r   s   r   GenericSSOProviderr   6   sE    $+(	&2C 	&	9t 	9hObFc 	9ou 	9    r+   )r   )r   r   r   r   r+   s   ```` r   create_providerr-      s    L9 9W 9( r,   )r(   loggingtypingr   r   r   r   r   r   r	   r
   fastapi_sso.sso.baser   r   r   httpx	getLoggerr%   r"   strr-    r,   r   <module>r5      s     R R R C C			8	$
 )-fj:
: DI&: /7)EV:V1WWX	:
 !4S>8DW;X*Y[a*a!bc: 
']:r,   