
    $g!                         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	          Z G 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                   (    e Zd Zd ZddZd Zd ZdS )BaseTemplateStrategyc                     || _         d S N)strategy)selfr   s     T/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/social_core/strategy.py__init__zBaseTemplateStrategy.__init__   s         Nc                     |s|st          d          |pi }|r|                     ||          S |                     ||          S )Nz#Missing template or html parameters)
ValueErrorrender_templaterender_stringr   tplhtmlcontexts       r   renderzBaseTemplateStrategy.render   s_     	D4 	DBCCC-R 	5''W555%%dG444r   c                      t          d          NImplement in subclassNotImplementedError)r   r   r   s      r   r   z$BaseTemplateStrategy.render_template       !"9:::r   c                      t          d          r"   r$   )r   r   r   s      r   r   z"BaseTemplateStrategy.render_string   r&   r   NNN)__name__
__module____qualname__r   r    r   r    r   r   r   r      sU        ! ! !5 5 5 5; ; ;; ; ; ; ;r   r   c                   "   e Zd ZdZeZd-dZd-dZd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd.dZd.dZdefdZd.dZd Zd.dZd Zd/dZd Zd Zd Zd Zd.dZd Z d Z!d  Z"d0d"Z#d# Z$d.d$Z%d% Z&d& Z'd.d'Z(d( Z)d) Z*d* Z+d+ Z,d, Z-dS )1BaseStrategy>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789Nc                 B    || _          |p| j        |           | _        d S r   )storageDEFAULT_TEMPLATE_STRATEGYr   )r   r1   r   s      r   r   zBaseStrategy.__init__&   s&    9C9494@@r   c                     t          |          |g}|r)|                    dt          |j        |                     |D ]0}	 |                     |          c S # t          t
          f$ r Y -w xY w|S )Nr   )r   insertnameget_settingAttributeErrorKeyError)r   r5   defaultbackendnamess        r   settingzBaseStrategy.setting*   s    d##T* 	>LLLt<<=== 	 	D''-----"H-   s   AA-,A-c                 0     | j         j        j        |i |S r   )r1   usercreate_userr   argskwargss      r   r?   zBaseStrategy.create_user5   s    ,t| ,d=f===r   c                 0     | j         j        j        |i |S r   )r1   r>   get_userr@   s      r   rD   zBaseStrategy.get_user8   s    )t| )4:6:::r   c                 X    |                      ||           |                     |          S r   )session_setsession_getr   r5   values      r   session_setdefaultzBaseStrategy.session_setdefault;   s,    u%%%%%%r   c                 H    t          |                     |i                     S r   )r
   rJ   r   r5   s     r   openid_session_dictz BaseStrategy.openid_session_dict?   s"     $D$;$;D"$E$EFFFr   c                     |S r   r,   r   vals     r   to_session_valuezBaseStrategy.to_session_valueO       
r   c                     |S r   r,   rO   s     r   from_session_valuezBaseStrategy.from_session_valueR   rR   r   c                 &    t          | ||g|R i |S r   )r	   r   	next_stepr:   rA   rB   s        r   partial_savezBaseStrategy.partial_saveU   s$    T7IGGGGGGGr   c                 &    t          | ||g|R i |S r   )r   rV   s        r   r   zBaseStrategy.partial_prepareX   s$    tWiI$III&IIIr   c                 "    t          | |          S r   )r   )r   tokens     r   r   zBaseStrategy.partial_load[   s    D%(((r   c                     | j         j                            |           |                     t                    }||k    r|                     t                     d S d S r   )r1   partialdestroyrG   r   session_pop)r   r[   current_token_in_sessions      r   clean_partial_pipelinez#BaseStrategy.clean_partial_pipeline^   s^    $$U+++#'#3#34N#O#O #u,,788888 -,r   c                      t          |           S r   )r   r   s    r   openid_storezBaseStrategy.openid_stored   s    4   r   c                 :    |                      dt          |          S )NPIPELINE)r<   r   r   r:   s     r   get_pipelinezBaseStrategy.get_pipelineg   s    ||J(=wGGGr   c                 :    |                      dt          |          S )NDISCONNECT_PIPELINE)r<   r   rg   s     r   get_disconnect_pipelinez$BaseStrategy.get_disconnect_pipelinej   s    ||13NPWXXXr      c                    	 t          j                     n# t          $ r |                     dd          }t          j                     t          j                     | }t          j        t          j        |	                                          
                                           Y nw xY wd                    fdt          |          D                       S )N
