U
    Md                     @   s  d dl mZ d dlZd dlZd dlm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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 d dlmZm Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*Z+d dl,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlDmEZEmFZFmGZGmHZH ejIddd d gZJe%d!e<jKjLe<jMjNddd"d#d$d%d&	G d'd( d(e6ZOG d)d* d*e6ZPG d+d, d,e6ZQG d-d. d.e6ZRG d/d0 d0e6ZSG d1d2 d2eZTG d3d4 d4e6ZUG d5d6 d6e6ZVe%d7d8G d9d: d:e6ZWe%d7d8G d;d< d<e6ZXG d=d> d>e6ZYe%d?d@dAiidBdCidDG dEdF dFe6ZZdS )G    )absolute_importN)	timedelta)forms)settings)messages)AbstractUserAnonymousUser)get_messages)MessageMiddleware)SessionMiddleware)mail
validators)ValidationError)models)HttpResponseRedirect)ContextTemplate)ClientRequestFactory)override_settings)reverse)now)BaseSignupFormResetPasswordForm
SignupForm)EmailAddressEmailConfirmationEmailConfirmationHMAC)MockTestCasepatch)get_user_modelget_username_max_length   )app_settings)get_adapter)AuthenticationBackend)user_logged_inuser_logged_out)filter_users_by_usernameurl_str_to_user_pkuser_pk_to_url_struser_usernamez^[a-c]+$znot abc)Zregexmessageflagshttps/accounts/profile/z/accounts/welcome/z-allauth.account.adapter.DefaultAccountAdapterT)	ZACCOUNT_DEFAULT_HTTP_PROTOCOLACCOUNT_EMAIL_VERIFICATIONACCOUNT_AUTHENTICATION_METHODZACCOUNT_SIGNUP_FORM_CLASSZACCOUNT_EMAIL_SUBJECT_PREFIXLOGIN_REDIRECT_URLACCOUNT_SIGNUP_REDIRECT_URLZACCOUNT_ADAPTERACCOUNT_USERNAME_REQUIREDc                   @   s4  e Zd Zdd Zeejjddd Zdd Z	dd	 Z
ed
ddd Zed
ddd Zdd Zdd Zdd Zeddddd Zeddddd Zddd Zdd!d"Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zeejjdd7d8 Zd9d: Z d;d< Z!d=d> Z"eejjdd?d@ Z#dAdB Z$eddCdDdE Z%edFdGdHdIdJ Z&dKdL Z'eej(j)dMdNdO Z*eej(j)dPdQdRdS Z+eejjej(j,dTdUdVdW Z-eejjej(j,dTdUdXdY Z.dZd[ Z/d\d] Z0d^d_ Z1d`da Z2eej(j)dMdbdc Z3ddde Z4eddfdgdh Z5edFdfdidj Z6dkdl Z7eej(j)dFdmdndo Z8edFdpdqdr Z9edsdtduidvgdwdxdy Z:eddzd{d| Z;eddzd}d~ Z<eddddd Z=edddd Z>eejjddd Z?eejjddd Z@dd ZAedejjej(j,ddd ZBd
S )AccountTestsc                 C   sP   dt jkrLddlm} |jjddd}tjjrLddl	m
} |j|j  d S )	Nzallauth.socialaccount   )	SocialAppZtestfbZfacebook)nameZproviderr   Site)r   ZINSTALLED_APPSZsocialaccount.modelsr8   objectscreateallauthr$   SITES_ENABLEDdjango.contrib.sites.modelsr;   Zsitesaddget_current)selfr8   sar;    rE   Y/var/www/html/crackeverytest/cet_env/lib/python3.8/site-packages/allauth/account/tests.pysetUp@   s    
zAccountTests.setUpr2   c                 C   sd   t  jjdd}|d |  tjj|dddd | jtdddd}| j	|t
jd	d
 d S )N@raymond.pennersusernameZpsstraymond.penners@example.comTuseremailprimaryverifiedaccount_loginloginpasswordFZfetch_redirect_responser!   r<   r=   set_passwordsaver   clientpostr   assertRedirectsr   r3   rC   rN   resprE   rE   rF   test_username_containing_atK   s$    
  z(AccountTests.test_username_containing_atc                 C   sf   t  jjddd}tjj|dddd}d}t  jj|jdj|d	 |  |  | 	|j
| d S )
NrI   Before UpdaterK   
first_namerL   TrM   Updatedidrb   )r!   r<   r=   r   filterre   updateZset_as_primaryrefresh_from_dbassertEqualrb   rC   rN   rO   Zupdated_first_namerE   rE   rF   Etest_set_email_as_primary_doesnt_override_existed_changes_on_the_user`   s"     zRAccountTests.test_set_email_as_primary_doesnt_override_existed_changes_on_the_userc                 C   sn   t  jjddd}tjj|dddd}d}t  jj|jd	j|d
 |jd ddd |  | 	|j
| d S )NrI   r`   ra   rL   FTrM   rc   rd   rf   z new.raymond.penners@example.com"Zconfirm)r!   r<   r=   r   rg   re   rh   Zchangeri   rj   rb   rk   rE   rE   rF   >test_set_new_email_doesnt_override_existed_changes_on_the_usert   s"     zKAccountTests.test_set_new_email_doesnt_override_existed_changes_on_the_userN)ZACCOUNT_USER_MODEL_EMAIL_FIELDc                 C   s   |    d S N)rl   rC   rE   rE   rF   htest_set_email_as_primary_doesnt_override_existed_changes_on_the_user_for_user_model_without_email_field   s    zuAccountTests.test_set_email_as_primary_doesnt_override_existed_changes_on_the_user_for_user_model_without_email_fieldc                 C   s   |    d S ro   )rn   rp   rE   rE   rF   btest_set_new_email_doesnt_override_existed_changes_on_the_user_when_user_model_without_email_field   s    zoAccountTests.test_set_new_email_doesnt_override_existed_changes_on_the_user_when_user_model_without_email_fieldc                 C   s>   |  dd}| tjj|d d tjjdd|dd d S )Njohn@example.comrN   r#   TrQ   rO   rN   rP   &_test_signup_email_verified_externallyrj   r   r<   rg   countgetrC   rN   rE   rE   rF   *test_signup_same_email_verified_externally   s        z7AccountTests.test_signup_same_email_verified_externallyc                 C   sR   |  dd}| tjj|d d tjjdd|dd tjjdd|dd dS )	z
        John is invited on john@example.org, but signs up via john@example.com.
        E-mail verification is by-passed, their home e-mail address is
        used as a secondary.
        rs   john@example.orgrt   r7   Fru   TNrv   rz   rE   rE   rF   +test_signup_other_email_verified_externally   s"           z8AccountTests.test_signup_other_email_verified_externallyc                 C   s   d}t  td||ddd}tdd | tdd | t |_||jd< dd	l	m
} ||}| |jd
 | |d t | | ttjd t jj|dS )Njohndoeaccount_signuprK   rO   	password1	password2c                 S   s   d S ro   rE   requestrE   rE   rF   <lambda>       zEAccountTests._test_signup_email_verified_externally.<locals>.<lambda>c                 S   s   d S ro   rE   r   rE   rE   rF   r      r   Zaccount_verified_emailr#   signup.  locationr   rJ   )r   r[   r   r   process_requestr
   r   rN   sessionviewsr   rj   status_coder%   Zget_signup_redirect_urllenr   outboxr!   r<   ry   )rC   Zsignup_emailZverified_emailrK   r   r   r^   rE   rE   rF   rw      s,    

 
