Ë
    ûûàg63  ã                   ó²   — d dl mZmZmZ d dlmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ  G d	„ d
e«      Z G d„ d«      Z G d„ d«      Zy)é    )ÚAnyÚDictÚOptional)ÚImproperlyConfiguredÚPermissionDenied)Úget_next_redirect_urlÚget_request_param)Úcontext)Úapp_settings©Úget_adapter)Ústatekit)ÚAuthProcessc                   ó   — e Zd Zy)ÚProviderExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    úk/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/base/provider.pyr   r      s   „ Ør   r   c            
       óJ  — e Zd ZU eed<   eed<   dZee   ed<   dZdZdZ	d#d„Z
d„ Zed	„ «       Zd#d
„Zd„ Zd„ Zd$d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	 d%dee   dededee   fd„Zd„ Zed„ «       Z	 d&d„Zd„ Z e!defd„«       Z"de#ee$f   fd „Z%ed!e#ee$f   dd fd"„«       Z&y)'ÚProviderÚnameÚidNÚslugTFc                 óR   — || _         | j                  r|€t        d«      ‚|| _        y )Nzmissing: app)ÚrequestÚ	uses_appsÚ
ValueErrorÚapp)Úselfr   r!   s      r   Ú__init__zProvider.__init__   s&   € ØˆŒØ�>Š>˜c˜kÜ˜^Ó,Ð,Øˆ�r   c                 ó   — | j                   S ©N)r   ©r"   s    r   Ú__str__zProvider.__str__"   s   € Ø�y‰yÐr   c                 ó6   — | j                   xs | j                  S r%   )r   r   )Úclss    r   Úget_slugzProvider.get_slug%   s   € à�x‰xÒ!˜3Ÿ6™6Ð!r   c                 ó2   — t        d| j                  z   «      ‚)zb
        Builds the URL to redirect to when initiating a login for this
        provider.
        zget_login_url() for )ÚNotImplementedErrorr   )r"   r   ÚnextÚkwargss       r   Úget_login_urlzProvider.get_login_url)   s   € ô
 "Ð"8¸4¿9¹9Ñ"DÓEÐEr   c                 óJ   — | j                  |«      } | j                  |fi |¤ŽS r%   )Ú get_redirect_from_request_kwargsÚredirect)r"   r   r.   s      r   Úredirect_from_requestzProvider.redirect_from_request0   s(   € Ø×6Ñ6°wÓ?ˆØˆt�}‰}˜WÑ/¨Ñ/Ð/r   c                 ój   — i }t        |«      }|r||d<   t        |dt        j                  «      |d<   |S )NÚnext_urlÚprocess)r   r	   r   ÚLOGIN)r"   r   r.   r5   s       r   r1   z)Provider.get_redirect_from_request_kwargs4   s<   € ØˆÜ(¨Ó1ˆÙØ!)ˆF�:ÑÜ-¨g°yÄ+×BSÑBSÓTˆˆyÑØˆr   c                 ó   — t        «       ‚)z6
        Initiate a redirect to the provider.
        ©r,   )r"   r   r6   r5   Údatar.   s         r   r2   zProvider.redirect<   s   € ô "Ó#Ð#r   c                 ó   — t        «       ‚)z‚
        Verifies the token, returning a `SocialLogin` instance when valid.
        Raises a `ValidationError` otherwise.
        r9   )r"   r   Útokens      r   Úverify_tokenzProvider.verify_tokenB   s   € ô
 "Ó#Ð#r   c                  ó   — y)zT
        Some providers may require extra scripts (e.g. a Facebook connect)
        Ú r   )r"   r   s     r   Úmedia_jszProvider.media_jsI   s   € ð r   c                 ó$   — | j                  |«      S r%   )Úaccount_class©r"   Úsocial_accounts     r   Úwrap_accountzProvider.wrap_accountO   s   € Ø×!Ñ! .Ó1Ð1r   c                 óV   — t         j                  j                  | j                  i «      S r%   )r   Ú	PROVIDERSÚgetr   r&   s    r   Úget_settingszProvider.get_settingsR   s   € Ü×%Ñ%×)Ñ)¨$¯'©'°2Ó6Ð6r   c                 ó²  — ddl m} ddlm}m}  |«       }| j                  |«      }t        |t        «      st        dt        |«      › �«      ‚t        |«      t        j                  kD  rt        dt        |«      › d�«      ‚|st        d«      ‚| j                  |«      }| j                  |«      }	 |||| j                   ¬«      }