SECRET_KEY c                 8    g | ]}t          j                  S r,   )randomchoice).0icharss     r   
<listcomp>z.BaseStrategy.random_string.<locals>.<listcomp>u   s#    DDDe,,DDDr   )rq   SystemRandomr%   r<   getstatetimeseedhashlibsha256encodedigestjoinrange)r   lengthru   keyrz   s     `  r   random_stringzBaseStrategy.random_stringm   s    	@!!!!" 	@ 	@ 	@,,|R00Co'';;c;;DKt{{}}55<<>>?????	@ wwDDDDeFmmDDDEEEs    BB.-B.c                     |                      |          }|r+|                     d          r|                    dd          }|S )NREDIRECT_IS_HTTPSzhttp://zhttps://)build_absolute_urir<   replace)r   pathuris      r   absolute_urizBaseStrategy.absolute_uriw   sI    %%d++ 	54<< 344 	5++i44C
r   c                     dS )zReturn current languagero   r,   rc   s    r   get_languagezBaseStrategy.get_language}   s    rr   c                     |                      d          }t          |          }| j        j                            |          } || |||           |S )NEMAIL_VALIDATION_FUNCTION)r<   r   r1   code	make_code)r   r:   emailpartial_tokenemail_validation
send_emailr   s          r   send_email_validationz"BaseStrategy.send_email_validation   sV    <<(CDD"#344
| **511
4$666r   c                     | j         j                            |          }|r|j        |k    rdS |j        |k    rdS |j        rdS |                                 dS )NFT)r1   r   get_coder   verifiedverify)r   r   r   verification_codes       r   validate_emailzBaseStrategy.validate_email   sp     L-66t<<  	$5$:d$B$B5$--5' 	5$$&&&4r   c                 :    | j                             |||          S )z4Render given template or raw html with given context)r   r    r   s       r   render_htmlzBaseStrategy.render_html   s    xsD'222r   c                 d    | |d<   | j         |d<   ||d<    | j        |i |\  }} |j        |i |S )zJTrigger the authentication mechanism tied to the current
        frameworkr   r1   r:   )r1   clean_authenticate_argsauthenticate)r   r:   rA   rB   s       r   r   zBaseStrategy.authenticate   sW     "z Ly#y3t3TDVDDf#w#T4V444r   c                 
    ||fS )zJTake authenticate arguments and return a "cleaned" version
        of themr,   r@   s      r   r   z$BaseStrategy.clean_authenticate_args   s     V|r   c                 .    |                      dg           S )zReturn configured backendsAUTHENTICATION_BACKENDS)r<   rc   s    r   get_backendszBaseStrategy.get_backends   s    ||5r:::r   c                 F    t          |                                 |          S )z!Return a configured backend class)r   r   rL   s     r   get_backend_classzBaseStrategy.get_backend_class   s    4,,..555r   c                 H    |                      |          } || g|R d|i|S )z$Return a configured backend instanceredirect_uri)r   )r   r5   r   rA   rB   Backends         r   r   zBaseStrategy.get_backend   s:    ((..wtHHHH,HHHHr   c                      t          d          )z+Return a response redirect to the given URLr#   r$   )r   urls     r   redirectzBaseStrategy.redirect       !"9:::r   c                      t          d          )z#Return value for given setting namer#   r$   rL   s     r   r6   zBaseStrategy.get_setting   r   r   c                      t          d          )z'Return HTTP response with given contentr#   r$   )r   contents     r   r   zBaseStrategy.html   r   r   Tc                      t          d          )z)Return current request data (POST or GET)r#   r$   )r   merges     r   request_datazBaseStrategy.request_data   r   r   c                      t          d          )zReturn current host valuer#   r$   rc   s    r   request_hostzBaseStrategy.request_host   r   r   c                      t          d          )z"Return session value for given keyr#   r$   )r   r5   r9   s      r   rG   zBaseStrategy.session_get   r   r   c                      t          d          )zSet session value for given keyr#   r$   rH   s      r   rF   zBaseStrategy.session_set   r   r   c                      t          d          )zPop session value for given keyr#   r$   rL   s     r   r_   zBaseStrategy.session_pop   r   r   c                      t          d          )z-Build absolute URI with given (optional) pathr#   r$   )r   r   s     r   r   zBaseStrategy.build_absolute_uri   r   r   c                      t          d          )zIs the request using HTTPS?r#   r$   rc   s    r   request_is_securezBaseStrategy.request_is_secure   r   r   c                      t          d          )zpath of the current requestr#   r$   rc   s    r   request_pathzBaseStrategy.request_path   r   r   c                      t          d          )zPort in use for this requestr#   r$   rc   s    r   request_portzBaseStrategy.request_port   r   r   c                      t          d          )zRequest GET datar#   r$   rc   s    r   request_getzBaseStrategy.request_get   r   r   c                      t          d          )zRequest POST datar#   r$   rc   s    r   request_postzBaseStrategy.request_post   r   r   )NNr   r(   )T).r)   r*   r+   ALLOWED_CHARSr   r2   r   r<   r?   rD   rJ   rM   rQ   rT   rX   r   r   ra   rd   rh   rk   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   rG   rF   r_   r   r   r   r   r   r   r,   r   r   r.   r.       s       N  !5A A A A	 	 	 	> > >; ; ;& & &G G G     H H HJ J J) ) )9 9 9! ! !H H H HY Y Y Y $&] F F F F        
 
 
3 3 3 35 5 5  
; ; ;6 6 6I I I I; ; ;; ; ;; ; ;; ; ; ;; ; ;; ; ; ;; ; ;; ; ;; ; ; ;; ; ;; ; ;; ; ;; ; ;; ; ; ; ;r   r.   )r{   rq   ry   backends.utilsr   pipeliner   r   pipeline.utilsr   r   r	   storer
   r   utilsr   r   r   r   r.   r,   r   r   <module>r      s      ' ' ' ' ' ' H H H H H H H H H H H H H H H H H H 4 4 4 4 4 4 4 4 J J J J J J J J J J; ; ; ; ; ; ; ;(K; K; K; K; K; K; K; K; K; K;r   