z3AccountTests._test_signup_email_verified_externallyT)r5   #ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICEc                 C   sR   | j jtddddddd}tjdkr>| |jd d	d
 n| |dd	d
 d S )Nr   r~   r|   Zjanedoer   data   r#   formr   z*You must type the same password each time.rZ   r[   r   djangoVERSIONassertFormErrorcontextrC   r^   rE   rE   rF   %test_signup_password_twice_form_error   s(    	
z2AccountTests.test_signup_password_twice_form_errorr5    ACCOUNT_SIGNUP_EMAIL_ENTER_TWICEc              	   C   s   t  tddddddd}tdd | tdd | t |_dd	lm	} || t
 jjdd
}| |jd d S )Nr   r~   r|   rK   rO   email2r   r   c                 S   s   d S ro   rE   r   rE   rE   rF   r      r   z6AccountTests.test_signup_email_twice.<locals>.<lambda>c                 S   s   d S ro   rE   r   rE   rE   rF   r      r   r#   r   rJ   )r   r[   r   r   r   r
   r   rN   r   r   r!   r<   ry   rj   rO   )rC   r   r   rN   rE   rE   rF   test_signup_email_twice   s     
z$AccountTests.test_signup_email_twicejohndoec                 K   s>   t  jjf |dd|}|r*|| n|  |  |S NTrK   	is_activer!   r<   r=   rX   Zset_unusable_passwordrY   )rC   rK   rU   kwargsrN   rE   rE   rF   _create_user   s    
 zAccountTests._create_userc                 C   s(   |rdnd}| j |d}| j| |S )Nr   F)rU   )r   rZ   force_login)rC   usable_passwordrU   rN   rE   rE   rF   _create_user_and_login  s    z#AccountTests._create_user_and_loginc                 C   s0   |    | j}|td}| j|ddd d S )NrR   r0   FrV   )r   rZ   ry   r   r\   rC   cr^   rE   rE   rF    test_redirect_when_authenticated  s    z-AccountTests.test_redirect_when_authenticatedc                 C   s    | j td}| |d d S )Naccount_reset_passwordzaccount/password_reset.html)rZ   ry   r   assertTemplateUsedr   rE   rE   rF   test_password_reset_get  s    z$AccountTests.test_password_reset_getc                 C   s$   |  dd}| j|tddd d S )Naccount_set_passwordTaccount_change_passwordFrV    _password_set_or_change_redirectr\   r   r   rE   rE   rF   test_password_set_redirect  s    z'AccountTests.test_password_set_redirectc                 C   sp   |  d}d}| || | jjtd||dd}|  | || | |  | 	|j
d d S )NTz!*123i1uwn12W23r   r   r   r   r   )r   assertFalsecheck_passwordrZ   r[   r   ri   
assertTrueZhas_usable_passwordrj   r   )rC   rN   pwdr^   rE   rE   rF   test_set_password_not_allowed  s    
z*AccountTests.test_set_password_not_allowedc                 C   s   |  dd}| |jd d S )Nr   T   r   rj   r   r   rE   rE   rF    test_password_change_no_redirect+  s    z-AccountTests.test_password_change_no_redirectc                 C   s   |  dd}| |jd d S )Nr   Fr   r   r   rE   rE   rF   test_password_set_no_redirect/  s    z*AccountTests.test_password_set_no_redirectc                 C   s$   |  dd}| j|tddd d S )Nr   Fr   rV   r   r   rE   rE   rF   test_password_change_redirect3  s    z*AccountTests.test_password_change_redirectc                 C   s   |  | | jt|S ro   r   rZ   ry   r   )rC   Zurlnamer   rE   rE   rF   r   ;  s    
z-AccountTests._password_set_or_change_redirectc                 C   sl   |    | jjtddddddd}| |d d	 t|jd
}d|d d d d d ksht	d S )Nr   r   z
AbCdEf!123zAbCdEf!123456)Zoldpasswordr   r   XMLHttpRequestr   HTTP_X_REQUESTED_WITHcontent-typeapplication/jsonutf8zsame passwordr   fieldsr   errorsr   )
r   rZ   r[   r   rj   jsonloadscontentdecodeAssertionErrorrC   r^   r   rE   rE   rF   test_ajax_password_change?  s    	z&AccountTests.test_ajax_password_changec                 C   s&   |   }tjd j}|j|ks"td S Nr   _request_new_passwordr   r   bodyrK   r   rC   rN   r   rE   rE   rF   %test_password_forgotten_username_hintN  s    z2AccountTests.test_password_forgotten_username_hintc                 C   s&   |   }tjd j}|j|ks"td S r   r   r   rE   rE   rF   (test_password_forgotten_no_username_hintS  s    z5AccountTests.test_password_forgotten_no_username_hintc                 C   sj   t  jjdddd}|d |  | jjtdddid | t	t
jd	 | t
jd
 jdg |S )Nr   r|   TrK   rO   r   r   r   rO   r   r#   r   )r!   r<   r=   rX   rY   rZ   r[   r   rj   r   r   r   torz   rE   rE   rF   r   [  s      