| j#                  |«      }| j%                  |	j'                  d	«      ||	j'                  d
«      ¬«      }|r||	d	<    || |
|¬«      }|j)                  ||«      x}|_        |j-                  «        |j/                  |||	«       |S )a|  
        Instantiates and populates a `SocialLogin` model based on the data
        retrieved in `response`. The method does NOT save the model to the
        DB.

        Data for `SocialLogin` will be extracted from `response` with the
        help of the `.extract_uid()`, `.extract_extra_data()`,
        `.extract_common_fields()`, and `.extract_email_addresses()`
        methods.

        :param request: a Django `HttpRequest` object.
        :param response: object retrieved via the callback response of the
            social auth provider.
        :return: A populated instance of the `SocialLogin` model (unsaved).
        r   r   )ÚSocialAccountÚSocialLoginzuid must be a string: z)SOCIALACCOUNT_UID_MAX_LENGTH too small (<ú)zuid must be a non-empty string)Ú
extra_dataÚuidÚproviderÚemailÚemail_verified)rR   )rP   ÚaccountÚemail_addresses)Úallauth.socialaccount.adapterr   Úallauth.socialaccount.modelsrK   rL   Úextract_uidÚ
isinstanceÚstrr    ÚreprÚlenr   ÚUID_MAX_LENGTHr   Úextract_extra_dataÚextract_common_fieldsÚsub_idÚextract_email_addressesÚcleanup_email_addressesrH   Únew_userÚuserÚset_unusable_passwordÚpopulate_user)r"   r   Úresponser   rK   rL   ÚadapterrO   rN   Úcommon_fieldsÚsocialaccountrT   rQ   Úsocialloginrc   s                  r   Úsociallogin_from_responsez"Provider.sociallogin_from_responseU   sb  € õ" 	>ßKá“-ˆØ×Ñ˜xÓ(ˆÜ˜#œsÔ#ÜÐ5´d¸3³i°[ÐAÓBÐBÜˆs‹8”l×1Ñ1Ò1Ü&Ø;¼CÀ»H¸:ÀQÐGóð ñ ÜÐ=Ó>Ð>à×,Ñ,¨XÓ6ˆ
Ø×2Ñ2°8Ó<ˆÙ%Ø!ØØ—[‘[ô
ˆð
 ×6Ñ6°xÓ@ˆØ×,Ñ,Ø×Ñ˜gÓ&ØØ(×,Ñ,Ð-=Ó>ð -ó 
ˆñ
 Ø%*ˆM˜'Ñ"Ù!ØØ!Ø+ô
ˆð
 #*×"2Ñ"2°7¸KÓ"HÐHˆˆ{ÔØ×"Ñ"Ô$Ø×Ñ˜g {°MÔBØÐr   c                 ó   — t        d«      ‚)z9
        Extracts the unique user ID from `data`
        z6The provider must implement the `extract_uid()` methodr9   ©r"   r:   s     r   rW   zProvider.extract_uid�   s   € ô "ØDó
ð 	
r   c                 ó   — |S )zø
        Extracts fields from `data` that will be stored in
        `SocialAccount`'s `extra_data` JSONField, such as email address, first
        name, last name, and phone number.

        :return: any JSON-serializable Python structure.
        r   rm   s     r   r]   zProvider.extract_extra_data•   s	   € ð ˆr   c                 ó   — i S )a  
        Extracts fields from `data` that will be used to populate the
        `User` model in the `SOCIALACCOUNT_ADAPTER`'s `populate_user()`
        method.

        For example:

            {'first_name': 'John'}

        :return: dictionary of key-value pairs.
        r   rm   s     r   r^   zProvider.extract_common_fieldsŸ   s	   € ð ˆ	r   rQ   Ú	addressesrR   Úreturnc           	      ó�  — ddl m} |r\|j                  «       |D �cg c]  }|j                  j                  «       ‘Œ c}vr$|j	                  d ||t        |«      d¬«      «       t        «       }|D ]&  }|j                  | |j                  «      sŒ d|_        Œ( |j                  d„ d¬«       |s|r|d   j                  }|S c c}w )Nr   )ÚEmailAddressT)rQ   ÚverifiedÚprimaryc                 óH   — | j                   | j                  | j                  fS r%   )ru   rt   rQ   )Úas    r   ú<lambda>z2Provider.cleanup_email_addresses.<locals>.<lambda>À   s   €  a§i¡i°·±¸Q¿W¹WÐ%E€ r   )ÚkeyÚreverse)
