o
    ˷e $                     @   s@  d dl Z d dlmZmZ d dl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Zd d	lmZ d d
lmZmZmZ ddlmZ ddlmZ ddlmZ dddddddddddddZe ded ed ed ed  ed! ed" d#giZd$d% Z ed&d'd(d)d'd*d+d,iid-G d.d/ d/eeZ!dS )0    N)datetime	timedelta)import_module)parse_qsurlparse)settings)override_settings)reverse)	urlencode)OAuth2TestsMixin)MockedResponseTestCasemocked_response   )APPLE_SESSION_COOKIE_NAME)
jwt_encode)AppleProviderz4ADzS5jKx_kdQihyOocVS0Qwwo7m0f7Ow56EadySJ-cmnwoHHF3AxgRaq-h-KwybSphvdc-X7NbS79-b9dumHKyt1MeVLAsDZD1a-uQCEneY1g9LsQkscNr7OggcpvMg5UUFwv6Akavu8cB0iyhNdha5_AWX27K5lNebvpaXEJ8RSAzyy5UvMjrvZyO1Os_nxXIugCa3NyWOkC8oMppPvr1Bl5AnF_xwXN2n9ozPd9Nb3Q3n-omNgLayyUxhwIjWDlI67Vbx-ESuff8ZEBKuTK0Gdmr4C_QU_j0gvvNMNJweSPxDdRmIUgOnjTVNWmdqFTZs43jXAT4J519rgveNLAkGNEaV  riPuGIDde88WS03CVbo_mZ9toFWPyTxvuz8VInJ9S1ZxULo-hQWDBohWGYwvg8cgfXckcqWt5OBqNvPYdLgwb84uVi2JeEHmhcQSc_x0zfRTau5HVE2KdR-gWxQjPWoaBHeDVqwoPKaU2XYxa-gYDXcuSJWHz3BX13oInDEFCXr6VwiLiwLBFsb63EEHwyWXJbTpoar7AARWkz76qtngDkk4t9gk_Q0L1y1qf1GeWiAL7xWb-bdptma4-1ui-R2219-1ONEZ41v_jsIS_z8ooXmVCbUsHV4Z1UDpRvpORVE3u57WK3qXUdAtZsXjaIwkdItbDmL1jFUgefwfO91YYQAQABsigtestkeyzR0Hu4YmpHzw3SKWGYuAcAo6B97-JlN2fXiTjZ2g8eHGQX7LSoKEu0Hmu5hcBZYSgOuorIPsPUu3mNtx3pjLMOaJRk34VwcYu7h23ogEKGcPUt1c4tTotFDdw8WFptDOw4ow31TmlBPExLqzzGjJeQSNULB1bExuuhYMWx6wBXo8zWBaHlnbjZ3hDVTzqjrGIYizSr-_aPUJitPKlR6wBncd8nJYo7bLAmB4mOewXkX5HozIGwuF78RsZoFLi1fAmhqgxQ7eopcU-9DBcksUPO4vkgmlJbrkYzNiQauW9vrllekOGXIQQszhVoqP4MLEMpR-Sy9S3PyItcKbJDE3T4ikRS256zAr5kbIw2CsBzeVKX8FkF9eUOMk9URAMdyPoSw8P1zRk2vCXbiOY7Qttad8ptLEUgfytVSsNtGvMsoQsZWRak8nHnhGJ4s0QzB1OK7sdNgU_cL1HV-VxSSPaHhdJBrJEcrzggDPEBKYfDHU6Iz34d1nvjBxoWE8rfqJsGbCW4xxEaV  sclLPioUv4VOcOZWAKoRhcvwIH2jOhoHhSI_Cj5c5zSp7qaK8jCU6T7-GObsgrhpty-k26ZuqRdgu9d-62WO8OBGt1e0wxbTh128-nTTrOESHUlV_K1wpJmXOxNpJiybcgzZNbAmACmsHfxZvN9bt7gKPXxf3-_zFAf12PbYMrOionAJ1N_4HxL7fz3xkr5C87Av06QNilIC-mA-4n9Eqw_R2DYNpE3RYMdWtwKqBwJC8qs3677RpG9vcc-yZ_97pEiytd2FBJ8uoTwHd3DHJB8UVgBSh1kMUpSdoM7HxVzKx732nx6Kusln79LrsfOzrXF4enkfKJYI40-uwT95zw)pktyqdeusekidqidpalgdqnkeysr   r   r   r!   r#   r   )r   r   r   r!   r#   r   c                 C   s,   t jjtt}t| |ddtd idS )zB
    Sign a payload as apple normally would for the id_token.
    r   r   )	algorithmheaders)jwt
