
    f                     Z   d dl 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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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%m&Z& d dl'm(Z(m)Z) d dl*m+Z+m,Z,  G d d      Z- G d d      Z. G d de.e&      Z/ G d de.      Z0y)    )	timedelta)RequestException)DictOptional)settings)PermissionDenied)render)reverse)timezone)app_settings)ImmediateHttpResponse)add_query_params)get_adapter)complete_social_loginrender_authentication_error)statekit)SocialToken)ProviderException)	AuthError)BaseLoginView)OAuth2ClientOAuth2Error)build_absolute_uriget_request_paramc                       e Zd ZU dZeZdZdZee	   e
d<   dZdZdZdZdZeee	e	f      e
d	<   d
 Zd ZdefdZd Zd ZddZd Zy)OAuth2Adapter
expires_inTNredirect_uri_protocolPOSTaccess_denied Fheadersc                      || _         d| _        y )NF)requestdid_fetch_access_token)selfr$   s     g/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/oauth2/views.py__init__zOAuth2Adapter.__init__*   s    &+#    c                 v    t        | j                        j                  | j                  | j                        S )N)provider)r   r$   get_providerprovider_idr&   s    r'   r,   zOAuth2Adapter.get_provider.   s2    4<<(55LL4#3#3 6 
 	
r)   tokenc                     t         )z0
        Returns a SocialLogin instance
        )NotImplementedError)r&   r$   appr/   kwargss        r'   complete_loginzOAuth2Adapter.complete_login3   s
     "!r)   c                 d    t        | j                  dz         }| j                  }t        |||      S )N	_callback)r
   r-   r   r   )r&   r$   r2   callback_urlprotocols        r'   get_callback_urlzOAuth2Adapter.get_callback_url9   s1    t//+=>--!'<BBr)   c                     t        |d         }|j                  dd      |_        |j                  | j                  d       }|r/t	        j
                         t        t        |            z   |_        |S )Naccess_token)r/   refresh_token )seconds)	r   gettoken_secretexpires_in_keyr   nowr   int
expires_at)r&   datar/   r   s       r'   parse_tokenzOAuth2Adapter.parse_token>   s^    $~"67!XXor:XXd1148
'||~	#j/0RREr)   c                 f    t        | j                  d      }|j                  ||      }d| _        |S )Ncodepkce_code_verifierT)r   r$   get_access_tokenr%   )r&   r$   r2   clientrJ   rH   rE   s          r'   get_access_token_dataz#OAuth2Adapter.get_access_token_dataF   s5     v6&&t@R&S&*#r)   c                     | j                  ||      }| j                  | j                  |j                  |j                  | j
                  | j                  || j                  | j                  | j                  	      }|S )N)scope_delimiterr"   
basic_auth)
r9   client_classr$   	client_idsecretaccess_token_methodaccess_token_urlrO   r"   rP   )r&   r$   r2   r7   rL   s        r'   
get_clientzOAuth2Adapter.get_clientL   sq    ,,Wc:""LLMMJJ$$!! 00LL # 

 r)   N)__name__
__module____qualname__rA   r   rQ   supports_stater   r   str__annotations__rT   login_cancelled_errorrO   rP   r"   r   r(   r,   r   r4   r9   rF   rM   rV    r)   r'   r   r      sx    !NLN+/8C=/ +OJ(,GXd38n%,,

"+ "C
r)   r   c                       e Zd Zed        Zy)
OAuth2Viewc                       fd}|S )Nc                             }| |_         t        t              s |       |_        n|_        	  |j                  | g|i |S # t
        $ r}|j                  cY d }~S d }~ww xY wrW   )r$   
