U
    [e!                     @   s   d dl Z d dlZd dl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mZ ddlmZmZmZ G dd	 d	ZG d
d dZdS )    N   )get_backend)DEFAULT_AUTH_PIPELINEDEFAULT_DISCONNECT_PIPELINE)partial_loadpartial_preparepartial_store)OpenIdSessionWrapperOpenIdStore)PARTIAL_TOKEN_SESSION_NAMEmodule_membersetting_namec                   @   s.   e Zd Zdd Zd
ddZdd Zdd	 ZdS )BaseTemplateStrategyc                 C   s
   || _ d S N)strategy)selfr    r   V/var/www/html/services/stratfitenv/lib/python3.8/site-packages/social_core/strategy.py__init__   s    zBaseTemplateStrategy.__init__Nc                 C   s8   |s|st d|pi }|r(| ||S | ||S d S )Nz#Missing template or html parameters)
ValueErrorrender_templaterender_stringr   tplhtmlcontextr   r   r   render   s    zBaseTemplateStrategy.renderc                 C   s   t dd S NImplement in subclassNotImplementedError)r   r   r   r   r   r   r      s    z$BaseTemplateStrategy.render_templatec                 C   s   t dd S r   r   )r   r   r   r   r   r   r      s    z"BaseTemplateStrategy.render_string)NNN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   
	r   c                   @   sp  e Zd ZdZeZdUddZdVd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dd Zdd Zdd ZdWddZdXdd Zd!efd"d#ZdYd$d%Zd&d' ZdZd(d)Zd*d+ Zd[d,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd\d6d7Zd8d9 Z d:d; Z!d<d= Z"d]d?d@Z#dAdB Z$d^dCdDZ%dEdF Z&dGdH Z'd_dIdJZ(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dS )`BaseStrategyZ>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789Nc                 C   s   || _ |p| j| | _d S r   )storageDEFAULT_TEMPLATE_STRATEGYr   )r   r%   r   r   r   r   r   &   s    zBaseStrategy.__init__c              
   C   s\   t ||g}|r$|dt |j| |D ].}z| |W   S  ttfk
rT   Y q(X q(|S )Nr   )r   insertnameget_settingAttributeErrorKeyError)r   r(   defaultbackendnamesr   r   r   setting*   s    zBaseStrategy.settingc                 O   s   | j jj||S r   )r%   usercreate_userr   argskwargsr   r   r   r1   5   s    zBaseStrategy.create_userc                 O   s   | j jj||S r   )r%   r0   get_userr2   r   r   r   r5   8   s    zBaseStrategy.get_userc                 C   s   |  || | |S r   )session_setsession_getr   r(   valuer   r   r   session_setdefault;   s    zBaseStrategy.session_setdefaultc                 C   s   t | |i S r   )r	   r:   r   r(   r   r   r   openid_session_dict?   s    z BaseStrategy.openid_session_dictc                 C   s   |S r   r   r   valr   r   r   to_session_valueO   s    zBaseStrategy.to_session_valuec                 C   s   |S r   r   r=   r   r   r   from_session_valueR   s    zBaseStrategy.from_session_valuec                 O   s   t | ||f||S r   )r   r   Z	next_stepr-   r3   r4   r   r   r   partial_saveU   s    zBaseStrategy.partial_savec                 O   s   t | ||f||S r   )r   rA   r   r   r   r   X   s    zBaseStrategy.partial_preparec                 C   s
   t | |S r   )r   )r   tokenr   r   r   r   [   s    zBaseStrategy.partial_loadc                 C   s.   | j j| | t}||kr*| t d S r   )r%   partialdestroyr7   r   session_pop)r   rC   Zcurrent_token_in_sessionr   r   r   clean_partial_pipeline^   s    
z#BaseStrategy.clean_partial_pipelinec                 C   s   t | S r   )r
   r   r   r   r   openid_stored   s    zBaseStrategy.openid_storec                 C   s   |  dt|S )NZPIPELINE)r/   r   r   r-   r   r   r   get_pipelineg   s    zBaseStrategy.get_pipelinec                 C   s   |  dt|S )NZDISCONNECT_PIPELINE)r/   r   rJ   r   r   r   get_disconnect_pipelinej   s    z$BaseStrategy.get_disconnect_pipeline   c              	      sz   zt   W nP tk
r\   | dd}t   t  | }t t|	 
  Y nX d fddt|D S )NZ
