
    )Jf5$                        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 j        ded         ed         ed         ed          ed!         ed"         d#gi          Zd$ Z  ed%d&d'd(d&d)d*d+id,ii-           G 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                     t           j        j                            t	          j        t                              }t          | |ddt          d         i          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_keys     n/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/allauth/socialaccount/providers/apple/tests.pysign_id_tokenr3   Y   sU     .-66tzBT7U7UVVK*512	       FappleAPPapp123iddummycertificate_keyz-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg2+Eybl8ojH4wB30C
3/iDkpsrxuPfs3DZ+3nHNghBOpmhRANCAAQSpo1eQ+EpNgQQyQVs/F27dkq3gvAI
28m95JEk26v64YAea5NTH56mru30RDqTKPgRVi5qRu3XGyqy3mdb8gMy
-----END PRIVATE KEY-----
)	client_idkeysecretr   )SOCIALACCOUNT_STORE_TOKENSSOCIALACCOUNT_PROVIDERSc                   T     e Zd Zej        Zd Zd
dZd Z fdZ	ddZ
d Zd	 Z xZS )
AppleTestsc                 d    t          j                    }dd|t          d          z   |dddddd	d

S )Nzhttps://appleid.apple.comr7   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nows     r2   get_apple_id_token_payloadz%AppleTests.get_apple_id_token_payload}   sL    o.++++5/4$ &#
 
 	
r4   Tc                 x    t          |                                           }t          j        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)r3   rR   r-   r.   )rP   with_refresh_tokenrY   s      r2   get_login_response_jsonz"AppleTests.get_login_response_json   sJ     !!@!@!B!BCCz ("$!)& 
 
 	
r4   c                 2    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)rP   s    r2   get_mocked_responsezAppleTests.get_mocked_response   s$     %8J'K
 
 	
r4   c           	          t                                          |          }|                    t          |                                           t          j        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)rK   name)rY   user)superget_complete_parametersupdater3   rR   r-   r.   )rP   auth_request_paramsparams	__class__s      r2   rl   z"AppleTests.get_complete_parameters   s     001DEE)$*I*I*K*KLL
!<),(+! !   	
 	
 	
 r4   loginc                    | j                             t          | j        j        dz             dz   t          t          |                    z             }t          |d                   }t          |j	                  }t          | j        j        dz             }| 
                    |d         d                             |          d           |                     |          }t          t          d	|d
di          |          5  | j                             ||                     |                    }t          d          |j        v sJ | j                             |j                  }d d d            n# 1 swxY w Y   |S )N_login?)processlocation	_callbackredirect_urir   )r\   r_   r`   ra   dataapple_finish_callback)clientpostr
   provideridr   dictr   r   queryassertGreaterfindr]   r   r   rl   urlget)	rP   	resp_mockru   r\   respr   r   complete_urlresponse_jsons	            r2   rq   zAppleTests.login   s   {DM$x/00W---../
 

 T*%&&QWt}/+=>>1^,Q/44\BBAFFF441 5 
 
 3@R/STT
 
 	- 	- ;##11!44 $  D 233tx???? ;??48,,D	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- s   A'E::E>E>c           	      @   | j                             t          | j        j        dz             ddd          }t          d          |j        v sJ | j                             |j                  }|                     |dt          t          dd	          z             d
S )z-Override base test because apple posts errorsrw   misctestingstate123)errorstatery   r{   z%socialaccount/authentication_error.%sACCOUNT_TEMPLATE_EXTENSIONhtmlN)
r|   r}   r
   r~   r   r   r   assertTemplateUsedgetattrr   )rP   r   s     r2   test_authentication_errorz$AppleTests.test_authentication_error   s    {DM${233!,=>>   
 
 .//48;;;;{tx((3h <fEEF	
 	
 	
 	
 	
r4   c                    |                      |                                           }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 )Nr{   	PATH_INFOr   QUERY_STRINGcoder   path)rq   rc   r
   assertEqualrequest
assertTruer   r|   cookiesr   r   r   SESSION_ENGINESessionStorevaluelenr%   )rP   r   
finish_urlapple_session_cookieenginer   apple_login_sessions          r2   test_apple_finishzAppleTests.test_apple_finish   sG   zz$224455 455
k2J???4<#??@@@$,~">>??? 	1T[5HHIII  ${2667PQQx677**l+?+EFF0557788!<<< 	-11&99:FFFFFr4   )T)rq   T)__name__
__module____qualname__r   r   provider_idrR   r]   rc   rl   rq   r   r   __classcell__)rp   s   @r2   r@   r@   f   s        *  "K
 
 

 
 
 
 	
 	
 	
    0   8
 
 
 G G G G G G Gr4   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   r|   r   r~   r   r/   r.   rb   r3   r@    r4   r2   <module>r      sY    ( ( ( ( ( ( ( ( # # # # # # + + + + + + + +             / / / / / /       ' ' ' ' ' ' 



 8 8 8 8 8 8 C C C C C C C C C C 4 4 4 4 4 4       # # # # # #	. 	.
	 
	.
	. 	.
	Q/ / f "tz)%0)%0)%0)%0',', 	
   
 
 
 $'!% (	 
  (EG EG EG EG EG!8 EG EG) (EG EG EGr4   