Úallauth.account.modelsrs   ÚlowerrQ   ÚinsertÚboolr   Úis_email_verifiedrt   Úsort)r"   rQ   rp   rR   rs   rw   rg   Úaddresss           r   ra   z Provider.cleanup_email_addresses­   s·   € õ 	8ñ �U—[‘[“]ÀIÖ*N¸q¨1¯7©7¯=©=­?Ò*NÑNØ×ÑØÙ 5´4¸Ó3GÐQUÔVôô
 “-ˆØ ò 	(ˆGØ×(Ñ(¨¨w¯}©}Õ=Ø#'�Õ ð	(ð
 	�‰ÑEÈtˆÔTÙ™Ø˜a‘L×&Ñ&ˆEØˆùò +Os   œ!Cc                 ó   — g S )z™
        For example:

        [EmailAddress(email='john@example.com',
                      verified=True,
                      primary=True)]
        r   rm   s     r   r`   z Provider.extract_email_addressesÅ   s	   € ð ˆ	r   c                 ó`   — t        | dd «      }|s| j                  j                  d«      d   }|S )NÚpackageú.r   )Úgetattrr   Ú
rpartition)r)   Úpkgs     r   Úget_packagezProvider.get_packageÏ   s1   € ä�c˜9 dÓ+ˆÙØ—.‘.×+Ñ+¨CÓ0°Ñ3ˆCØˆ
r   c                 óN   — ||dœ|¥}|r||d<   t        j                  |||¬«      S )zè
        Stashes state, returning a (random) state ID using which the state
        can be looked up later. Application specific state is stored separately
        from (core) allauth state such as `process` and `**kwargs`.
        )r6   r:   r-   )Ústate_id)r   Ústash_state)r"   r   r6   r5   r:   r‹   r.   Ústates           r   Ústash_redirect_statezProvider.stash_redirect_stateÖ   s4   € ð $¨TÑ<°VÐ<ˆÙØ$ˆE�&‰MÜ×#Ñ# G¨U¸XÔFÐFr   c                 óJ   — t        j                  ||«      }|€
t        «       ‚|S r%   )r   Úunstash_stater   )r"   r   r‹   r�   s       r   Úunstash_redirect_statezProvider.unstash_redirect_stateã   s'   € Ü×&Ñ& w°Ó9ˆØˆ=Ü"Ó$Ð$Øˆr   c                 óŽ   — | j                   r.| j                  j                  xs | j                  j                  S | j                  S r%   )r   r!   Úprovider_idrP   r   r&   s    r   r_   zProvider.sub_idé   s8   € ð <@¿>º>ˆT�X‰X×!Ñ!Ò6 T§X¡X×%6Ñ%6ð	
ØOSÏwÉwð	
r   c                 ól   — d| j                   i}| j                  r| j                  j                  |d<   |S )Nr   úapp.client_id)r   r   r!   Ú	client_id©r"   Úrets     r   Ú	serializezProvider.serializeï   s/   € Ø�T—W‘WˆoˆØ�>Š>Ø#'§8¡8×#5Ñ#5ˆC�Ñ Øˆ
r   r:   c                 óz   — t        «       j                  t        j                  |d   |j	                  d«      ¬«      S )Nr   r•   )rP   r–   )r   Úget_providerr
   r   rH   )r)   r:   s     r   ÚdeserializezProvider.deserializeõ   s6   € ä‹}×)Ñ)Ü�O‰OØ˜$‘ZØ—h‘h˜Ó/ð *ó 
