
    )Jf+                        d dl Z d dlZd dlZd dlZd dlZd dlZd dl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 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  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z' dZ(ej)        gdz  ej*        ge(dz
  z  z   Z+d!dZ,d Z-d Z.d Z/d!dZ0d Z1d Z2d Z3dZ4d Z5d Z6d Z7d!dZ8d Z9d!dZ:d  Z;dS )"    N)OrderedDict)urlsplit)settings)get_user_model)FieldDoesNotExistImproperlyConfigured)ContentFile)DjangoJSONEncoder)ValidationErrorvalidate_email)	FileField)BinaryField	DateFieldDateTimeField
EmailField	TimeField)	dateparse)force_bytes	force_strapp_settings      c                 "   ddl m}  |            }d }|pd}| D ]}|st          j        dt	          |                    }|                    dd                              d          }t	          t          j        |d|          	                                          }|
                    d          d	         }|                                }t          j        d
d|          }	 |                    |d          } n# t          $ r Y w xY w|pdS )N   get_adapterz[^\w\s@+.-]NFKDasciiignore @r   z\s+_Tshallowuser)account.adapterr   unicodedata	normalizer   encodedecoderesublowersplitstripclean_usernamer   )txtsregexr   adapterusernametxts         P/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/allauth/utils.py_generate_unique_username_baser8   '   s/   ,,,,,,kmmGH#^E   	(3@@??7H55<<WEERVE2x88>>@@AA >>#&&q)>>##6&#x00	--h-EEHE 	 	 	D	vs   $C==
D
	D
c                  v    ddl m}  | .t                      }|j                            |           j        }nd}|S )Nr   USER_MODEL_USERNAME_FIELDr   )account.app_settingsr;   r   _meta	get_field
max_length)r;   Userr?   s      r7   get_username_max_lengthrA   D   sK    ?????? ,Z))*CDDO


    c                     t                      }d                    d t          |          D                       }| d|t          |          z
           |z   S )Nr!   c              3   T   K   | ]#}t          j        t          |                   V  $d S N)randomchoiceUSERNAME_SUFFIX_CHARS).0is     r7   	<genexpr>z.generate_username_candidate.<locals>.<genexpr>Q   sC        45+A.//     rB   r   )rA   joinrangelen)basenamesuffix_lengthr?   suffixs       r7   generate_username_candidaterR   O   sf    (**JWW  9>}9M9M    F A
S[[001F::rB   c                 2   ddl m} t          |           |k    r| g}ng }t          d|t          |           z
            }t	          t                      t                    }t          ||          D ]%}|                    t          | |                     &|S )Nr   )USERNAME_MIN_LENGTH)
r<   rT   rN   maxminrA   MAX_USERNAME_SUFFIX_LENGTHrM   appendrR   )rO   rT   retmin_suffix_lengthmax_suffix_lengthrP   s         r7   generate_username_candidatesr\   W   s    999999
8}}+++jA2S]]BCC3557QRR02CDD I I

.xGGHHHHJrB   c                    ddl m} ddlm} ddlm}  |            }t          | |          }t          |          } ||                     |d          }t          d |D                       }|D ]B}	|	
                                |vr*	 |                    |	d	          c S # t          $ r Y >w xY wCt          d
          )Nr   )filter_users_by_usernamer   r   r:   T)flatc                 6    g | ]}|                                 S  )r.   )rI   ns     r7   
<listcomp>z,generate_unique_username.<locals>.<listcomp>q   s     DDDAaggiiDDDrB   r$   z Unable to find a unique username)allauth.account.utilsr^   r'   r   r<   r;   r8   r\   values_listsetr.   r1   r   NotImplementedError)
r2   r3   r^   r   r;   r4   rO   
candidatesexisting_usernames	candidates
             r7   generate_unique_usernamerk   e   s'   >>>>>>,,,,,,??????kmmG-dE::H-h77J11:>JJ! K   DD1CDDDEE  	??$666--i-FFFFF"    7 @
A
AAs   
B##
B0/B0c                     d }	 | r5t          |            t          |           t                      j        k    r| }n# t          $ r Y nw xY w|S rE   )r   rN   r   r?   r   )emailrY   s     r7   valid_email_or_nonern   |   se    
C 	5!!!5zzZ\\444   Js   7< 
A	A	c                     t          | t                    sJ |                     dd          \  }}t          t	          j        |          |          }|S )N.r   )
isinstancestrrsplitgetattr	importlibimport_module)pathpkgattrrY   s       r7   import_attributerz      sN    dC     C##IC
))#..
5
5CJrB   c                 J    t          | d          st          |           }n| }|S )N__call__)hasattrrz   )path_or_callablerY   s     r7   import_callabler      s/    #Z00 /00JrB   _db_c                 .   i }| j                                         D ]L\  }}|                    d          st          |          r+	 | j                            |          }t          |t                    r"t          t          j
        |                    }nmt          |t                    rX|rVt          |t                    sA|j        t          j
        |                                                              d          d}	 t!          j        |t$                     n/# t&          $ r" |                    |          }t*          |z   }Y nw xY wn# t,          $ r Y nw xY w|||<   Nt!          j        t!          j        |t$                              S )ak  
    Since Django 1.6 items added to the session are no longer pickled,
    but JSON encoded by default. We are storing partially complete models
    in the session (user, account, token, ...). We cannot use standard
    Django serialization, as these are models are not "complete" yet.
    Serialization will start complaining about missing relations et al.
    r#   r   )namecontent)cls)__dict__items
