U
    [be                     @   s   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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dZG dd deZG dd deZdS )    )settings)authenticate)ContentType)ModelHttpResponse)redirectresolve_url)TemplateDoesNotExistenginesloaderget_random_string)	force_str)Promiseget_language)BaseStrategyBaseTemplateStrategyNc                 C   s   t d |}|j|| dS )zOTake a template in the form of a string and render it for the
    given contextdjangocontextrequest)r   Zfrom_stringrender)r   htmlr   template r   X/var/www/html/services/stratfitenv/lib/python3.8/site-packages/social_django/strategy.pyrender_template_string   s    r   c                   @   s   e Zd Zdd Zdd ZdS )DjangoTemplateStrategyc                 C   s   t |}|j|| jjdS )Nr   )r   get_templater   strategyr   )selftplr   r   r   r   r   render_template   s    
z&DjangoTemplateStrategy.render_templatec                 C   s   t | jj||S N)r   r!   r   )r"   r   r   r   r   r   render_string   s    z$DjangoTemplateStrategy.render_stringN)__name__
__module____qualname__r$   r&   r   r   r   r   r      s   r   c                       s   e Zd ZeZd2 fdd	Zdd Zd3ddZd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zd4ddZdd Zdd Zd5dd Zd!d" Zd#d$ Zd%d& Zd6d'd(Zd)ejfd*d+Zd,d- Zd.d/ Zd0d1 Z  ZS )7DjangoStrategyNc                    s(   || _ |r|jni | _t || d S r%   )r   sessionsuper__init__)r"   storager   r#   	__class__r   r   r-   "   s    zDjangoStrategy.__init__c                 C   s2   t t|}|dr.t|tr&t|}t|}|S )NZ_URL)getattrr   endswith
isinstancer   r   r	   r"   namevaluer   r   r   get_setting'   s    


zDjangoStrategy.get_settingTc                 C   sL   | j s
i S |r*| j j }|| j j n| j jdkr@| j j}n| j j}|S )NPOST)r   GETcopyupdater8   method)r"   mergedatar   r   r   request_data0   s    
zDjangoStrategy.request_datac                 C   s   | j r| j  S d S r%   )r   get_hostr"   r   r   r   request_host<   s    zDjangoStrategy.request_hostc                 C   s
   | j  S )zIs the request using HTTPS?)r   Z	is_securerA   r   r   r   request_is_secure@   s    z DjangoStrategy.request_is_securec                 C   s   | j jS )zpath of the current request)r   pathrA   r   r   r   request_pathD   s    zDjangoStrategy.request_pathc                 C   s
   | j  S )zPort in use for this request)r   Zget_portrA   r   r   r   request_portH   s    zDjangoStrategy.request_portc                 C   s   | j j S )zRequest GET data)r   r9   r:   rA   r   r   r   request_getL   s    zDjangoStrategy.request_getc                 C   s   | j j S )zRequest POST data)r   r8   r:   rA   r   r   r   request_postP   s    zDjangoStrategy.request_postc                 C   s   t |S r%   )r   )r"   urlr   r   r   r   T   s    zDjangoStrategy.redirectc                 C   s   t |ddS )Nztext/html;charset=UTF-8)content_typer   )r"   contentr   r   r   r   W   s    zDjangoStrategy.htmlc              	   C   s`   |s|st d|pi }zt|}|j|| jdW S  ttfk
rZ   t| j|| Y S X d S )Nz#Missing template or html parametersr   )
ValueErrorr   r    r   r   	TypeErrorr
   r   )r"   r#   r   r   r   r   r   r   render_htmlZ   s    
zDjangoStrategy.render_htmlc                 O   s$   | |d< | j |d< ||d< t||S )Nr!   r.   backend)r.   r   )r"   rO   argskwargsr   r   r   r   d   s    
zDjangoStrategy.authenticatec                 O   s   ||d< ||fS )Nr   r   )r"   r   rP   rQ   r   r   r   clean_authenticate_argsj   s    z&DjangoStrategy.clean_authenticate_argsc                 C   s   | j ||S r%   )r+   get)r"   r5   defaultr   r   r   session_geto   s    zDjangoStrategy.session_getc                 C   s"   || j |< t| j drd| j _d S )NmodifiedT)r+   hasattrrV   r4   r   r   r   session_setr   s    
zDjangoStrategy.session_setc                 C   s   | j |d S r%   )r+   pop)r"   r5   r   r   r   session_popw   s    zDjangoStrategy.session_popc                 C   s   | j ||S r%   )r+   
setdefaultr4   r   r   r   session_setdefaultz   s    z!DjangoStrategy.session_setdefaultc                 C   s   | j r| j |S |S d S r%   )r   build_absolute_uri)r"   rD   r   r   r   r]   }   s    z!DjangoStrategy.build_absolute_uri   c                 C   s
   t ||S r%   r   )r"   lengthcharsr   r   r   random_string   s    zDjangoStrategy.random_stringc                 C   s$   t |tr |jtj|jd}|S )zConverts values that are instance of Model to a dictionary
        with enough information to retrieve the instance back later.)pkctype)r3   r   rb   r   objectsZget_for_model)r"   valr   r   r   to_session_value   s    
zDjangoStrategy.to_session_valuec                 C   sH   t |trDd|krDd|krDtj|d }| }|jj|d d}|S )z9Converts back the instance saved by self._ctype function.rb   rc   )rb   )r3   dictr   rd   Z
get_for_idZmodel_classZ_default_managerrS   )r"   re   rc   Z
ModelClassr   r   r   from_session_value   s
    z!DjangoStrategy.from_session_valuec                 C   s   t  S )zReturn current languager   rA   r   r   r   r      s    zDjangoStrategy.get_language)NN)T)NNN)N)N)r'   r(   r)   r   ZDEFAULT_TEMPLATE_STRATEGYr-   r7   r?   rB   rC   rE   rF   rG   rH   r   r   rN   r   rR   rU   rX   rZ   r\   r]   r   ZALLOWED_CHARSra   rf   rh   r   __classcell__r   r   r/   r   r*      s0   	




r*   )N)Zdjango.confr   Zdjango.contrib.authr   Z"django.contrib.contenttypes.modelsr   Zdjango.db.modelsr   Zdjango.httpr   Zdjango.shortcutsr   r	   Zdjango.templater
   r   r   Zdjango.utils.cryptor   Zdjango.utils.encodingr   Zdjango.utils.functionalr   Zdjango.utils.translationr   Zsocial_core.strategyr   r   r   r   r*   r   r   r   r   <module>   s   
	