o
    &zh;                     @   s(  d dl mZ d dlmZ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mZ d dlmZmZmZ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* d dl+m,Z,m-Z- d dl.m/Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 d dl:m/Z/ d dl;m<Z< d dl=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZDmEZE d dlFmGZGmHZHmIZImJZJ d dlKmLZL d dlMmNZN ee2d d!G d"d# d#e"ZOeOP ZQee$d d!ee&d d!ee2d d!G d$d% d%e(ZReRP ZSee&d d!ee2d d!G d&d' d'e"ZTeTP ZUee&d d!ee	d d!G d(d) d)e"ZVeVP ZWee&d d!ee2d d!G d*d+ d+e"ZXeXP ZYee2d d!G d,d- d-e"ZZeZP Z[ee2d d!G d.d/ d/e"Z\e\P Z]ee&d d!ee2d d!G d0d1 d1e"Z^e^P Z_d2S )3    )
HTTPStatus)ListOptional)REDIRECT_FIELD_NAMEget_user_model)login_required)get_current_site)PermissionDenied)BadSignatureSigner)HttpRequestHttpResponseHttpResponseForbiddenHttpResponseRedirectJsonResponse)CsrfViewMiddleware)render)reverse)method_decorator)	urlencode)View)xframe_options_deny)csrf_exempt)FormView)errors)InvalidScopeErrorOAuth2Error)app_settings)login_not_required)str_to_user_id)jwkkit)add_query_paramsdel_query_params)get_adapter)AuthorizationFormConfirmCodeFormDeviceAuthorizationForm)device_codes)get_device_server
get_server)convert_responseextract_paramsrespond_html_errorrespond_json_error)Client)build_absolute_uridispatch)namec                   @   s&   e Zd Zdd Zdee fddZdS )ConfigurationViewc                 C   sx   t |tdt |tdt |tdt |tdt |tdt |tdt  |  dgdgd	
}t|}d
|d< |S )Nidp:oidc:authorizationzidp:oidc:device_codezidp:oidc:revokezidp:oidc:tokenzidp:oidc:userinfozidp:oidc:jwkspublicRS256)
authorization_endpointdevice_authorization_endpointrevocation_endpointtoken_endpointuserinfo_endpointjwks_uriissuerresponse_types_supportedsubject_types_supported%id_token_signing_alg_values_supported*Access-Control-Allow-Origin)r/   r   r#   
get_issuer_get_response_types_supportedr   )selfrequestdataresponse rH   Q/var/www/html/kangema/venv/lib/python3.10/site-packages/allauth/idp/oidc/views.pyget7   s,   zConfigurationView.getreturnc                 C   s6   t  }tjd D ]	}||  qtt|S )Nresponse_types)	setr.   objectsonlyiteratorupdateget_response_typeslistsorted)rD   rL   clientrH   rH   rI   rC   P   s   z/ConfigurationView._get_response_types_supportedN)__name__
__module____qualname__rJ   r   strrC   rH   rH   rH   rI   r2   5   s    r2   c                       s   e Zd ZeZdej Z fddZ fddZ	de
e fddZd	ed
ee defddZdd Zdd Zdef fddZdd Zdd Z fddZ  ZS )AuthorizationViewzidp/oidc/authorization_form.c           	   
      s   |  |}|r	|S t| j}z%t }|j| \| _| _d| jddv r2|j|d| ji}t	| W S W n2 t
jyK } zt||W  Y d }~S d }~w t
jye } zt||jW  Y d }~S d }~ww | jd jjrq|  S t j|g|R i |S )NnonepromptrH   scopesrE   )_login_requiredr+   rE   r)   validate_authorization_request_scopes_request_inforJ   create_authorization_responser*   r   FatalClientErrorr,   r   r   in_uriredirect_urirU   skip_consent_skip_consentsuper)	rD   rE   argskwargsrG   orequestserver	oresponsee	__class__rH   rI   rJ   a   s6   


