
    f                         d dl m Z mZ d dlmZmZmZ d dlmZ d dlZd dl	m
Z
 d dlmZmZ d Z G d d	      Z G d
 de      Zy)    )datetime	timedelta)	parse_qslquote	urlencode)ImproperlyConfiguredN)get_adapter)OAuth2ClientOAuth2Errorc                  r    t        j                  | i |}t        |t              r|j	                  d      }|S )Nzutf-8)jwtencode
isinstancebytesdecode)argskwargsresps      g/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/apple/client.py
jwt_encoder      s2    ::t&v&D${{7#K    c                       e Zd ZdZdZy)ScopeemailnameN)__name__
__module____qualname__EMAILNAME r   r   r   r      s    EDr   r   c                   *    e Zd ZdZd Zd ZddZd Zy)AppleOAuth2Clientz
    Custom client because `Sign In With Apple`:
        * requires `response_mode` field in redirect_url
        * requires special `client_secret` as JWT
    c                    t        j                         }t        | j                        j	                  | j                  d      }|j
                  st        d      |j                  j                  d      }|st        d      |j
                  d| j                         ||t        d      z   d}| j                  d	d
}t        ||d	|      }|S )z6Create a JWT signed with an apple provided private keyapplezApple 'key' missingcertificate_keyzApple 'certificate_key' missingzhttps://appleid.apple.com   )hours)issaudsubiatexpES256)kidalg)payloadkey	algorithmheaders)r   utcnowr	   requestget_appr2   r   settingsgetget_client_idr   consumer_secretr   )selfnowappr&   claimsr4   client_secrets          r   generate_client_secretz(AppleOAuth2Client.generate_client_secret#   s    oo$,,'//gFww&'<==,,**+<=&'HII77.%%'++
 ..w?"7G
 r   c                 >    | j                   j                  d      d   S )zCWe support multiple client_ids, but use the first one for api calls,r   )consumer_keysplit)r<   s    r   r:   zAppleOAuth2Client.get_client_id9   s      &&s+A..r   Nc                    | j                   }| j                         }| j                         |d| j                  |d}|r||d<   | j	                  |       t               j                         j                  | j                  ||| j                        }d }|j                  dv r	 |j                         }|rd|vrt!        d|j"                  z        |S # t        $ r! t        t        |j                              }Y Iw xY w)Nauthorization_code)	client_idcode
grant_typeredirect_urir@   code_verifier)datar4   )      access_tokenz!Error retrieving access token: %s)access_token_urlrA   r:   callback_url_strip_empty_keysr	   get_requests_sessionr6   access_token_methodr4   status_codejson
ValueErrordictr   textr   content)r<   rI   pkce_code_verifierurlr@   rM   r   rP   s           r   get_access_tokenz"AppleOAuth2Client.get_access_token=   s    ##335++-. --*
 $6D!t$M!!#WT--st||WT 	
 z):#yy{ ~\AADLLPQQ	  :#Idii$89:s   %C 'C?>C?c                    | j                   j                  t        |            }| j                         | j                  d|dd}| j
                  r| j
                  |d<   |j                  |       |dt        |t              S )N	form_postzcode id_token)rH   rK   response_modescoperesponse_typestate?)	quote_via)	scope_delimiterjoinsetr:   rR   rd   updater   r   )r<   authorization_urlrb   extra_paramsparamss        r   get_redirect_urlz"AppleOAuth2Client.get_redirect_urlY   su    $$))#e*5++- --(,
 ::"jjF7Ol#+Yv-OPPr   )N)r   r   r   __doc__rA   r:   r^   rn   r!   r   r   r#   r#      s    ,/8Qr   r#   )r   r   urllib.parser   r   r   django.core.exceptionsr   r   allauth.socialaccount.adapterr	   -allauth.socialaccount.providers.oauth2.clientr
   r   r   r   r#   r!   r   r   <module>rt      s;    ( 4 4 7 
 5 
IQ IQr   