
    f%                     |   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!y)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                  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     f/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/apple/tests.pysign_id_tokenr3   Y   sL     ..--66tzzBT7U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                   j     e Zd Zej                  Zd Zd Zd
dZd Z	d Z
 fdZddZd Zd	 Z xZS )
AppleTestsc                 ^    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CkaUPjk4MJinaAq6Z0tGUA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}   s@    oo.++5/4$ &#
 	
r4   c                    t        | j                               }t        | j                               5  | j                  j                  d d|i      }|j                  j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nid_tokenrD   )r3   rS   r   get_mocked_responseproviderverify_tokenuserrL   )rQ   rU   sociallogins      r2   test_verify_tokenzAppleTests.test_verify_token   su     !@!@!BCT5578 	M--44TJ;QRK##))-LLLL	M 	M 	Ms   :A77B c                 j    t        | j                               }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_inrU   refresh_token
token_type)r3   rS   r-   r.   )rQ   with_refresh_tokenrU   s      r2   get_login_response_jsonz"AppleTests.get_login_response_json   s<     !!@!@!BCzz ("$!)&
 	
r4   c                 (    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rQ   s    r2   rV   zAppleTests.get_mocked_response   s     %8J'K
 	
r4   c                      y)NzA B rk   s    r2   get_expected_to_strzAppleTests.get_expected_to_str   s    r4   c           	          t         |   |      }|j                  t        | j	                               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)rL   name)rU   rY   )superget_complete_parametersupdater3   rS   r-   r.   )rQ   auth_request_paramsparams	__class__s      r2   rv   z"AppleTests.get_complete_parameters   s]     01DE)$*I*I*KL

!<),(+!	
 r4   c                    | j                   j                  t        | j                  j                  dz         dz   t        t        |            z         }t        |d         }t        |j                        }t        | j                  j                  dz         }| j                  |d   d   j                  |      d       | j                  |      }t        t        d	|d
di      |      5  | j                   j                  || j                  |            }t        d      |j                   v sJ | j                   j#                  |j                         }d d d        |S # 1 sw Y   |S xY w)N_login?)processlocation	_callbackredirect_urir   )rd   rg   rh   ri   dataapple_finish_callback)clientpostr
   rW   idr   dictr   r   queryassertGreaterfindre   r   r   rv   urlget)	rQ   	resp_mockr~   rd   respr   r   complete_urlresponse_jsons	            r2   loginzAppleTests.login   sW   {{DMM$$x/0W-./

 T*%&QWWt}}//+=>1^,Q/44\BAF441 5 
 3@R/ST
 	- ;;##11!4 $ D 23txx??? ;;??488,D	- 	- s   ,A+E!!E+c           	      H   | j                   j                  t        | j                  j                  dz         ddd      }t        d      |j
                  v sJ | j                   j                  |j
                        }| j                  |dt        t        dd	      z         y
)z-Override base test because apple posts errorsr   misctestingstate123)errorstater   r   z%socialaccount/authentication_error.%sACCOUNT_TEMPLATE_EXTENSIONhtmlN)
r   r   r
   rW   r   r   r   assertTemplateUsedgetattrr   )rQ   r   s     r2   test_authentication_errorz$AppleTests.test_authentication_error   s    {{DMM$${23!,=>   
 ./488;;;{{txx(3h <fEF	
r4   c                    | j                  | j                               }t        d      }| j                  |j                  d   |       | j                  d|j                  d   v        | j                  d|j                  d   v        | j                  t        | j                  j                  v        | j                  j                  j                  t              }t        t        j                        }|j                  } ||j                        }| j                  t        |j!                               d       | j                  |j                  d      |       y )Nr   	PATH_INFOr   QUERY_STRINGcoder   path)r   rV   r
   assertEqualrequest
assertTruer   r   cookiesr   r   r   SESSION_ENGINESessionStorevaluelenr%   )rQ   r   
finish_urlapple_session_cookieenginer   apple_login_sessions          r2   test_apple_finishzAppleTests.test_apple_finish   s   zz$2245 45
k2J?4<<#??@$,,~">>? 	1T[[5H5HHI  ${{22667PQx667***+?+E+EF05578!< 	-11&9:Fr4   )T)r   T)__name__
__module____qualname__r   r   provider_idrS   r[   re   rV   rn   rv   r   r   r   __classcell__)rz   s   @r2   r@   r@   f   s?    *  ""K
M
 	
08
 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   rW   r   r/   r.   rj   r3   r@   rm   r4   r2   <module>r      s%    ( # +   /  ' 
 8 C C 4  #	. 	.
	 
	.
	. 	.
	Q/ f "tzz)%0)%0)%0)%0',',	
  
 $'!% (	
(NG!8 NG)(NGr4   