o
    "4g%                     @   s<  d dl Z d dl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d,iid-G d.d/ d/eeZ dS )0    N)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 r.   t/var/www/html/authentication-server/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/apple/tests.pysign_id_tokenY   s   
r0   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                       sf   e Zd ZejZdd Zdd ZdddZ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 t }dd|d |ddddddd	
S )
Nzhttps://appleid.apple.comr3     z 000313.c9720f41e9434e18987a.1218CkaUPjk4MJinaAq6Z0tGUAtest@privaterelay.appleid.comtrueiI)
issaudexpiatsubat_hashemailemail_verifiedis_private_email	auth_time)inttime)selfnowr.   r.   r/   get_apple_id_token_payload}   s   z%AppleTests.get_apple_id_token_payloadc                 C   s`   t |  }t|   | jd d|i}|jjdksJ W d    d S 1 s)w   Y  d S )Nid_tokenr>   )r0   rN   r   get_mocked_responseproviderverify_tokenuserrF   )rL   rO   socialloginr.   r.   r/   test_verify_token   s
   "zAppleTests.test_verify_tokenTc                 C   s"   t |  }tdd|dddS )zR
        `with_refresh_token` is not optional for apple, so it's ignored.
        testacr<   testrtBearer)access_token
expires_inrO   refresh_token
token_type)r0   rN   r)   r*   )rL   with_refresh_tokenrO   r.   r.   r/   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   r.   r.   r/   rP      s   
zAppleTests.get_mocked_responsec                 C   s   dS )NzA Br.   rc   r.   r.   r/   get_expected_to_str   s   zAppleTests.get_expected_to_strc              	      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)rF   name)rO   rS   )superget_complete_parametersupdater0   rN   r)   r*   )rL   auth_request_paramsparams	__class__r.   r/   rk      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   )r]   r_   r`   ra   dataapple_finish_callback)clientpostr   rQ   idr   dictr   r   queryassertGreaterfindr^   r   r
   rk   urlget)	rL   	resp_mockrt   r]   respr   r   complete_urlresponse_jsonr.   r.   r/   rq      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 errorsrv   misctestingstate123)errorstaterx   rz   z%socialaccount/authentication_error.%sACCOUNT_TEMPLATE_EXTENSIONhtmlN)
r{   r|   r   rQ   r}   r   r   assertTemplateUsedgetattrr   )rL   r   r.   r.   r/   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 )Nrz   	PATH_INFOr   QUERY_STRINGcoder   path)rq   rP   r   assertEqualrequest
assertTruer   r{   cookiesr   r   r   SESSION_ENGINESessionStorevaluelenr"   )rL   r   
finish_urlapple_session_cookieenginer   apple_login_sessionr.   r.   r/   test_apple_finish   s   

zAppleTests.test_apple_finish)T)rq   T)__name__
__module____qualname__r   r}   provider_idrN   rU   r^   rP   rd   rk   rq   r   r   __classcell__r.   r.   ro   r/   r;   f   s    

r;   )!r)   rK   	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   rQ   r   r+   r*   rb   r0   r;   r.   r.   r.   r/   <module>   sl    3