algorithmsRSAAlgorithmfrom_jwkjsondumpsTESTING_JWT_KEYSETr   )payloadsigning_key r0   b/var/www/ideatree/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/apple/tests.pysign_id_tokenY   s   
r2   FappleAPPapp123iddummyz-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg2+Eybl8ojH4wB30C
3/iDkpsrxuPfs3DZ+3nHNghBOpmhRANCAAQSpo1eQ+EpNgQQyQVs/F27dkq3gvAI
28m95JEk26v64YAea5NTH56mru30RDqTKPgRVi5qRu3XGyqy3mdb8gMy
-----END PRIVATE KEY-----
)	client_idkeysecretcertificate_key)SOCIALACCOUNT_STORE_TOKENSSOCIALACCOUNT_PROVIDERSc                       sV   e Zd ZejZdd ZdddZdd Z fdd	Z	dddZ
dd Zdd Z  ZS )
AppleTestsc                 C   s,   t  }dd|tdd |dddddd	d

S )Nzhttps://appleid.apple.comr5   r   )hoursz 000313.c9720f41e9434e18987a.1218CkaUPjk4MJinaAq6Z0tGUAztest@privaterelay.appleid.comtrueiI)
issaudexpiatsubat_hashemailemail_verifiedis_private_email	auth_time)r   utcnowr   )selfnowr0   r0   r1   get_apple_id_token_payload{   s   z%AppleTests.get_apple_id_token_payloadTc                 C   s"   t |  }tdd|dddS )zR
        `with_refresh_token` is not optional for apple, so it's ignored.
        testaci  testrtBearer)access_token
expires_inid_tokenrefresh_token
token_type)r2   rN   r+   r,   )rL   with_refresh_tokenrT   r0   r0   r1   get_login_response_json   s   z"AppleTests.get_login_response_jsonc                 C   s   t dtddiS )a*  
        Apple is unusual in that the `id_token` contains all the user info
        so no profile info request is made. However, it does need the
        public key verification, so this mocked response is the public
        key request in order to verify the authenticity of the id_token.
           content-typeapplication/json)r   KEY_SERVER_RESP_JSON)rL   r0   r0   r1   get_mocked_response   s   
zAppleTests.get_mocked_responsec              	      s:   t  |}|t|  tdddddd |S )a   
        Add apple specific response parameters which they include in the
        form_post response.

        https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/incorporating_sign_in_with_apple_into_other_platforms
        zprivate@appleid.apple.comAB)	firstNamelastName)rG   name)rT   user)superget_complete_parametersupdater2   rN   r+   r,   )rL   auth_request_paramsparams	__class__r0   r1   re      s   
z"AppleTests.get_complete_parametersloginc           	      C   s   | j t| jjd d tt|d }t|d }t|j	}t| jjd }| 
|d d |d | j|d}ttd	|d
di|$ | j j|| |d}td|jv s[J | j |j}W d    |S 1 smw   Y  |S )N_login?)processlocation	_callbackredirect_urir   )rW   rY   rZ   r[   dataapple_finish_callback)clientpostr	   provideridr
   dictr   r   queryassertGreaterfindrX   r   r   re   urlget)	rL   	resp_mockrn   rW   respr   r   complete_urlresponse_jsonr0   r0   r1   rk      s8   

zAppleTests.loginc                 C   s^   | j jt| jjd dddd}td|jv sJ | j |j}| |dtt	dd	  d
S )z-Override base test because apple posts errorsrp   misctestingstate123)errorstaterr   rt   z%socialaccount/authentication_error.%sACCOUNT_TEMPLATE_EXTENSIONhtmlN)
ru   rv   r	   rw   rx   r}   r~   assertTemplateUsedgetattrr   )rL   r   r0   r0   r1   test_authentication_error   s   
z$AppleTests.test_authentication_errorc                 C   s   |  |  }td}| |jd | | d|jd v  | d|jd v  | t| jjv  | jj	t}t
tj}|j}||j}| t| d | |	d| d S )Nrt   	PATH_INFOr   QUERY_STRINGcoder   path)rk   r]   r	   assertEqualrequest
assertTruer   ru   cookiesr~   r   r   SESSION_ENGINESessionStorevaluelenr$   )rL   r   
finish_urlapple_session_cookieenginer   apple_login_sessionr0   r0   r1   test_apple_finish   s   

zAppleTests.test_apple_finish)T)rk   T)__name__
__module____qualname__r   rx   provider_idrN   rX   r]   re   rk   r   r   __classcell__r0   r0   ri   r1   r=   f   s    

r=   )"r+   r   r   	importlibr   urllib.parser   r   django.confr   django.test.utilsr   django.urlsr	   django.utils.httpr
   r'   allauth.socialaccount.testsr   allauth.testsr   r   r   apple_sessionr   ru   r   rw   r   r-   r,   r\   r2   r=   r0   r0   r0   r1   <module>   sj    3