
    $g                        d Z ddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
mZmZmZmZmZ  G d de          Z G d	 d
e          Z G d de
          Z G d de          Z G d de          Z G d de          ZdS )z!Django ORM models for Social Auth    N)FieldDoesNotExist)routertransaction)IntegrityError)AssociationMixinBaseStorage	CodeMixin
NonceMixinPartialMixin	UserMixinc                   2    e Zd ZdZed             Zd fd	Zedd            Zed             Zed             Z	ed             Z
ed	             Zed
             Zedd            Zed             Zed             Zedd            Zed             Z xZS )DjangoUserMixinzSocial Auth association modelc                 .    |                                  d S N)saveclsusers     U/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/social_django/storage.pychangedzDjangoUserMixin.changed   s    		    Nc                 v    t                                          |          r|                                  d S d S r   )superset_extra_datar   )self
extra_data	__class__s     r   r   zDjangoUserMixin.set_extra_data   s8    77!!*-- 	IIKKKKK	 	r   c                    || j                             |          }n| j                             |          }|                    |          }t          |d          r|                                }nd}|p|                                S )Nidproviderr   has_usable_passwordT)objectsexcludefilterhasattrr$   exists)r   r   backend_nameassociation_idqsvalid_passwords         r   allowed_to_disconnectz%DjangoUserMixin.allowed_to_disconnect   s    %$$$77BB$$l$;;BYYDY!!4.// 	"!5577NN!N,,r   c                 .    |                                  d S r   delete)r   entrys     r   
disconnectzDjangoUserMixin.disconnect+       r   c                 H    t          |                                 dd          S )NUSERNAME_FIELDusername)getattr
user_model)r   s    r   username_fieldzDjangoUserMixin.username_field/   s    s~~'')9:FFFr   c                     d|v r*|                     d          ||                                 <    |                                 j        j        |i |                                S )z
        Return True/False if a User instance exists with the given arguments.
        Arguments are directly passed to filter() manager method.
        r7   )popr:   r9   _default_managerr'   r)   r   argskwargss      r   user_existszDjangoUserMixin.user_exists3   sb     +1::j+A+AF3%%''(7s~~07HHHOOQQQr   c                 H    t          ||                                 d           S r   )r8   r:   r   s     r   get_usernamezDjangoUserMixin.get_username=   s     tS//114888r   c                 p   |                                  }d|v rp||vr|                    d          ||<   nS	 |                                 j                            d           n%# t
          $ r |                    d           Y nw xY w	 t          t          d          rxt          j	        |                                           }t          j
        |          5   |                                 j        j        |i |}d d d            n# 1 swxY w Y   n$ |                                 j        j        |i |}nz# t          $ rm}|                    dd          d|d<   	  |                                 j        j        |i |}n"# |                                 j        $ r |w xY wY d }~nd }~ww xY w|S )Nr7   atomicusingemailT )r:   r<   r9   _meta	get_fieldr   r(   r   r   db_for_writerE   r=   create_userr   getDoesNotExist)r   r?   r@   r:   rG   r   excs          r   rM   zDjangoUserMixin.create_userA   s8   ++--V++)/J)?)?~&&+NN$$*44Z@@@@( + + +JJz*****+	{H-- V
 +CNN,<,<== 'e444  H3>>++<H!' D              
 Es~~''8DdUfUU 	 	 	zz'4((0"$w<s~~''8<dMfMM>>##0   	 	 sf   ,A$ $BB
AD< %D?D< DD< D(D< <
F3F."$FF.F&&F..F3c                     |rd|i}	  |                                  j        j        di |S # |                                  j        $ r Y d S w xY w)Npk )r9   r=   rN   rO   )r   rR   r@   s      r   get_userzDjangoUserMixin.get_usere   sm     	 BZF	83>>##48BB6BBB~~, 	 	 	44	s   #, AAc                 z    |                                  }t          |dd          } |j        j        di |dz   |iS )NEMAIL_FIELDrH   __iexactrS   )r9   r8   r=   r'   )r   rH   r9   email_fields       r   get_users_by_emailz"DjangoUserMixin.get_users_by_emailn   sH    ^^%%
j-AA1z*1VV[:5Mu4UVVVr   c                     t          |t                    st          |          }	 | j                            ||          S # | j        $ r Y d S w xY w)N)r"   uid)
isinstancestrr%   rN   rO   )r   r"   r[   s      r   get_social_authzDjangoUserMixin.get_social_autht   sa    #s## 	c((C	;??H#?>>> 	 	 	44	s   A 
AAc                     | j                             |          }|r|                    |          }|r|                    |          }|S )Nr#   r!   r   r%   r'   )r   r   r"   r    r,   s        r   get_social_auth_for_userz(DjangoUserMixin.get_social_auth_for_user}   sU    [T** 	.H--B 	"b!!B	r   c                 p   t          |t                    st          |          }t          t          d          r_t	          j        |           }t          j        |          5  | j                            |||          }d d d            n# 1 swxY w Y   n| j                            |||          }|S )NrE   rF   )r   r[   r"   )	r\   r]   r(   r   r   rL   rE   r%   create)r   r   r[   r"   rG   social_auths         r   create_social_authz"DjangoUserMixin.create_social_auth   s    #s## 	c((C;)) 		T
 ',,E#%000 X X!k00dh0WWX X X X X X X X X X X X X X X +,,$C(,SSKs   #BBBr   )NN)__name__