isinstancer   adapterdispatchr   response)r$   argsr3   r&   ere   clss        r'   viewz%OAuth2View.adapter_view.<locals>.view_   sh    5D"DLg}5&w/&"$t}}W>t>v>>( "zz!"s   A 	A+A& A+&A+r_   )rj   re   rk   s   `` r'   adapter_viewzOAuth2View.adapter_view]   s    
	" r)   N)rX   rY   rZ   classmethodrl   r_   r)   r'   ra   ra   \   s     r)   ra   c                       e Zd Zd Zy)OAuth2LoginViewc                 6    | j                   j                         S rW   )re   r,   r.   s    r'   r,   zOAuth2LoginView.get_providero   s    ||((**r)   N)rX   rY   rZ   r,   r_   r)   r'   ro   ro   n   s    +r)   ro   c                       e Zd Zd Zd Zd Zy)OAuth2CallbackViewc                 n   | j                   j                         }| j                  ||      \  }}|r|S d|j                  v sd|j                  vrh|j                  j	                  dd       }|| j                   j
                  k(  rt        j                  }nt        j                  }t        ||||| d      S |j                  }	| j                   j                  | j                  |	      }
	 | j                   j                  ||	|
|j	                  d            }| j                   j                  |      }|	j                  r|	|_
        | j                   j!                  ||	||      }||_        ||_        t'        ||      S # t(        t*        t,        t.        f$ r}t        |||d|i	      cY d }~S d }~ww xY w)
NerrorrH   )statecallback_view)rt   extra_contextrJ   rI   )rg   ru   )	exceptionrw   )re   r,   
_get_stateGETr?   r^   r   	CANCELLEDUNKNOWNr   r2   rV   r$   rM   rF   pkr4   r/   ru   r   r   r   r   r   )r&   r$   rh   r3   r+   ru   resp
auth_errorrt   r2   rL   r;   r/   loginri   s                  r'   rf   zOAuth2CallbackView.dispatcht   s   <<,,.oogx8tKgkk!V7;;%> $7JT\\???!++!))."%)	  ll((s;	<<==fCW9X > L LL,,\:Evv	LL//el 0 E  EKEK(%88	
 	 /Qw>N 	s   +BF   F4F/)F4/F4c                     d|j                   v s0t        j                  j                         dk7  s|j                  dk7  ry |j                         }t        |ddi      }t        |dt        j                  z   ||d      S )N_redirstrictrz   r=   zsocialaccount/login_redirect.)r+   redirect_to)
rz   r   SESSION_COOKIE_SAMESITElowermethodget_full_pathr   r	   account_settingsTEMPLATE_EXTENSION)r&   r$   r+   r   s       r'   _redirect_strict_samesitez,OAuth2CallbackView._redirect_strict_samesite   s|    #//5578C~~&++-&{XrNC+.>.Q.QQ$*
 	
r)   c                    d }t        |d      }| j                  j                  r|r,t        j                  ||      }nt        j
                  |      }|+| j                  ||      }|rd |fS d t        |||| d      fS |d fS )Nru   )state_idrv   )rw   )r   re   r[   r   unstash_stateunstash_last_stater   r   )r&   r$   r+   ru   r   r~   s         r'   ry   zOAuth2CallbackView._get_state   s    $Wg6<<&& ..wA//8E=11'8DD Tz!4 (%)   d{r)   N)rX   rY   rZ   rf   r   ry   r_   r)   r'   rr   rr   s   s    -^
$r)   rr   N)1datetimer   requestsr   typingr   r   django.confr   django.core.exceptionsr   django.shortcutsr	   django.urlsr
   django.utilsr   allauth.accountr   r   allauth.core.exceptionsr   allauth.core.internal.httpkitr   allauth.socialaccount.adapterr   allauth.socialaccount.helpersr   r   allauth.socialaccount.internalr   allauth.socialaccount.modelsr   $allauth.socialaccount.providers.baser   .allauth.socialaccount.providers.base.constantsr   *allauth.socialaccount.providers.base.viewsr   -allauth.socialaccount.providers.oauth2.clientr   r   allauth.utilsr   r   r   ra   ro   rr   r_   r)   r'   <module>r      s{     % !   3 #  ! < 9 : 5 4 4 B D D @: :z $+j- +
X Xr)   