o
    |f!                     @   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   U/var/www/html/humari/django-venv/lib/python3.10/site-packages/social_core/strategy.py__init__      
zBaseTemplateStrategy.__init__Nc                 C   s4   |s|st d|pi }|r| ||S | ||S )Nz#Missing template or html parameters)
ValueErrorrender_templaterender_stringr   tplhtmlcontextr   r   r   render   s   zBaseTemplateStrategy.renderc                 C      t dNImplement in subclassNotImplementedError)r   r   r   r   r   r   r         z$BaseTemplateStrategy.render_templatec                 C   r   r   r!   )r   r   r   r   r   r   r      r#   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dUd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dVddZdVdd Zd!efd"d#ZdVd$d%Zd&d' ZdVd(d)Zd*d+ ZdWd,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 ZdVd6d7Zd8d9 Z d:d; Z!d<d= Z"dXd?d@Z#dAdB Z$dVdCdDZ%dEdF Z&dGdH Z'dVdIdJZ(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dS )YBaseStrategy>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   sX   t ||g}|r|dt |j| |D ]}z| |W   S  ttfy)   Y qw |S )Nr   )r   insertnameget_settingAttributeErrorKeyError)r   r-   defaultbackendnamesr   r   r   setting*   s   zBaseStrategy.settingc                 O      | j jj|i |S r   )r*   usercreate_userr   argskwargsr   r   r   r7   5      zBaseStrategy.create_userc                 O   r5   r   )r*   r6   get_userr8   r   r   r   r<   8   r;   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	   rA   r   r-   r   r   r   openid_session_dict?   s   z BaseStrategy.openid_session_dictc                 C      |S r   r   r   valr   r   r   to_session_valueO      zBaseStrategy.to_session_valuec                 C   rD   r   r   rE   r   r   r   from_session_valueR   rH   zBaseStrategy.from_session_valuec                 O      t | ||g|R i |S r   )r   r   	next_stepr2   r9   r:   r   r   r   partial_saveU      zBaseStrategy.partial_savec                 O   rJ   r   )r   rK   r   r   r   r   X   rN   zBaseStrategy.partial_preparec                 C   s
   t | |S r   )r   )r   tokenr   r   r   r   [   r   zBaseStrategy.partial_loadc                 C   s2   | j j| | t}||kr| t d S d S r   )r*   partialdestroyr>   r   session_pop)r   rO   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   r#   zBaseStrategy.openid_storec                 C      |  dt|S )NPIPELINE)r4   r   r   r2   r   r   r   get_pipelineg      zBaseStrategy.get_pipelinec                 C   rW   )NDISCONNECT_PIPELINE)r4   r   rY   r   r   r   get_disconnect_pipelinej   r[   z$BaseStrategy.get_disconnect_pipeline   c              	      sx   zt   W n' ty-   | dd}t   t  | }t t|	 
  Y nw d fddt|D S )N
SECRET_KEY c                    s   g | ]}t  qS r   )randomchoice).0icharsr   r   
<listcomp>u   s    z.BaseStrategy.random_string.<locals>.<listcomp>)ra   SystemRandomr"   r4   getstatetimeseedhashlibsha256encodedigestjoinrange)r   lengthrf   keyrk   r   re   r   random_stringm   s   zBaseStrategy.random_stringc                 C   s(   |  |}|r| dr|dd}|S )NREDIRECT_IS_HTTPSzhttp://zhttps://)build_absolute_urir4   replace)r   pathurir   r   r   absolute_uriw   s   
zBaseStrategy.absolute_uric                 C   s   dS )zReturn current languager`   r   rU   r   r   r   get_language}   s   zBaseStrategy.get_languagec                 C   s2   |  d}t|}| jj|}|| ||| |S )NEMAIL_VALIDATION_FUNCTION)r4   r   r*   code	make_code)r   r2   emailpartial_tokenemail_validation
send_emailr}   r   r   r   send_email_validation   s
   
z"BaseStrategy.send_email_validationc                 C   sD   | j j|}|r|j|krdS |j|krdS |jrdS |  dS )NFT)r*   r}   get_coder   verifiedverify)r   r   r}   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   s>   | |d< | j |d< ||d< | j|i |\}}|j|i |S )zJTrigger the authentication mechanism tied to the current
        frameworkr   r*   r2   )r*   clean_authenticate_argsauthenticate)r   r2   r9   r:   r   r   r   r      s
   
zBaseStrategy.authenticatec                 O   s   ||fS )zJTake authenticate arguments and return a "cleaned" version
        of themr   r8   r   r   r   r      s   z$BaseStrategy.clean_authenticate_argsc                 C   s   |  dg S )zReturn configured backendsAUTHENTICATION_BACKENDS)r4   rU   r   r   r   get_backends   s   zBaseStrategy.get_backendsc                 C   s   t |  |S )z!Return a configured backend class)r   r   rB   r   r   r   get_backend_class   s   zBaseStrategy.get_backend_classc                 O   s$   |  |}|| g|R d|i|S )z$Return a configured backend instanceredirect_uri)r   )r   r-   r   r9   r:   Backendr   r   r   r      s   
zBaseStrategy.get_backendc                 C   r   )z+Return a response redirect to the given URLr    r!   )r   urlr   r   r   redirect      zBaseStrategy.redirectc                 C   r   )z#Return value for given setting namer    r!   rB   r   r   r   r.      r   zBaseStrategy.get_settingc                 C   r   )z'Return HTTP response with given contentr    r!   )r   contentr   r   r   r      r   zBaseStrategy.htmlTc                 C   r   )z)Return current request data (POST or GET)r    r!   )r   merger   r   r   request_data   r   zBaseStrategy.request_datac                 C   r   )zReturn current host valuer    r!   rU   r   r   r   request_host   r   zBaseStrategy.request_hostc                 C   r   )z"Return session value for given keyr    r!   )r   r-   r1   r   r   r   r>      r   zBaseStrategy.session_getc                 C   r   )zSet session value for given keyr    r!   r?   r   r   r   r=      r   zBaseStrategy.session_setc                 C   r   )zPop session value for given keyr    r!   rB   r   r   r   rR      r   zBaseStrategy.session_popc                 C   r   )z-Build absolute URI with given (optional) pathr    r!   )r   rx   r   r   r   rv      r   zBaseStrategy.build_absolute_uric                 C   r   )zIs the request using HTTPS?r    r!   rU   r   r   r   request_is_secure   r   zBaseStrategy.request_is_securec                 C   r   )zpath of the current requestr    r!   rU   r   r   r   request_path   r   zBaseStrategy.request_pathc                 C   r   )zPort in use for this requestr    r!   rU   r   r   r   request_port   r   zBaseStrategy.request_portc                 C   r   )zRequest GET datar    r!   rU   r   r   r   request_get   r   zBaseStrategy.request_getc                 C   r   )zRequest POST datar    r!   rU   r   r   r   request_post   r   zBaseStrategy.request_post)NNr   r$   )T).r%   r&   r'   ALLOWED_CHARSr   r+   r   r4   r7   r<   rA   rC   rG   rI   rM   r   r   rT   rV   rZ   r]   rt   rz   r{   r   r   r   r   r   r   r   r   r   r.   r   r   r   r>   r=   rR   rv   r   r   r   r   r   r   r   r   r   r(       sX    







	



r(   )rl   ra   rj   backends.utilsr   pipeliner   r   pipeline.utilsr   r   r   storer	   r
   utilsr   r   r   r   r(   r   r   r   r   <module>   s    