startswithcallabler=   r>   rq   r   r   base64	b64encoder   rr   r   readr+   jsondumpsr
   	TypeErrorget_prep_valueSERIALIZED_DB_FIELD_PREFIXr   loads)instancedatakvfields        r7   serialize_instancer      s    D!''))  1<< 	 		N,,Q//E%-- f.q1122E9--  Z3//  !#)#3AFFHH#=#=#D#DW#M#M A3
1"344444 3 3 3((++.23 ! 	 	 	D	Q:dj+<===>>>s7   B>ED#"E#)EEEE
E E c                     |             }|                                 D ]\  }}d}|                    t                    r|t          t                    d          }d}|	 | j                            |          }t          |t                    rt          j	        |          }n>t          |t                    rt          j        |          }nt          |t                    rt          j        |          }nt          |t                    r/t          t!          j        t          |                              }nt          |t$                    rEt          |t&                    r/t)          t!          j        |d                   |d                   }nK|rI	 |                    |d d           }n0# t,          $ r# t/          d                    |                    w xY wn# t2          $ r Y nw xY wt5          |||           |S )NFTr   r   )r   zKUnable to auto serialize field '{}', custom serialization override required)r   r   r   rN   r=   r>   rq   r   r   parse_datetimer   
parse_timer   
parse_dater   r   r   	b64decoder   dictr	   from_db_value	Exceptionr   formatr   setattr)modelr   rY   r   r   is_db_valuefs          r7   deserialize_instancer      s   
%''C

 ! !1<<233 	#011334AK=K))!,,a// !033AA9-- !,Q//AA9-- !,Q//AA;// #F$4[^^$D$DEEAA9-- !!T** X'(89(F(FQvYWWW  

 OOAtT::$   2??Evayy  
 %   QJs+   #D:G'F65G'6-G##G''
G43G4c                     |dS t                      }|D ]0}	 | j                            |          ||<   !# t          $ r Y -w xY w|                    | j                   || _        dS )a  
    This function is a verbatim copy of django.forms.Form.order_fields() to
    support field ordering below Django 1.9.

    field_order is a list of field names specifying the order. Append fields
    not included in the list in the default order for backward compatibility
    with subclasses not overriding field_order. If field_order is None, keep
    all fields in the order defined in the class. Ignore unknown fields in
    field_order to allow disabling fields in form subclasses without
    redefining ordering.
    N)r   fieldspopKeyErrorupdate)formfield_orderr   keys       r7   set_form_field_orderr      s     ]]F  	+//#..F3KK 	 	 	D	
MM$+DKKKs   6
AAc                    ddl m} | }t          j        st          d          ddlm} |j                                        }t          |          }|j	        r|j
        s#d                    |j        |j        |          }n|}n|                     |          }|s|j        d	k    r|j        }|r!|d
z   |                    d
          d         z   }|S )zrequest.build_absolute_uri() helper

    Like request.build_absolute_uri, but gracefully handling
    the case where request is None.
    r   r   Nz6Passing `request=None` requires `sites` to be enabled.r   )Sitez{proto}://{domain}{url})protodomainurlhttps:   )accountr   SITES_ENABLEDr   django.contrib.sites.modelsr   objectsget_currentr   schemenetlocr   DEFAULT_HTTP_PROTOCOLr   build_absolute_uri	partition)requestlocationprotocolaccount_settingsr   sitebitsuris           r7   r   r      s    :99999) 	&H   	544444|''))!! 	 	+22&<{ 3  CC CC((22  :(>'II#9 5ns}}S11!44JrB   c                 z    |                      ||          }t          |t                    rt          |          }|S rE   )getrq   rr   rz   )formsform_iddefault_form
form_classs       r7   get_form_classr   &  s:    7L11J*c"" 2%j11
rB   c                 t    | |S | j                             |          p| j                            ||          S rE   )POSTr   GET)r   paramdefaults      r7   get_request_paramr   -  s7    <E""EgkooeW&E&EErB   c                 f    t          t          dd           }t          |          } || |          S )NALLAUTH_SETTING_GETTERc                 .    t          t          | |          S rE   )rt   r   )r   dflts     r7   <lambda>zget_setting.<locals>.<lambda>7  s    78T488 rB   )rt   r   r   )r   r   getters      r7   get_settingr   3  s>     88 F
 V$$F6$rB   rE   )<r   ru   r   rF   r,   stringr(   collectionsr   urllib.parser   django.confr   django.contrib.authr   django.core.exceptionsr   r   django.core.files.baser	   django.core.serializers.jsonr
   django.core.validatorsr   r   django.db.modelsr   django.db.models.fieldsr   r   r   r   r   django.utilsr   django.utils.encodingr   r   allauthr   rW   digitsascii_lettersrH   r8   rA   rR   r\   rk   rn   rz   r   r   r   r   r   r   r   r   r   ra   rB   r7   <module>r      s          				      # # # # # # ! ! ! ! ! !             . . . . . . J J J J J J J J . . . . . . : : : : : : B B B B B B B B & & & & & &              # " " " " " 8 8 8 8 8 8 8 8            
  !+v/C.D"/  
   :  ; ; ;  B B B B.	 	 	     $  ?  ?  ?F$ $ $N  0' ' ' 'T  F F F F    rB   