
    qh                     z    S SK r S SKrS SKJrJr  S SKJr  S SKJr  SSK	J
r
Jr  SSKJr  SS	KJr   " S
 S\5      rg)    N)urlsafe_b64decodeurlsafe_b64encode)sha256)	urlencode   )AuthExceptionAuthTokenError)parse_qs   )BaseAuthc                   P    \ rS rSrSr/ SQrS rS rS rS r	S r
S	 rS
 rS rSrg)DiscourseAuth   	discourse)usernamename
avatar_urlc                    U R                   nU R                  R                  S5      nU R                  U5        [	        X!S.5      n[        UR                  S5      5      R                  S5      n[        R                  " U R                  S5      R                  S5      UR                  S5      [        5      R                  5       n[	        XES.5      nU R                  5        SU 3$ )zI
Get the URL to which we must redirect in order to authenticate the user
@   )noncereturn_sso_urlutf8asciiSECRET)ssosig?)redirect_uristrategyrandom_string	add_noncer   r   encodedecodehmacnewsettingr   	hexdigestget_idp_url)self
return_urlr   payloadbase_64_payloadpayload_signatureencoded_paramss          P/var/www/html/env/lib/python3.13/site-packages/social_core/backends/discourse.pyauth_urlDiscourseAuth.auth_url   s     &&
++B/ueJK+GNN6,BCJJ7S HHLL"))&1""6*
 )+	 	
 #?#UV""$%Q~&677    c                 *    U R                  S5      S-   $ )N
SERVER_URLz/session/sso_provider)r&   )r)   s    r/   r(   DiscourseAuth.get_idp_url#   s    ||L),CCCr2   c                     US   $ )Nemail )r)   detailsresponses      r/   get_user_idDiscourseAuth.get_user_id&   s      r2   c                 *   UR                  S5      UR                  S5      UR                  S5      UR                  SS5      R                  S5      UR                  S5      S:H  =(       d    UR                  S	5      S:H  UR                  S5      S:H  S
.$ )Nr   r7   r   groups ,admintrue	moderator)r   r7   r   r>   is_staffis_superuser)getsplit)r)   r:   s     r/   get_user_detailsDiscourseAuth.get_user_details)   s     Z0\\'*LL(ll8R066s; W-7 3||K(F2$LL1V;
 	
r2   c                     U R                   R                  R                  R                  U R	                  S5      [
        R
                  " 5       U5        g Nr4   )r   storager   user&   timer)   r   s     r/   r!   DiscourseAuth.add_nonce4   s4    ##''\(BDIIKQVWr2   c                     U R                   R                  R                  R                  U R	                  S5      U5      $ rK   )r   rL   r   rF   r&   rO   s     r/   	get_nonceDiscourseAuth.get_nonce7   s.    }}$$**..t||L/I5QQr2   c                 b    U R                   R                  R                  R                  U5        g )N)r   rL   r   deleterO   s     r/   delete_nonceDiscourseAuth.delete_nonce:   s     ##**51r2   c                    U R                   R                  5       nUR                  S5      nUR                  S5      n[        R                  " U R                  S5      R                  S5      UR                  S5      [        5      R                  5       n[        R                  " [        U5      [        U5      5      (       d  [        U S5      e[        UR                  S5      5      R                  S5      n[        U5      nU R                  UR                  S5      5      n	U	(       a  U R!                  U	5        O[#        U S5      eUR%                  S	S	XS
.5        U R                   R&                  " U0 UD6$ )zi
The user has been redirected back from the IdP and we should
now log them in, if everything checks out.
r   r   r   r   z Could not verify discourse loginr   r   zIncorrect id_token: noncer?   )r   r   backendr:   )r   request_datarF   r$   r%   r&   r"   r   r'   compare_digeststrr   r   r#   r
   rR   rV   r	   updateauthenticate)
r)   argskwargsrZ   
sso_paramssso_signatureparam_signaturedecoded_paramsr:   	nonce_objs
             r/   auth_completeDiscourseAuth.auth_complete=   s0   
 }}113!%%e,
$((/((LL"))&1:3D3DV3Lf

)+ 	 ""3}#5s?7KLL&HII*:+<+<V+DELLWU N+NN8<<#89	i( 'BCCbST}}))4:6::r2   r8   N)__name__
__module____qualname____firstlineno__r   
EXTRA_DATAr0   r(   r;   rH   r!   rR   rV   rf   __static_attributes__r8   r2   r/   r   r      s7    D3J8&D!	
XR2;r2   r   )r$   rN   base64r   r   hashlibr   urllib.parser   
exceptionsr   r	   utilsr
   baser   r   r8   r2   r/   <module>rt      s+      7  " 6  M;H M;r2   