z"AccountTests._request_new_passwordc                 C   s   |    tjd j}| |dd ||dd  d }| j|}|j	}| 
 |}| |dtj  | |jd  dS )a9  
        Test the password reset flow when the session is empty:
        requesting a new password, receiving the reset link via email,
        following the link, getting redirected to the
        new link (without the token)
        Copying the link and using it in a DIFFERENT client (Browser/Device).
        r   https:///password/reset/N"account/password_reset_from_key.%s
token_fail)r   r   r   r   assertGreaterfindsplitrZ   ry   urlZclient_classr   r$   TEMPLATE_EXTENSIONr   context_data)rC   r   r   r^   Zreset_pass_urlrE   rE   rF   +test_password_reset_flow_with_empty_sessioni  s    	z8AccountTests.test_password_reset_flow_with_empty_sessionc                 C   s  |   }tjd j}| |dd ||dd  d }| j|}|j	}| j|}| 
|dtj  | d|jk | j|ddd}| |td	 t jj|jd
}| |d | j|ddd}| 
|dtj  | |jd  | j|}| 
|dtj  | |jd  | jj|ddddd}| |jd t|jd}d|d d d ks|tdS )z
        Tests the password reset flow: requesting a new password,
        receiving the reset link via email and finally resetting the
        password to a new value.
        r   r   r   Nr   r   
newpass123r   $account_reset_password_from_key_donepkr   r     r   invalidr   r   )r   r   r   r   r   r   r   rZ   ry   r   r   r$   r   r   r   r[   r\   r   r!   r<   r   r   r   rj   r   r   r   r   r   r   )rC   rN   r   r   r^   responser   rE   rE   rF   test_password_reset_flow  sT      z%AccountTests.test_password_reset_flowc                 C   s"  |    tjd j}| |dd | jddd}tjj	||j
ddd | jtd|j
d	d
}| ||jd  ||dd  d }| j|}|j}| j|}| |dtj  | d|jk | jj|ddddd}| |td | ||jd  | t |jd  dS )z
        Tests the password reset flow: if User B requested a password
        reset earlier and now User A is logged in, User B now clicks on
        the link, ensure User A is logged out before continuing.
        r   r   john2john2@example.comrK   rO   TrM   rR   r   rS   rN   r   Nr   r   r   r   followr   )r   r   r   r   r   r   r   r   r<   r=   rO   rZ   r[   r   rj   r   r   ry   r   r   r$   r   r   r   r\   ZassertNotEqualr   )rC   r   user2r^   r   rE   rE   rF   4test_password_reset_flow_with_another_user_logged_in  sD    
      zAAccountTests.test_password_reset_flow_with_another_user_logged_inc                 C   s   |   }tjd j}| |dd tjj|dd ||dd 	 d }| j
|}| |dtj  | d|jk dS )	zr
        Test that the password reset token is invalidated if
        the user email address was changed.
        r   r   zother@email.org)rN   rO   r   Nr   r   )r   r   r   r   r   r   r   r<   r=   r   rZ   ry   r   r$   r   r   r   rC   rN   r   r   r^   rE   rE   rF   +test_password_reset_flow_with_email_changed  s    z8AccountTests.test_password_reset_flow_with_email_changed)ZACCOUNT_LOGIN_ON_PASSWORD_RESETc                 C   sl   |   }tjd j}||dd   d }| j|}| j|j	ddd}| 
|j | |d d S )Nr   r   r   r   /confirm-email/)r   r   r   r   r   r   rZ   ry   r[   r   r   Zis_authenticatedr\   r   rE   rE   rF   3test_password_reset_ACCOUNT_LOGIN_ON_PASSWORD_RESET
  s     z@AccountTests.test_password_reset_ACCOUNT_LOGIN_ON_PASSWORD_RESETF
   )ACCOUNT_EMAIL_CONFIRMATION_HMACZ#ACCOUNT_EMAIL_CONFIRMATION_COOLDOWNc                 C   s  t  }|jtdddddddd}| |jd | tjd jdg | tjd j	
d	d | ttjd
 | |dtj  dD ]}|jtdddddd}| t jjddd  | |dtj  | ttj| | tjjdd | tjjt td
d d qtjjddd d
  }|td|jgd}| |dtj  |td|jgd |tdddd}| j|tjdd d S )Nr   r~   rs   r   Tr   r   r   r   r#   zaccount/verification_sent.%s)r#   r7   rR   rS   r   zaccount/verification_sent.)Zemail_address__emaildayssent)Zemail_address__user__usernameaccount_confirm_emailargszaccount/email_confirm.%sFrV   )r   r[   r   rj   r   r   r   r   r   r   r   r   r   r$   r   r   r!   r<   rg   existsr   rx   rh   r   r   ry   keyr\   r   r3   )rC   r   r^   ZattemptconfirmationrE   rE   rF   !test_email_verification_mandatory  s|    
 
   z.AccountTests.test_email_verification_mandatoryc                 C   s   d}t jjr4ddlm} |j }d |_}|  t	 jj
ddd}t d}tjj|||jd	d
 | tjd jdd  | d S )NZ
testserverr   r:   z<enc&"test>testuser@example.comr   /Trm   r#   )r>   r$   r?   r@   r;   r<   rB   r9   rY   r!   r=   r   ry   r   Z	add_emailrO   r   r   r   Zsubject
startswith)rC   Z	site_namer;   siteur   rE   rE   rF   test_email_escapinga  s    

z AccountTests.test_email_escaping)r1   c                 C   sd   t  jjdd}|d |  tjj|dddd | jtdddd	}| j	|t
jdd
 dS )z9Tests login behavior when email verification is optional.r   rJ   r   r
  TFrM   rR   rS   rV   NrW   r]   rE   rE   rF   &test_login_unverified_account_optionaln  s$    
      z3AccountTests.test_login_unverified_account_optional   )r1   ACCOUNT_LOGIN_ATTEMPTS_LIMITc              	   C   s   t  jjdd}|d |  tjj|dddd tdD ]}|d	k}|d
k}| jt	ddddddg| |rvdndd}t
jdkr| |jd d |rdnd q>| |dd |rdnd q>d S )Nr   rJ   r   r
  TFrM      r   r  rR   ZJohnZJOHNZJOhnZjoHNZwrongrS   r   r   0Too many failed login attempts. Try again later.z;The username and/or password you specified are not correct.)r!   r<   r=   rX   rY   r   rangerZ   r[   r   r   r   r   r   )rC   rN   iZis_valid_attemptZ	is_lockedr^   rE   rE   rF   #test_login_failed_attempts_exceeded  sD    
   