__module____qualname____doc__classmethodr   r   r.   r3   r:   rA   rC   rM   rT   rY   r^   ra   re   __classcell__)r   s   @r   r   r      s       ''  [      - - - [-   [ G G [G R R [R 9 9 [9 ! ! [!F    [ W W [W
   [    [   [    r   r   c                   P    e Zd Zed             Zed             Zed             ZdS )DjangoNonceMixinc                 H    | j                             |||          d         S )N)
server_url	timestampsalt   )r%   get_or_create)r   ro   rp   rq   s       r   usezDjangoNonceMixin.use   s0    {((!YT ) 
 

 	r   c                 :    | j                             ||          S )N)ro   rq   )r%   rN   )r   ro   rq   s      r   rN   zDjangoNonceMixin.get   s%    {!  
 
 	
r   c                 .    |                                  d S r   r0   )r   nonces     r   r1   zDjangoNonceMixin.delete   r4   r   N)rf   rg   rh   rj   rt   rN   r1   rS   r   r   rm   rm      sc          [
 
 
 [
   [  r   rm   c                   P    e Zd Zed             Zed             Zed             ZdS )DjangoAssociationMixinc                    	 | j                             ||j                  }n"# | j        $ r  | ||j                  }Y nw xY w	 t	          j        |j                                                  |_        n@# t          $ r3 t	          j	        |j                                                  |_        Y nw xY w|j
        |_
        |j        |_        |j        |_        |                                 d S )N)ro   handle)r%   rN   r{   rO   base64encodebytessecretdecodeAttributeErrorencodestringissuedlifetime
assoc_typer   )r   ro   associationassocs       r   storezDjangoAssociationMixin.store   s    	JKOOz+BTOUUEE 	J 	J 	JC:k6HIIIEEE	J	L!-k.@AAHHJJELL 	L 	L 	L!.{/ABBIIKKELLL	L")$-&1

s!   !$ AA0A8 8:B54B5c                 &     | j         j        |i |S r   r`   r>   s      r   rN   zDjangoAssociationMixin.get   s    !s{!426222r   c                 `    | j                             |                                           d S )N)pk__in)r%   r'   r1   )r   ids_to_deletes     r   removezDjangoAssociationMixin.remove   s-    -007799999r   N)rf   rg   rh   rj   r   rN   r   rS   r   r   ry   ry      sc          [  3 3 [3 : : [: : :r   ry   c                   $    e Zd Zed             ZdS )DjangoCodeMixinc                 \    	 | j                             |          S # | j        $ r Y d S w xY w)N)coder%   rN   rO   )r   r   s     r   get_codezDjangoCodeMixin.get_code   sB    	;???--- 	 	 	44	    
++N)rf   rg   rh   rj   r   rS   r   r   r   r      s-          [  r   r   c                   :    e Zd Zed             Zed             ZdS )DjangoPartialMixinc                 \    	 | j                             |          S # | j        $ r Y d S w xY w)N)tokenr   )r   r   s     r   loadzDjangoPartialMixin.load   sB    	;???/// 	 	 	44	r   c                 `    |                      |          }|r|                                 d S d S r   )r   r1   )r   r   partials      r   destroyzDjangoPartialMixin.destroy   s9    ((5// 	NN	 	r   N)rf   rg   rh   rj   r   r   rS   r   r   r   r      sH          [   [  r   r   c                       e Zd ZeZeZeZe	Z
dS )BaseDjangoStorageN)rf   rg   rh   r   r   rm   rw   ry   r   r   r   rS   r   r   r   r      s"        DE(KDDDr   r   )ri   r|   django.core.exceptionsr   	django.dbr   r   django.db.utilsr   social_core.storager   r   r	   r
   r   r   r   rm   ry   r   r   r   rS   r   r   <module>r      s   ' '  4 4 4 4 4 4 ) ) ) ) ) ) ) ) * * * * * *               D D D D Di D D DN    z   &: : : : :- : : :6    i                   r   