SECRET_KEY c                    s   g | ]}t  qS r   )randomchoice).0icharsr   r   
<listcomp>u   s     z.BaseStrategy.random_string.<locals>.<listcomp>)rO   SystemRandomr    r/   getstatetimeseedhashlibsha256encodedigestjoinrange)r   lengthrT   keyrY   r   rS   r   random_stringm   s    zBaseStrategy.random_stringc                 C   s(   |  |}|r$| dr$|dd}|S )NZREDIRECT_IS_HTTPSzhttp://zhttps://)build_absolute_urir/   replace)r   pathurir   r   r   absolute_uriw   s    
zBaseStrategy.absolute_uric                 C   s   dS )zReturn current languagerN   r   rH   r   r   r   get_language}   s    zBaseStrategy.get_languagec                 C   s2   |  d}t|}| jj|}|| ||| |S )NZEMAIL_VALIDATION_FUNCTION)r/   r   r%   codeZ	make_code)r   r-   emailZpartial_tokenZemail_validationZ
send_emailri   r   r   r   send_email_validation   s
    
z"BaseStrategy.send_email_validationc                 C   sH   | j j|}|r|j|kr dS |j|kr.dS |jr8dS |  dS d S )NFT)r%   ri   get_coderj   Zverifiedverify)r   rj   ri   Zverification_coder   r   r   validate_email   s    
zBaseStrategy.validate_emailc                 C   s   | j |||S )z4Render given template or raw html with given context)r   r   r   r   r   r   render_html   s    zBaseStrategy.render_htmlc                 O   s6   | |d< | j |d< ||d< | j||\}}|j||S )zJTrigger the authentication mechanism tied to the current
        frameworkr   r%   r-   )r%   clean_authenticate_argsauthenticate)r   r-   r3   r4   r   r   r   rq      s
    
zBaseStrategy.authenticatec                 O   s   ||fS )zJTake authenticate arguments and return a "cleaned" version
        of themr   r2   r   r   r   rp      s    z$BaseStrategy.clean_authenticate_argsc                 C   s   |  dg S )zReturn configured backendsZAUTHENTICATION_BACKENDS)r/   rH   r   r   r   get_backends   s    zBaseStrategy.get_backendsc                 C   s   t |  |S )z!Return a configured backend class)r   rr   r;   r   r   r   get_backend_class   s    zBaseStrategy.get_backend_classc                 O   s"   |  |}|| f|d|i|S )z$Return a configured backend instanceredirect_uri)rs   )r   r(   rt   r3   r4   Backendr   r   r   r      s    
zBaseStrategy.get_backendc                 C   s   t ddS )z+Return a response redirect to the given URLr   Nr   )r   urlr   r   r   redirect   s    zBaseStrategy.redirectc                 C   s   t ddS )z#Return value for given setting namer   Nr   r;   r   r   r   r)      s    zBaseStrategy.get_settingc                 C   s   t ddS )z'Return HTTP response with given contentr   Nr   )r   contentr   r   r   r      s    zBaseStrategy.htmlTc                 C   s   t ddS )z)Return current request data (POST or GET)r   Nr   )r   merger   r   r   request_data   s    zBaseStrategy.request_datac                 C   s   t ddS )zReturn current host valuer   Nr   rH   r   r   r   request_host   s    zBaseStrategy.request_hostc                 C   s   t ddS )z"Return session value for given keyr   Nr   )r   r(   r,   r   r   r   r7      s    zBaseStrategy.session_getc                 C   s   t ddS )zSet session value for given keyr   Nr   r8   r   r   r   r6      s    zBaseStrategy.session_setc                 C   s   t ddS )zPop session value for given keyr   Nr   r;   r   r   r   rF      s    zBaseStrategy.session_popc                 C   s   t ddS )z-Build absolute URI with given (optional) pathr   Nr   )r   re   r   r   r   rc      s    zBaseStrategy.build_absolute_uric                 C   s   t ddS )zIs the request using HTTPS?r   Nr   rH   r   r   r   request_is_secure   s    zBaseStrategy.request_is_securec                 C   s   t ddS )zpath of the current requestr   Nr   rH   r   r   r   request_path   s    zBaseStrategy.request_pathc                 C   s   t ddS )zPort in use for this requestr   Nr   rH   r   r   r   request_port   s    zBaseStrategy.request_portc                 C   s   t ddS )zRequest GET datar   Nr   rH   r   r   r   request_get   s    zBaseStrategy.request_getc                 C   s   t ddS )zRequest POST datar   Nr   rH   r   r   r   request_post   s    zBaseStrategy.request_post)NN)NN)N)N)N)N)NNN)N)T)N)N).r!   r"   r#   ZALLOWED_CHARSr   r&   r   r/   r1   r5   r:   r<   r?   r@   rB   r   r   rG   rI   rK   rL   rb   rg   rh   rk   rn   ro   rq   rp   rr   rs   r   rw   r)   r   rz   r{   r7   r6   rF   rc   r|   r}   r~   r   r   r   r   r   r   r$       sV   







	



r$   )rZ   rO   rX   Zbackends.utilsr   Zpipeliner   r   Zpipeline.utilsr   r   r   storer	   r
   utilsr   r   r   r   r$   r   r   r   r   <module>   s   