z0AccountTests.test_login_failed_attempts_exceededr#   )r2   r1   r  c                 C   s  t  jjdddd}|d |  tjj|dddd | jtd|j	dd	}t
jd
krt| |jd d d n| |dd d | jtd|j	dd	}t
jd
kr| |jd d d n| |dd d | jjtdd|j	id tjd j}| |dd ||dd   d }| j|}|j}| j|}| |dtj  | d|jk d}| j|||d}| |td t  jj|jd}| || | jtd|j	|d	}| j|tj dd d S )Nr   r|   Tr   r   rM   rR   badrS   r   r   zAThe e-mail address and/or password you specified are not correct.r  r   rO   r   r   r   r   r   r   r   r   r   r   FrV   )!r!   r<   r=   rX   rY   r   rZ   r[   r   rO   r   r   r   r   r   r   r   r   r   r   ry   r   r   r$   r   r   r   r\   r   r   r   r   r3   )rC   rN   r^   r   r   Znew_passwordrE   rE   rF   =test_login_failed_attempts_exceeded_cleared_on_password_reset  s      
    

 

 
  zJAccountTests.test_login_failed_attempts_exceeded_cleared_on_password_resetc                 C   s   t  jjdddd}|d |  tjj|dddd tjj|dddd | jtd	ddd
}| j	|tddd | 
ttjd tjd jdgkstd S )Nr   r|   Tr   r   rM   rs   FrR   rS   account_email_verification_sentrV   r#   r   )r!   r<   r=   rX   rY   r   rZ   r[   r   r\   rj   r   r   r   r   r   r]   rE   rE   rF   7test_login_using_unverified_email_address_is_prohibited  s<      
       zDAccountTests.test_login_using_unverified_email_address_is_prohibitedc                 C   sb   t  jjdd}|d |  tjj|dddd | jtdddd	}| 	|td
 dS )z:Tests login behavior when email verification is mandatory.r   rJ   r   r
  TFrM   rR   rS   r  N
r!   r<   r=   rX   rY   r   rZ   r[   r   r\   r]   rE   rE   rF   'test_login_unverified_account_mandatory   s    
    z4AccountTests.test_login_unverified_account_mandatoryc                 C   s   t  jjddd}|d |  tjj|dddd | jtdddd	}| 	|td
 t  jjddd}|d |  tjj|dddd | jtdddd	}| 	|td
 dS )z
        Tests login behavior with inactive accounts.

        Inactive user accounts should be prevented from performing any actions,
        regardless of their verified state.
        r   Fr   r   rs   TrM   rR   rS   Zaccount_inactiver
  Nr  r]   rE   rE   rF   test_login_inactive_account-  s8    
    
    z(AccountTests.test_login_inactive_accountc                 C   sj   t  jjdddd | jjtdddidd}| ttj	d	 | tj	d
 j
dg | |d d d S )Nr   r|   Tr   r   rO   r   r   r#   r   r   r   )r!   r<   r=   rZ   r[   r   rj   r   r   r   r   r   rE   rE   rF   test_ajax_password_resetL  s      z%AccountTests.test_ajax_password_resetc                 C   s:   | j jtdi dd}| |jd t|jd d S )NrR   r   r   r   r   )	rZ   r[   r   rj   r   r   r   r   r   r   rE   rE   rF   test_ajax_login_failY  s    z!AccountTests.test_ajax_login_failc                 C   st   t  jjddd}|d |  | jjtdddddd}| |j	d	 t
|jd
}| |d d d S )Nr   Tr   r   rR   rS   r   r   r   r   r   r0   )r!   r<   r=   rX   rY   rZ   r[   r   rj   r   r   r   r   r   )rC   rN   r^   r   rE   rE   rF   test_ajax_login_successc  s    
z$AccountTests.test_ajax_login_successc                 C   s   |    | jtd d S )Naccount_emailr   rp   rE   rE   rF   test_email_views  s    zAccountTests.test_email_view)ZACCOUNT_LOGOUT_ON_GETc                 C   s   |  d\}}| |d d S )Nry   account/messages/logged_out.txt)_logout_viewr   r   rE   rE   rF   test_logout_view_on_getx  s    z$AccountTests.test_logout_view_on_getc                 C   sz   |  d\}}| |dtj  t }t| |td}| |d |j	t
 |jt
 jjddtd t| d S )Nry   zaccount/logout.%saccount_logoutr$  r   rJ   )senderr   rN   signal)r%  r   r$   r   r   r(   connectr[   r   assert_called_once_withr!   wsgi_requestr<   ry   
disconnect)rC   r   r^   receiver_mockrE   rE   rF   test_logout_view_on_post}  s      
z%AccountTests.test_logout_view_on_postc                 C   sT   t  }t jjddd}|d |  t  }|jddd |t||tdfS )Nr   Tr   r   rK   rU   r'  )	r   r!   r<   r=   rX   rY   rT   getattrr   )rC   methodr   rN   rE   rE   rF   r%    s    
zAccountTests._logout_view)r1   r   c                 C   s   t  }|td |tddddd}| j|tjdd | tj	d j
dg | ttj	d |  tjjt tdd	 d
 |tdddd}| j|tjdd | tj	d j