zAuthorizationView.getc                    s   |j d}|sttdd |j   S | |}|r|S tdd d|d di }|r4td| S zt	 }|
|\| _| _W n	 tyK   tw |j d	d
krX|  S t j|g|R i |S )NrE   r3   ?c                 S   s   d S NrH   )reqrH   rH   rI   <lambda>   s    z(AuthorizationView.post.<locals>.<lambda>)get_responserH   zCSRF Failed: actiongrant)POSTrJ   r   r   r   r^   r   process_viewr   r   unsign_objectr`   ra   r
   r	   _respond_with_access_deniedrh   post)rD   rE   ri   rj   signed_request_inforG   reasonsignerro   rH   rI   r|   z   s,   
zAuthorizationView.postrK   c                 C   sV   g }|j d}|r| }d|v r| ||S d|v rd S |jjr$d S t d |S )Nr\   loginr[   )GETrJ   split_handle_login_promptuseris_authenticatedr   )rD   rE   promptsr\   rH   rH   rI   r^      s   z!AuthorizationView._login_requiredrE   r   c                 C   sd   | d | }|rt|dd|i}nt|d}i }||t< t|jjr(dnd}t	t||S )Nr   r\    account_reauthenticateaccount_login)
removeget_full_pathr!   joinr"   r   r   r   r   r   )rD   rE   r   next_urlparamspathrH   rH   rI   r      s   

z&AuthorizationView._handle_login_promptc                 C   sJ   | j d j}|  }|dd|d< | jdi |}| s t | |S )NrE   znot-relevant-for-skip-consent)r]   rE   rF   rH   )ra   r]   get_form_kwargs
form_classis_validr	   
form_valid)rD   r]   form_kwargsformrH   rH   rI   rg      s   

zAuthorizationView._skip_consentc                 C   s:   | j d}| j d}ddi}|r||d< tt||S )Nre   stateerroraccess_denied)ra   rJ   r   r!   )rD   re   r   r   rH   rH   rI   r{      s   z-AuthorizationView._respond_with_access_deniedc                    s$   t   }|| j| jjd |S )N)requested_scopesr   )rh   r   rQ   r`   rE   r   )rD   retro   rH   rI   r      s   
z!AuthorizationView.get_form_kwargsc                 C   sT   t  }i }| j}|dd  |d}t|trt||d< || j|f|d< |S )NrE   r\   )	r   ra   poprJ   
isinstancerM   rS   sign_objectr`   )rD   r   r   request_infor\   rH   rH   rI   get_initial   s   

zAuthorizationView.get_initialc              
   C   s   t | j}|jd }d| jji}|| j z|jd}|r#||d< t j|||d}t	| W S  t
jyJ } zt| j|W  Y d }~S d }~ww )Nr]   r   email)r]   credentials)r+   rE   cleaned_datar   rQ   ra   rJ   r)   rb   r*   r   rc   r,   )rD   r   rk   r]   r   r   rm   rn   rH   rH   rI   r      s    


zAuthorizationView.form_validc                    s<   t  jdi |}|tjj| jd dt| jd |S )N	client_idid)rU   siterH   )	rh   get_context_datarQ   r.   rN   rJ   ra   r   rE   )rD   rj   r   ro   rH   rI   r      s   z"AuthorizationView.get_context_data)rV   rW   rX   r$   r   account_settingsTEMPLATE_EXTENSIONtemplate_namerJ   r|   r   r   r^   r   r   rY   r   rg   r{   dictr   r   r   r   __classcell__rH   rH   ro   rI   rZ   Z   s&    

rZ   c                   @   s   e Zd ZdedefddZdS )DeviceCodeViewrE   rK   c              
   O   s   t |}z?t j| \}}}|tjkrB|jd }d }	d|jv r;|jd  }	tjj	|d}
t
|	t
|
 s;t t||	| W n ty^ } zt|jd|jdW  Y d }~S d }~ww t|||S )Nr   scoper   application/jsoncontent_typestatus)r+   r(   $create_device_authorization_responser   OKrx   r   r.   rN   rJ   rM   issubset
get_scopesr   r'   creater   r   jsonstatus_coder*   )rD   rE   ri   rj   rk   headersrF   r   r   r   rU   rn   rH   rH   rI   r|      s*   




zDeviceCodeView.postN)rV   rW   rX   r   r   r|   rH   rH   rH   rI   r      s    r   c                   @   s*   e Zd Zdd ZdededefddZdS )	DeviceAuthorizationViewc                 O   s^   d|j v rt|j }| r| ||jd |j|jS nt }|tdd}t|dt	j
 |S )Ncodeidp:oidc:device_authorization)r   autorization_urlz(idp/oidc/device_authorization_code_form.)r   r%   r   _dispatch_authorizationr   device_coderU   r   r   r   r   )rD   rE   ri   rj   r   contextrH   rH   rI   r0     s*   

z DeviceAuthorizationView.dispatch	user_coder   rU   c           	      C   s   ||d}|j dkr4t|j}| r3|jd dk}tj|j||d |r(d}nd}t||t	j
 |S nt }tdd	 td
|i |d< t|dt	j
 |S )N)r   rU   rx   rv   confirm)r   z(idp/oidc/device_authorization_confirmed.z%idp/oidc/device_authorization_denied.r   rq   r   r   z+idp/oidc/device_authorization_confirm_form.)methodr&   rx   r   r   r'   confirm_or_deny_device_coder   r   r   r   r   r   )	rD   rE   r   r   rU   r   r   r   r   rH   rH   rI   r   .  s>   



z/DeviceAuthorizationView._dispatch_authorizationN)rV   rW   rX   r0   rY   r.   r   rH   rH   rH   rI   r     s    r   c                   @   sB   e Zd Zdd Zddee fddZdee fddZd	d
 ZdS )	TokenViewc                 C   s(   |j dtjjkr| |S | |S )N
grant_type)rx   rJ   r.   	GrantTypeDEVICE_CODE_post_device_token_create_token_response)rD   rE   rH   rH   rI   r|   Y  s   

zTokenView.postNrF   c                    s,   t |}t fddgdj| }t| S )Nc                    s    |  S rr   )
_pre_token)rk   rF   rD   rH   rI   rt   a  s    z2TokenView._create_token_response.<locals>.<lambda>)	pre_token)r+   r)   create_token_responser*   )rD   rE   rF   rk   rm   rH   r   rI   r   ^  s   z TokenView._create_token_responsec                 C   sP   |j tjjkr&|d usJ |d }r||_t jjt|d d|_	d S d S )Nr   r   )pk)
r   r.   r   r   rJ   r   r   rN   r   r   )rD   rk   rF   r   rH   rH   rI   r   e  s   
zTokenView._pre_tokenc              
   C   sR   zt |}W n ty" } zt|jd|jdW  Y d }~S d }~ww | ||S )Nr   r   )r'   poll_device_coder   r   r   r   r   )rD   rE   rF   rn   rH   rH   rI   r   n  s   
zTokenView._post_device_tokenrr   )	rV   rW   rX   r|   r   r   r   r   r   rH   rH   rH   rI   r   U  s
    	r   c                   @      e Zd Zdd ZdS )UserInfoViewc              
   C   sN   t |}zt j| }t| W S  ty& } zt||W  Y d }~S d }~ww rr   )r+   r)   create_userinfo_responser*   r   r-   )rD   rE   rk   rm   rn   rH   rH   rI   rJ     s   
zUserInfoView.getNrV   rW   rX   rJ   rH   rH   rH   rI   r   |      r   c                   @   r   )JwksViewc           	      O   sB   g }t jfD ]}t|\}}|| qtd|i}d|d< |S )Nkeysr@   rA   )r   PRIVATE_KEYr    load_jwk_from_pemappendr   )	rD   rE   ri   rj   r   pemjwk_rG   rH   rH   rI   rJ     s   zJwksView.getNr   rH   rH   rH   rI   r     s    r   c                   @   r   )
RevokeViewc                 O   s   t |}t j| }t| S rr   )r+   r)   create_revocation_responser*   )rD   rE   ri   rj   rk   rm   rH   rH   rI   r|     s   zRevokeView.postN)rV   rW   rX   r|   rH   rH   rH   rI   r     r   r   N)`httpr   typingr   r   django.contrib.authr   r   django.contrib.auth.decoratorsr   django.contrib.sites.shortcutsr   django.core.exceptionsr	   django.core.signingr
   r   django.httpr   r   r   r   r   django.middleware.csrfr   django.shortcutsr   django.urlsr   django.utils.decoratorsr   django.utils.httpr   django.viewsr   $django.views.decorators.clickjackingr   django.views.decorators.csrfr   django.views.generic.editr   oauthlib.oauth2.rfc6749r   oauthlib.oauth2.rfc6749.errorsr   r   allauth.accountr   r   #allauth.account.internal.decoratorsr    allauth.account.internal.userkitr   allauth.core.internalr    allauth.core.internal.httpkitr!   r"   allauth.idp.oidcallauth.idp.oidc.adapterr#   allauth.idp.oidc.formsr$   r%   r&   "allauth.idp.oidc.internal.oauthlibr'   )allauth.idp.oidc.internal.oauthlib.serverr(   r)   (allauth.idp.oidc.internal.oauthlib.utilsr*   r+   r,   r-   allauth.idp.oidc.modelsr.   allauth.utilsr/   r2   as_viewconfigurationrZ   authorizationr   r   r   device_authorizationr   tokenr   	user_infor   jwksr   revokerH   rH   rH   rI   <module>   s~    
!


 



<

"