ð 	
r   r%   )NN)F)NNN)'r   r   r   rY   Ú__annotations__r   r   r   Úsupports_redirectÚsupports_token_authenticationr#   r'   Úclassmethodr*   r/   r3   r1   r2   r=   r@   rE   rI   rk   rW   r]   r^   Úlistr~   ra   r`   r‰   rŽ   r‘   Úpropertyr_   r   r   r™   rœ   r   r   r   r   r      sA  … Ø
ƒIØƒGØ€Dˆ(�3‰-Óà€IØÐð %*Ð!óòð ñ"ó ð"óFò0òó$ò$òò2ò7ò6òp
òòð MRñØ˜c‘]ðØ/3ðØEIðà	�#‰óò0ð ñó ðð DHóGòð ð
˜ò 
ó ð
ð
˜4  S ™>ó ð ð
˜t C¨ H™~ð 
°*ò 
ó ñ
r   r   c                   óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zdee	   fd„Z
d„ Zy	)
ÚProviderAccountc                 ó   — || _         y r%   )rS   rC   s     r   r#   zProviderAccount.__init__ÿ   s	   € Ø%ˆ�r   c                  ó   — y r%   r   r&   s    r   Úget_profile_urlzProviderAccount.get_profile_url  ó   € Ør   c                  ó   — y r%   r   r&   s    r   Úget_avatar_urlzProviderAccount.get_avatar_url  r¨   r   c                 óx   — | j                   j                  «       }t        |j                  |j                  ¬«      S )a7  
        Returns a dict containing an id and name identifying the
        brand. Useful when displaying logos next to accounts in
        templates.

        For most providers, these are identical to the provider. For
        OpenID however, the brand can derived from the OpenID identity
        url.
        )r   r   )rS   r›   Údictr   r   )r"   rP   s     r   Ú	get_brandzProviderAccount.get_brand  s+   € ð —<‘<×,Ñ,Ó.ˆÜ�x—{‘{¨¯©Ô7Ð7r   c                 ó"   — | j                  «       S r%   )Úto_strr&   s    r   r'   zProviderAccount.__str__  s   € Ø�{‰{‹}Ðr   rq   c                 óV   — | j                   j                  }t        |t        «      sd}|S )a  Typically, the ``extra_data`` directly contains user related keys.
        For some providers, however, they are nested below a different key. In
        that case, you can override this method so that the base ``__str__()``
        will still be able to find the data.
        N)rS   rN   rX   r¬   r—   s     r   Úget_user_datazProviderAccount.get_user_data  s'   € ð �l‰l×%Ñ%ˆÜ˜#œtÔ$ØˆCØˆ
r   c                 óº  — | j                  «       }|r·i }dg d¢fdg d¢fdg d¢fdddgfdg d¢fd	g d
¢fg}|D ]M  \  }}|D ]C  }|j                  |«      }t        |t        «      sŒ%|j	                  «       }|r|s|c c S |||<   ŒE ŒO |j                  d«      xs d}|j                  d	«      xs d}	|s|	r|› d|	› �j	                  «       S | j                  «       d   S )aÂ  
        Returns string representation of this social account. This is the
        unique identifier of the account, such as its username or its email
        address. It should be meaningful to human beings, which means a numeric
        ID number is rarely the appropriate representation here.

        Subclasses are meant to override this method.

        Users will see the string representation of their social accounts in
        the page rendered by the allauth.socialaccount.views.connections view.

        The following code did not use to work in the past due to py2
        compatibility:

            class GoogleAccount(ProviderAccount):
                def __str__(self):
                    dflt = super(GoogleAccount, self).__str__()
                    return self.account.extra_data.get('name', dflt)

        So we have this method `to_str` that can be overridden in a conventional
        fashion, without having to worry about it.
        N)ÚusernameÚuserNameÚ	user_nameÚloginÚhandle)rQ   ÚEmailÚmailÚemail_address)r   Údisplay_nameÚdisplayNameÚdisplaynameÚDisplay_NameÚnicknameÚ	full_nameÚfullNameÚ
first_name)rÂ   Ú	firstnameÚ	firstNameÚ
First_NameÚ
given_nameÚ	givenNameÚ	last_name)rÈ   ÚlastnameÚlastNameÚ	Last_NameÚfamily_nameÚ
familyNameÚsurnamer?   ú r   )r±   rH   rX   rY   Ústripr­   )
r"   Ú	user_dataÚcombi_valuesÚtblÚstore_asÚvariantsry   ÚvaluerÂ   rÈ   s
             r   r¯   zProviderAccount.to_str#  s0  € ð. ×&Ñ&Ó(ˆ	ÙØˆLð òð	ð ÒBÐCàòð
ð ˜ ZÐ0Ð1ð !òð
ð  òððO3ˆCðh '*ò 7Ñ"�˜(Ø#ò 7�CØ%ŸM™M¨#Ó.�EÜ! %¬Õ-Ø %§¡£˜Ù ©Ø#(œLØ16˜ XÒ.ñ7ð7ð &×)Ñ)¨,Ó7Ò=¸2ˆJØ$×(Ñ(¨Ó5Ò;¸ˆIÙ™YØ$˜ Q y kÐ2×8Ñ8Ó:Ð:Ø�~‰~Ó Ñ'Ð'r   N)r   r   r   r#   r§   rª   r­   r'   r   r   r±   r¯   r   r   r   r¤   r¤   þ   s1   „ ò&òòò8òð	˜x¨™~ó 	óZ(r   r¤   N)Útypingr   r   r   Údjango.core.exceptionsr   r   Úallauth.account.utilsr   r	   Úallauth.corer
   Úallauth.socialaccountr   rU   r   Úallauth.socialaccount.internalr   Ú.allauth.socialaccount.providers.base.constantsr   Ú	Exceptionr   r   r¤   r   r   r   ú<module>rß      sE   ðß &Ñ &ç Iç JÝ  Ý .Ý 5Ý 3Ý Fô	˜	ô 	÷j
ñ j
÷Z(ò (r   