dg | ttj	d d S )Nr   r~   rs   )rK   rO   r   FrV   r   r#   r   r   rR   rS   )r   ry   r   r[   r\   r   r4   rj   r   r   r   r   logoutr   r<   rh   r   r   r3   r   rE   rE   rF    test_optional_email_verification  s:    	    z-AccountTests.test_optional_email_verification)Z%ACCOUNT_AUTHENTICATED_LOGIN_REDIRECTSc                 C   s*   |    | jtd}| |jd d S )NrR   r   )r   rZ   ry   r   rj   r   r   rE   rE   rF   3test_account_authenticated_login_redirects_is_false  s    z@AccountTests.test_account_authenticated_login_redirects_is_falsez>django.contrib.auth.password_validation.MinimumLengthValidatorZ
min_length	   )NAMEZOPTIONS)ZAUTH_PASSWORD_VALIDATORSc                 C   sx   | j tdddddd}tjdkrR| |jd d g  | |jd ddg n"| |dd g  | |dddg d S )	Nr   r~   rs   r   r   r   r   zBThis password is too short. It must contain at least 9 characters.r   r   rE   rE   rF   test_django_password_validation  s,    	
z,AccountTests.test_django_password_validation)r   c                 C   sn   |   }tjj|dddd}t|}t |_|  | j	t
d|jgd tjj|jd}| |j d S )Na@b.comFTrN   rO   rQ   rP   r  r  r   )r   r   r<   r=   r   r   r  rY   rZ   r[   r   r  ry   r   r   rQ   )rC   rN   rO   r  rE   rE   rF   'test_email_confirmation_hmac_falls_back  s       
z4AccountTests.test_email_confirmation_hmac_falls_backc                 C   s   |   }tjj|dddd}t|}t d}|j|d | t	t
jd | jtd|jgd	 tjj|jd
}| |j d S Nr9  FTr:  r  r   r#   r  r  r   )r   r   r<   r=   r   r   ry   sendrj   r   r   r   rZ   r[   r   r  r   r   rQ   rC   rN   rO   r  r   rE   rE   rF   test_email_confirmation_hmac  s       z)AccountTests.test_email_confirmation_hmacr   )r   Z&ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYSc                 C   s   |   }tjj|dddd}t|}t d}|j|d | t	t
jd | jtd|jgd	 tjj|jd
}| |j d S r<  )r   r   r<   r=   r   r   ry   r=  rj   r   r   r   rZ   r[   r   r  r   r   rQ   r>  rE   rE   rF   $test_email_confirmation_hmac_timeout	  s       z1AccountTests.test_email_confirmation_hmac_timeoutz.allauth.account.tests.test_username_validators)ZACCOUNT_USERNAME_VALIDATORSc                 C   s    t  d | tdd  d S )Nabcc                   S   s   t  dS )Ndef)r%   clean_usernamerE   rE   rE   rF   r     r   z6AccountTests.test_username_validator.<locals>.<lambda>)r%   rC  assertRaisesr   rp   rE   rE   rF   test_username_validator  s    z$AccountTests.test_username_validatorc                 C   s0  t  jjdddd}| j| | jtd|jdd | t	t
jd | t
jd	 j|jg | j  t
jd	 j}| |d
d	 | jddd}tjj||jddd | jtd|jdd}| ||jd  ||dd  d	 }| j|}| |d | |d | j|tjdd dS )zTest the email confirmation view. If User B clicks on an email
        verification link while logged in as User A, ensure User A gets
        logged out.r   r|   r   rK   rO   rU   r"   rO   action_sendr#   r   r   r   r   r   TrM   rR   rS   rN   r   Nr$  $account/messages/email_confirmed.txtFrV   )r!   r<   create_userrZ   r   r[   r   rO   rj   r   r   r   r   r3  r   r   r   r   r   r=   r   r   r   r\   r   Z	LOGIN_URL)rC   rN   r   r   r^   r   rE   rE   rF   .test_confirm_email_with_another_user_logged_in!  sD       

   z;AccountTests.test_confirm_email_with_another_user_logged_inc                 C   s   t  jjdddd}| j| | jtd|jdd | t	t
jd | t
jd	 j|jg t
jd	 j}| |d
d	 ||dd  d	 }| j|}| |d | |d | j|tjdd | ||jj dS )zTest the email confirmation view. If User A clicks on an email
        verification link while logged in, ensure the user
        stayed logged in.r   r|   r   rF  r"  rG  rH  r#   r   r   r   Nr$  rJ  FrV   )r!   r<   rK  rZ   r   r[   r   rO   rj   r   r   r   r   r   r   r   r   assertTemplateNotUsedr   r\   r   r3   r,  rN   r   rE   rE   rF   +test_confirm_email_with_same_user_logged_inK  s0       
  z8AccountTests.test_confirm_email_with_same_user_logged_inc                 C   s   t  d}tdd | tdd | t  }t|d d|i}t |t	j
d| t|}|jd j}|j|kst|d S )	Nr  c                 S   s   d S ro   rE   r   rE   rE   rF   r   m  r   z4AccountTests.test_message_escaping.<locals>.<lambda>c                 S   s   d S ro   rE   r   rE   rE   rF   r   n  r   z'<8rN   zaccount/messages/logged_in.txtr   )r   ry   r   r   r
   r!   r,   r%   Zadd_messager   SUCCESSr	   Z_queued_messagesr-   rK   r   )rC   r   rN   r   ZmsgsZactual_messagerE   rE   rF   test_message_escapingk  s    
   z"AccountTests.test_message_escaping)ACCOUNT_PREVENT_ENUMERATIONr2   r1   c                 C   s~   t  jjdddd}tjj||jddd t }|tdd|jddd	}| 	|j
d
 |d tdksnt| |d d S )Nr   r|   r   rF  TrM   r   r~   r   r   r   r  z0account/email/account_already_exists_message.txt)r!   r<   rK  r   r=   rO   r   r[   r   rj   r   r   r   )rC   rN   r   r^   rE   rE   rF   *test_prevent_account_enumeration_at_signupy  s4         	 z7AccountTests.test_prevent_account_enumeration_at_signup)r   r   )T)C__name__
__module____qualname__rG   r   r$   AuthenticationMethodUSERNAME_EMAILr_   rl   rn   rq   rr   r{   r}   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   EMAILr   r   r   r   r   r   r   r  r  EmailVerificationMethodZOPTIONALr  r  	MANDATORYr  r  r  r  r  r   r!  r#  r&  r/  r%  r4  r5  r8  r;  r?  r@  rE  rL  rN  rP  rR  rE   rE   rE   rF   r6   4   s  


	
 



A
-
 
E

#
V




	
$
 






'
r6   c                   @   s   e Z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dd Zedddd Zedddd Zed dd!d" ZdS )#EmailFormTestsc                 C   sv   t  }|jjddd| _| jd | j  tjj| j| jjddd| _tjj| jdddd| _	| j
jddd	 d S )
Nr   john1@example.orgr   r   Tr:  john2@example.orgFr0  )r!   r<   r=   rN   rX   rY   r   rO   email_addressemail_address2rZ   rT   )rC   UserrE   rE   rF   rG     s"    
   zEmailFormTests.setUpc                 C   s>   | j tdddd}tjjd| jddd | |d d S )Nr"  rG  john3@example.orgZ
