o
    gf)                     @   s   d Z ddl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
 ddlmZmZ G dd	 d	e
ZG d
d de	ZdeiZdS )zw
ExactTarget OAuth support.
Support Authentication from IMH using JWT token and pre-shared key.
Requires package pyjwt
    N)	timedeltadatetime)authenticatesetting)
BaseOAuth2OAuthBackend)
AuthFailedAuthCanceledc                   @   s8   e Zd ZdZdZg Zdd Zdd Zdd Zd	d
 Z	dS )ExactTargetBackendz.ExactTarget HubExchange authentication backendexacttargetc                 C   sL   | dr"|d }| di  d}|r$d|v r d|d  |d< |S dS dS )z2Use the email address of the user, suffixed by _ettokenrequestuseremailz%s_etusernameNget)selfresponser   r    r   i/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_auth/backends/contrib/exacttarget.pyget_user_details   s   
z#ExactTargetBackend.get_user_detailsc           
      C   s   | d| d| d| d| dd}| ddd	 }t t|d
 }|tddd  |d< | drV|d }| di  d}	|	rV|	 d|d< |	 d|d< |S )z7
        Load extra details from the JWT token
        r   idinternalOauthToken
oauthTokenrefreshToken)r   r   r   r   r   	expiresInr      )secondsi     expiresr   r   organizationstackKeystackenterpriseId)r   r   utcnowr   total_seconds)
r   r   uidr   detailsdataexpiresSecondsr!   r   orgr   r   r   
extra_data   s    
zExactTargetBackend.extra_datac                 C   s   d| d S )z$Create a user ID from the ET user IDzexacttarget_%sr   r   )r   r)   r   r   r   r   get_user_id>   s   zExactTargetBackend.get_user_idc                 C   s   dS )NFr   r   r   r   r   uses_redirectB      z ExactTargetBackend.uses_redirectN)
__name__
__module____qualname____doc__name
EXTRA_DATAr   r-   r.   r0   r   r   r   r   r      s    
r   c                       sP   e Zd ZdZeZdZdZ fddZdd Z	dd	 Z
d
d Zedd Z  ZS )ExactTargetAuthz$ExactTarget authentication mechanismEXACTTARGET_UNUSEDEXACTTARGET_APP_SIGNATUREc                    s8   t t| || td\}}}td|||| _d S )Njwt)superr8   __init__impfind_moduleload_moduler;   )r   r   redirectfppathnamedescription	__class__r   r   r=   M   s   zExactTargetAuth.__init__c                 C   s   d S )Nr   r/   r   r   r   auth_urlR   r1   zExactTargetAuth.auth_urlc                 O   sf   | j dr| j dp| j d }t| ||djdi }|s't| d| j|g|R i |S )z2Completes login process, must return user instanceerrorerror_descriptionr   r;   zAuthentication Failed)r*   r   r	   POSTdo_auth)r   argskwargsrH   r   r   r   r   auth_completeU   s   

zExactTargetAuth.auth_completec                 O   sf   |   \}}z	| j||}W n | jjy   t| w |d| dd|i| jjdi t|i |S )Nauthr   r   T)	get_key_and_secretr;   decodeDecodeErrorr
   updateAUTH_BACKENDr6   r   )r   	jwt_tokenrL   rM   dummyclient_secretdecodedr   r   r   rK   b   s   zExactTargetAuth.do_authc                 C   s   t dS )z8Return backend enabled status by checking basic settingsr:   r   )clsr   r   r   enabledt   s   zExactTargetAuth.enabled)r2   r3   r4   r5   r   rT   SETTINGS_KEY_NAMESETTINGS_SECRET_NAMEr=   rG   rN   rK   classmethodrZ   __classcell__r   r   rE   r   r8   F   s    r8   r   )r5   r>   r   r   django.contrib.authr   social_auth.utilsr   social_auth.backendsr   r   social_auth.exceptionsr	   r
   r   r8   BACKENDSr   r   r   r   <module>   s    75