o
    &zhs                     @   s  d dl Z d dlZd dl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mZ d dlmZmZ d dl m!Z! d dl"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( e)e*Z+G dd dZ,e
edde
eddG dd de,eZ-e-. Z/e
eddG dd de,eZ0e0. Z1e
edde
eddG dd de,eZ2e2. Z3e
eddG dd de,eZ4e4. Z5e
eddG dd de,e!Z6e6. Z7dS )     N)HttpRequestHttpResponseHttpResponseRedirectJsonResponse)reverse)method_decorator)View)csrf_exempt)OneLogin_Saml2_Settings)OneLogin_Saml2_Error)get_adapter)login_not_required)httpkit)complete_social_loginrender_authentication_error)	AuthErrorAuthProcess)BaseLoginView)LoginSession   )
build_authbuild_saml_configdecode_relay_stateget_app_or_404c                   @   s   e Zd Zdd Zdd ZdS )SAMLViewMixinc                 C   s   t | j|}|S N)r   requestselforganization_slugapp r!   e/var/www/html/kangema/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/saml/views.pyget_app   s   zSAMLViewMixin.get_appc                 C   s   |  |}|| jS r   )r#   get_providerr   r   r!   r!   r"   r$   #   s   
zSAMLViewMixin.get_providerN)__name__
__module____qualname__r#   r$   r!   r!   r!   r"   r      s    r   dispatch)namec                   @      e Zd Zdd ZdS )ACSViewc                 C   sH   t dd|id}t|}t|dd}|jdt|i || |S )Nsaml_finish_acsr   )kwargssaml_acs_sessionsaml-acs-sessionr   )r   r   r   storeupdater   serialize_requestsave)r   r   r   urlresponseacs_sessionr!   r!   r"   r(   +   s   
zACSView.dispatchNr%   r&   r'   r(   r!   r!   r!   r"   r+   (       r+   c                   @   r*   )FinishACSViewc              
   C   s  |  |}t|dd}d }|jd}|rt|t }|  |s,t	d t
||S t||}d }g }	z|jd d W n' tjyL   dg}	d}Y n tyd }
 zdg}	t|
}W Y d }
~
nd }
~
ww |	sk| }	|	r| pr|}t	d	d
|	|f  t
|||	|ddS | st
||tjdS |||}| }|r||||_n-|jjdi dd}|rt	d t
||S t|jd}tj |jd< |r||jd< t!||S )Nr.   r/   r   z0Unable to finish login, SAML ACS session missing)
request_idinvalid_responsezInvalid responseerrorz*Error processing SAML ACS response: %s: %s, )saml_errorssaml_last_error_reason)extra_context)r<   advancedreject_idp_initiated_ssoTzIdP initiated SSO rejected
RelayStateprocessnext)"r$   r   r0   getr   deserialize_requestr   deleteloggerr<   r   r   process_responsebinasciiErrorr   str
get_errorsget_last_error_reasonjoinis_authenticatedr   	CANCELLEDsociallogin_from_response get_last_response_in_response_tounstash_redirect_statestater    settingsr   POSTr   LOGINr   )r   r   r   providerr6   acs_requestacs_request_dataautherror_reasonerrorseloginstate_idrejectnext_urlr!   r!   r"   r(   <   st   







zFinishACSView.dispatchNr7   r!   r!   r!   r"   r9   :       r9   c                   @   r*   )SLSViewc              
      s   |  |}t| j|}jj}t  fdd}d }d }z
|j|| d}W n ty> }	 z
t|	}W Y d }	~	nd }	~	ww |	 }
|
rb|
 pJ|}tdd|
|f  t|dd}d|_|S |si }t|S )	Nc                      s      d S r   )logoutr!   account_adapterr   r!   r"   force_logout   s   z&SLSView.dispatch.<locals>.force_logout)delete_session_cbkeep_local_sessionz*Error processing SAML SLS response: %s: %sr=   z
text/plain)content_typei  )r$   r   r   userrQ   get_account_adapterprocess_slor   rM   rN   rO   rI   r<   rP   r   status_codeget_logout_redirect_urlr   )r   r   r   rZ   r]   should_logoutrj   redirect_tor^   r`   r_   respr!   rh   r"   r(      s:   


zSLSView.dispatchNr7   r!   r!   r!   r"   rf      r8   rf   c                   @   r*   )MetadataViewc           	      C   sh   |  |}t| j|jj|}t|dd}| }||}t|dkr.t	d|i}d|_
|S t|ddS )NT)rW   sp_validation_onlyr   r_   i  ztext/xml)contentrm   )r$   r   r   r    rW   r
   get_sp_metadatavalidate_metadatalenr   rq   r   )	r   r   r   rZ   configsaml_settingsmetadatar_   ru   r!   r!   r"   r(      s   

zMetadataView.dispatchNr7   r!   r!   r!   r"   rv      re   rv   c                   @   r*   )	LoginViewc                 C   s   |  | jd }|| jS )Nr   )r#   r-   r$   r   )r   r    r!   r!   r"   r$      s   zLoginView.get_providerN)r%   r&   r'   r$   r!   r!   r!   r"   r      re   r   )8rK   loggingdjango.httpr   r   r   r   django.urlsr   django.utils.decoratorsr   django.viewsr   django.views.decorators.csrfr	   onelogin.saml2.authr
   onelogin.saml2.errorsr   allauth.account.adapterr   ro   #allauth.account.internal.decoratorsr   allauth.core.internalr   allauth.socialaccount.helpersr   r   .allauth.socialaccount.providers.base.constantsr   r   *allauth.socialaccount.providers.base.viewsr   allauth.socialaccount.sessionsr   utilsr   r   r   r   	getLoggerr%   rI   r   r+   as_viewacsr9   
finish_acsrf   slsrv   r~   r   ra   r!   r!   r!   r"   <module>   sH    




D

!