action_addrO   F)rO   rN   rQ   rP   ,account/messages/email_confirmation_sent.txt)rZ   r[   r   r   r<   ry   rN   r   r   rE   rE   rF   test_add  s    zEmailFormTests.test_addc                 C   sZ   | j jtddd}t|jd}|d | jjdddd| j	jd	d
d
dgksVt
d S )Nr"  r   r   r   r   r\  T)re   rO   rP   rQ   r]  F)rZ   ry   r   r   r   r   r   r^  r   r_  r   r   rE   rE   rF   test_ajax_get  s"     zEmailFormTests.test_ajax_getc                 C   sF   | j jtdddddd}t|jd}| |d td d S )	Nr"  rG  ra  rb  r   r   r   r   )rZ   r[   r   r   r   r   r   rj   r   rE   rE   rF   test_ajax_add  s    zEmailFormTests.test_ajax_addc                 C   sR   | j jtdddddd}t|jd}d|d	 d
 d d d ksNtd S )Nr"  rG  zjohn3#example.orgrb  r   r   r   Zvalidr   r   rO   r   r   )rZ   r[   r   r   r   r   r   r   r   rE   rE   rF   test_ajax_add_invalid  s    z$EmailFormTests.test_ajax_add_invalidc                 C   s>   | j tdd| jjd}tjj| jjd | 	|d d S )Nr"  rG  Zaction_removerO   r   0account/messages/cannot_delete_primary_email.txt)
rZ   r[   r   r^  rO   r   r<   ry   r   r   r   rE   rE   rF   test_remove_primary  s     z"EmailFormTests.test_remove_primaryc                 C   sV   | j jtdd| jjddd}| |d t|j	d}| 
|d td d S )	Nr"  rG  rh  r   r   ri  r   r   )rZ   r[   r   r^  rO   r   r   r   r   r   rj   r   rE   rE   rF   test_ajax_remove_primary  s     z'EmailFormTests.test_ajax_remove_primaryc                    sB    j tdd jjd} tj fdd  |d d S )Nr"  rG  rh  c                      s   t jj jjdS )Nr   )r   r<   ry   r_  r   rE   rp   rE   rF   r     r   z6EmailFormTests.test_remove_secondary.<locals>.<lambda>z"account/messages/email_deleted.txt)	rZ   r[   r   r_  rO   rD  r   ZDoesNotExistr   r   rE   rp   rF   test_remove_secondary  s    
z$EmailFormTests.test_remove_secondaryc                 C   sh   | j tdd| jjd}tjj| jj	d}tjj| jj	d}| 
|j | |j | |d d S )Nr"  rG  Zaction_primaryrO   r   z-account/messages/unverified_primary_email.txt)rZ   r[   r   r_  rO   r   r<   ry   r^  r   r   rP   r   r   )rC   r^   r^  r_  rE   rE   rF   test_set_primary_unverified  s    z*EmailFormTests.test_set_primary_unverifiedc                 C   s   t jj| jjd}d|_|  | jt	dd| jj
d}t jj| jjd}t jj| jjd}| |j | |j | |d d S )Nr   Tr"  rG  rm  z&account/messages/primary_email_set.txt)r   r<   ry   r_  r   rQ   rY   rZ   r[   r   rO   r^  r   rP   r   r   )rC   r_  r^   r^  rE   rE   rF   test_set_primary  s    zEmailFormTests.test_set_primaryc                 C   s,   | j tdd| jjd}| |d d S )Nr"  rG  rI  rO   rc  )rZ   r[   r   r_  rO   r   r   rE   rE   rF   test_verify  s
    zEmailFormTests.test_verifyc                 C   sT   t jj| jd dkst| jtdddd t jj| jd dksPtd S )Nrt   r7   r"  rG  zemail@unknown.orgrp  )	r   r<   rg   rN   rx   r   rZ   r[   r   rp   rE   rE   rF   test_verify_unknown_email  s    z(EmailFormTests.test_verify_unknown_emailr7   )ZACCOUNT_MAX_EMAIL_ADDRESSESc                 C   s(   | j tdddd}| |d d S Nr"  rG  ra  rb  rc  )rZ   r[   r   rM  r   rE   rE   rF   test_add_with_two_limiter%  s
     z(EmailFormTests.test_add_with_two_limiterNc                 C   s(   | j tdddd}| |d d S rs  rZ   r[   r   r   r   rE   rE   rF   test_add_with_none_limiter,  s
     z)EmailFormTests.test_add_with_none_limiterr   c                 C   s(   | j tdddd}| |d d S rs  ru  r   rE   rE   rF   test_add_with_zero_limiter3  s
     z)EmailFormTests.test_add_with_zero_limiter)rS  rT  rU  rG   rd  re  rf  rg  rj  rk  rl  rn  ro  rq  rr  r   rt  rv  rw  rE   rE   rE   rF   r[    s$   		
	

r[  c                   @   s^   e Zd Zeddgddd Zeddgddd Zeddd	d
 Zeddddd ZdS )BaseSignupFormTestsTrK   )r5   ZACCOUNT_USERNAME_BLACKLISTc                 C   s(   ddd}t |dd}| |  d S )NrK   r
  r   TZemail_required)r   r   is_validrC   r   r   rE   rE   rF   test_username_in_blacklist<  s
    z.BaseSignupFormTests.test_username_in_blacklistc                 C   s(   ddd}t |dd}| |  d S )NZtheusernamer
  r   Try  )r   r   rz  r{  rE   rE   rF   test_username_not_in_blacklistG  s
    z2BaseSignupFormTests.test_username_not_in_blacklist)r5   c                 C   sV   ddd}t |dd}t }|jd }| |j| |j}| |jdt| d S )NrK   r
  r   Try  Z	maxlength)	r   r"   r   rj   
max_lengthwidgetattrsry   str)rC   r   r   r~  fieldr  rE   rE   rF   test_username_maxlengthR  s    
z+BaseSignupFormTests.test_username_maxlengthr   c                 C   sp   ddd}t |dd}| |  dddd}t |dd}| |  d|d< t |dd}| |  d S )	NrK   r
  r   Try  )rK   rO   r   zanotheruser@example.comr   )r   r   rz  r   r{  rE   rE   rF   test_signup_email_verification_  s    z2BaseSignupFormTests.test_signup_email_verificationN)rS  rT  rU  r   r|  r}  r  r  rE   rE   rE   rF   rx  ;  s"    
 

 rx  c                   @   s(   e Zd Zeddddd Zdd ZdS )CustomSignupFormTestsT)r   r   c                    sZ   dddddddg G  fdd	d	t j}G d
d dt|}| }| t|j   d S )NrO   r   r   r   rK   	last_namerb   c                       s(   e Zd ZejddZejddZ ZdS )zJCustomSignupFormTests.test_custom_form_field_order.<locals>.TestSignupForm   )r~  N)rS  rT  rU  r   Z	CharFieldrb   r  Zfield_orderrE   Zexpected_field_orderrE   rF   TestSignupForm  s   r  c                   @   s   e Zd ZdS )zLCustomSignupFormTests.test_custom_form_field_order.<locals>.CustomSignupFormNrS  rT  rU  rE   rE   rE   rF   CustomSignupForm  s   r  )r   ZFormr   rj   listr   keys)rC   r  r  r   rE   r  rF   test_custom_form_field_orderx  s    
z2CustomSignupFormTests.test_custom_form_field_orderc                 C   st   ddl m} ddlm} G dd dt}| }ddddd	}||d
d}t|j|sXt|  t|j|sptd S )Nr   )r!   )DeferredAttributec                   @   s   e Zd ZdS )zICustomSignupFormTests.test_user_class_attribute.<locals>.CustomSignupFormNr  rE   rE   rE   rF   r    s   r  rK   r
  zvery-secretr   Try  )	Zdjango.contrib.authr!   Zdjango.db.models.query_utilsr  r   
isinstancerK   r   rz  )rC   r!   r  r  r`  r   r   rE   rE   rF   test_user_class_attribute  s    z/CustomSignupFormTests.test_user_class_attributeN)rS  rT  rU  r   r  r  rE   rE   rE   rF   r  w  s   
r  c                   @   sV   e Zd Zdd Zeejjddd Zeejj	ddd Z
eejjddd	 Zd
S )AuthenticationBackendTestsc                 C   s2   t  jjdddd}||j |  || _d S NTrs   r   r   rO   rK   )r!   r<   r=   rX   rK   rY   rN   rz   rE   rE   rF   rG     s      z AuthenticationBackendTests.setUprH   c                 C   sL   | j }t }| |jd |j|jdj|j | |jd |j|jdd  d S N)r   rK   rU   )rN   r&   rj   authenticaterK   r   rO   rC   rN   ZbackendrE   rE   rF   test_auth_by_username  s$        z0AuthenticationBackendTests.test_auth_by_usernamec                 C   sL   | j }t }| |jd |j|jdj|j | |jd |j|jdd  d S r  rN   r&   rj   r  rO   rK   r   r  rE   rE   rF   test_auth_by_email  s$        z-AuthenticationBackendTests.test_auth_by_emailc                 C   sP   | j }t }| |jd |j|jdj|j | |jd |j|jdj|j d S r  r  r  rE   rE   rF   test_auth_by_username_or_email  s$        z9AuthenticationBackendTests.test_auth_by_username_or_emailN)rS  rT  rU  rG   r   r$   rV  USERNAMEr  rX  r  rW  r  rE   rE   rE   rF   r    s   

r  c                   @   s0   e Zd ZejdejddZG dd dej	Z	dS )UUIDUserTF)Zprimary_keydefaultZeditablec                   @   s   e Zd ZdZdS )zUUIDUser.MetaZAUTH_USER_MODELN)rS  rT  rU  Z	swappablerE   rE   rE   rF   Meta  s   r  N)
rS  rT  rU  r   Z	UUIDFielduuiduuid4re   r   r  rE   rE   rE   rF   r    s   r  c                   @   sP   e Zd Zdd Zdd Zdd Zeddd	d
 Zedddd Zdd Z	dS )
UtilsTestsc                 C   s   t  j| _d S ro   )r  r  hexuser_idrp   rE   rE   rF   rG     s    zUtilsTests.setUpc              	   C   s8   t d&}t|_| t| jt| j W 5 Q R X d S )N$allauth.account.utils.get_user_model)r    r  return_valuerj   r*   r  r  UUID)rC   
mocked_gumrE   rE   rF   0test_url_str_to_pk_identifies_UUID_as_stringlike  s    
z;UtilsTests.test_url_str_to_pk_identifies_UUID_as_stringlikec                 C   s(   t dddd}| t|t|j d S r  )r  rj   r+   r  r   rz   rE   rE   rF   3test_pk_to_url_string_identifies_UUID_as_stringlike  s    z>UtilsTests.test_pk_to_url_string_identifies_UUID_as_stringlikeF)Z ACCOUNT_PRESERVE_USERNAME_CASINGc                 C   s0   t   }t|d | t|d tdd d S )N	CamelCase	camelcaseZFooBarr!   r,   rj   r)   rz   rE   rE   rF   test_username_lower_cased  s    
z$UtilsTests.test_username_lower_casedTc                 C   s0   t   }t|d | t|d tdd d S )Nr  r  Zfoobarr  rz   rE   rE   rF   test_username_case_preserved  s    
z'UtilsTests.test_username_case_preservedc                 C   sL   t  dd}d}ddg}|D ]*}t|}|td|i}| || qd S )Nzjohn<br/>doerJ   zjohn&lt;br/&gt;doez){% load account %}{% user_display user %}z5{% load account %}{% user_display user as x %}{{ x }}rN   )r!   r   Zrenderr   rj   )rC   rN   Zexpected_nameZ	templatestemplatetr   rE   rE   rF   test_user_display  s    zUtilsTests.test_user_displayN)
rS  rT  rU  rG   r  r  r   r  r  r  rE   rE   rE   rF   r    s   

r  c                   @   sR   e Zd ZdddZeddddd Zeddded	ed
eddd ZdS )ConfirmationViewTestsr   r   c                 C   s6   t  jj|dd}|r"|| n|  |  |S r   r   )rC   rK   rU   rN   rE   rE   rF   r   $  s    z"ConfirmationViewTests._create_userT)r   Z#ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATIONc                 C   s   |   }tjj|dddd}t|j}t }t| | j	j
}t||d< |  | j	td|gd}tjj|jd}| |j |jt |j|t jjd	d
td t| d S )Nr9  FTr:  account_userr  r  r   r   rJ   )r(  r   r   rN   r)  )r   r   r<   r=   r   r  r   r'   r*  rZ   r   r+   rY   r[   r   ry   r   r   rQ   r+  r!   r,  r-  )rC   rN   rO   r  r.  r   r^   rE   rE   rF   test_login_on_confirm-  s0       

z+ConfirmationViewTests.test_login_on_confirmz#allauth.account.views.perform_loginr  )r  c              	   C   s   t dddd}| jj}t||d< |  td|d}d}tt|d	}||_||j_	t
d
d|_	td| | jtd|gd W 5 Q R X |jstd S )NTrs   r   r  r  F)rQ   rN   Zmockkey)Zautospecr  r  )Zredirect_toz+allauth.account.views.EmailConfirmationHMACr  r  )r  rZ   r   r+   rY   r   r   r^  Zfrom_keyr  r   r    r[   r   calledr   )rC   r  Zmock_perform_loginrN   r   rO   r  r  rE   rE   rF   test_login_on_confirm_uuid_userN  s     z5ConfirmationViewTests.test_login_on_confirm_uuid_userN)r   r   )	rS  rT  rU  r   r   r  r    r  r  rE   rE   rE   rF   r  #  s   
	

r  F)rQ  c                   @   s   e Zd Zdd ZdS )TestResetPasswordFormc                 C   s<   t  }|jjddddd ddi}t|}| |  d S )Nmike123mike@ixample.orgtest123F)r   rO   r!   r<   rK  r   r   rz  rC   r`  r   r   rE   rE   rF   &test_user_email_not_sent_inactive_userl  s       z<TestResetPasswordForm.test_user_email_not_sent_inactive_userN)rS  rT  rU  r  rE   rE   rE   rF   r  j  s   r  c                   @   s8   e Zd Ze dZdd Zdd Zdd Zdd	 Z	d
S )TestCVE2019_19844r  c                 C   s|   t  }|jddd |jddd ddi}t|}| |  || j | t	t
jd | t
jd jdg d S )	Nr  mike@example.orgr  mike456   mıke@example.orgrO   r#   r   r!   r<   rK  r   r   rz  rY   global_requestrj   r   r   r   r   r  rE   rE   rF   !test_user_email_unicode_collision{  s    z3TestCVE2019_19844.test_user_email_unicode_collisionc                 C   s|   t  }|jddd |jddd ddi}t|}| |  || j | t	t
jd | t
jd jdg d S )	Nr  r  r  r     mike@ıxample.orgrO   r#   r   r  r  rE   rE   rF   (test_user_email_domain_unicode_collision  s    z:TestCVE2019_19844.test_user_email_domain_unicode_collisionc                 C   s8   t  }|jddd ddi}t|}| |  d S )Nr  r  r  rO   r  r  r  rE   rE   rF   -test_user_email_unicode_collision_nonexistent  s
    z?TestCVE2019_19844.test_user_email_unicode_collision_nonexistentc                 C   s8   t  }|jddd ddi}t|}| |  d S )Nr  r  r  rO   r  r  r  rE   rE   rF   4test_user_email_domain_unicode_collision_nonexistent  s
    zFTestCVE2019_19844.test_user_email_domain_unicode_collision_nonexistentN)
rS  rT  rU  r   ry   r  r  r  r  r  rE   rE   rE   rF   r  v  s
   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
RequestAjaxTestsc                 K   s"   | j jtdddddddf|S )Nr   r~   r|   r   )rZ   r[   r   )rC   r   rE   rE   rF   _send_post_request  s    	z#RequestAjaxTests._send_post_requestc                 C   s,   |   }| d|j | j|tjdd d S )Nr   FrV   )r  rj   r   r\   r   r3   r   rE   rE   rF   test_no_ajax_header  s      z$RequestAjaxTests.test_no_ajax_headerc                 C   s4   | j dd}| d|j | tj| d  d S )Nr   r   r   r   r  rj   r   r   r3   r   r   rE   rE   rF   !test_ajax_header_x_requested_with  s    z2RequestAjaxTests.test_ajax_header_x_requested_withc                 C   s4   | j dd}| d|j | tj| d  d S )Nr   )ZHTTP_ACCEPTr   r   r  r   rE   rE   rF   test_ajax_header_http_accept  s    z-RequestAjaxTests.test_ajax_header_http_acceptN)rS  rT  rU  r  r  r  r  rE   rE   rE   rF   r    s   r  r  ZBACKENDz-django.core.cache.backends.locmem.LocMemCacheZreset_password_emailz1/m)ZCACHESZACCOUNT_RATE_LIMITSc                   @   s   e Zd Zdd ZdS )RateLimitTestsc                 C   s`   t  jjdd | jjtdddid}|jdks6t| jjtdddid}|jdks\td S )	Nr9  )rO   r   rO   r   r   zA@B.COMi  )r!   r<   r=   rZ   r[   r   r   r   r   rE   rE   rF   $test_case_insensitive_password_reset  s      z3RateLimitTests.test_case_insensitive_password_resetN)rS  rT  rU  r  rE   rE   rE   rF   r    s   	r  )[
__future__r   r   r  datetimer   r   r   Zdjango.confr   Zdjango.contribr   Zdjango.contrib.auth.modelsr   r   Zdjango.contrib.messages.apir	   Z"django.contrib.messages.middlewarer
   Z"django.contrib.sessions.middlewarer   Zdjango.corer   r   Zdjango.core.exceptionsr   Z	django.dbr   Zdjango.httpr   Zdjango.templater   r   Zdjango.test.clientr   r   Zdjango.test.utilsr   Zdjango.urlsr   Zdjango.utils.timezoner   Zallauth.app_settingsr>   Zallauth.account.formsr   r   r   Zallauth.account.modelsr   r   r   Zallauth.testsr   r   r    Zallauth.utilsr!   r"   rG  r$   Zadapterr%   Zauth_backendsr&   Zsignalsr'   r(   utilsr)   r*   r+   r,   ZRegexValidatorZtest_username_validatorsrY  rZ  rV  r  r6   r[  rx  r  r  r  r  r  r  r  r  r  rE   rE   rE   rF   <module>   s   	        ` %<8C*G)  