3
V                 @   s   d dl mZ d dlmZmZ d dlmZmZ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 e Zdd	 ZG d
d deZG dd dejZG dd deZeedej ej eZ G dd dejZG dd deZ!G dd de
Z"dS )    )unicode_literals)formsVERSION)ReadOnlyPasswordHashFieldReadOnlyPasswordHashWidgetPasswordResetFormUserChangeForm)get_user_model)identify_hasher)ugettext_lazyugettext)format_htmlc             C   sB   yddl m} | |kS  tk
r<   ddl m} | j| S X d S )Nr   )UNUSABLE_PASSWORD)UNUSABLE_PASSWORD_PREFIX)django.contrib.auth.hashersr   ImportErrorr   
startswith)Zpwr   r    r   O/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/authtools/forms.pyis_password_usable   s    r   c               @   s   e Zd ZdZdd ZdS ) BetterReadOnlyPasswordHashWidgetzK
    A ReadOnlyPasswordHashWidget that has a less intimidating output.
    c             C   s   yddl m} W n  tk
r0   ddlm} Y nX || j|}| sPt| rZtd}n2yt| W n tk
r   td}Y n
X td}t	d||dS )Nr   )flatattzNo password set.z5Invalid password format or unknown hashing algorithm.z*************z,<div{attrs}><strong>{summary}</strong></div>)attrssummary)
Zdjango.forms.utilsr   r   Zdjango.forms.utilZbuild_attrsr   r   r
   
ValueErrorr   )selfnamevaluer   r   Zfinal_attrsr   r   r   r   render"   s    
z'BetterReadOnlyPasswordHashWidget.renderN)__name__
__module____qualname____doc__r   r   r   r   r   r      s   r   c                   s   e Zd ZdZededdZejedejdZ	ejedejedd	Z
G d
d dZ fddZdd Zd fdd	Z  ZS )UserCreationFormzh
    A form for creating new users. Includes all the required
    fields, plus a repeated password.
    z%The two password fields didn't match.z-A user with that %(username)s already exists.)password_mismatchduplicate_usernamePassword)labelwidgetzPassword confirmationz3Enter the same password as above, for verification.)r'   r(   	help_textc               @   s"   e Zd ZeZejfeej ZdS )zUserCreationForm.MetaN)	r   r    r!   UsermodelUSERNAME_FIELDtupleZREQUIRED_FIELDSfieldsr   r   r   r   MetaI   s   r/   c                s6   t t j||  fdd} jtj jj| d S )Nc                sF   yt jj|  W n t jk
r&   | S X tj jd dt ji d S )Nr%   username)r*   _default_managerZget_by_natural_keyZDoesNotExistr   ValidationErrorerror_messagesr,   )r   )r   r   r   %validate_uniqueness_of_username_fieldP   s    zHUserCreationForm.__init__.<locals>.validate_uniqueness_of_username_field)superr#   __init__r.   r*   r,   Z
validatorsappend)r   argskwargsr4   )	__class__)r   r   r6   M   s    zUserCreationForm.__init__c             C   s<   | j jd}| j jd}|r8|r8||kr8tj| jd |S )N	password1	password2r$   )cleaned_datagetr   r2   r3   )r   r;   r<   r   r   r   clean_password2]   s
    z UserCreationForm.clean_password2Tc                s2   t t| jdd}|j| jd  |r.|j  |S )NF)commitr;   )r5   r#   saveZset_passwordr=   )r   r@   user)r:   r   r   rA   e   s
    zUserCreationForm.save)T)r   r    r!   r"   _r3   r   Z	CharFieldZPasswordInputr;   r<   r/   r6   r?   rA   __classcell__r   r   )r:   r   r#   8   s   
r#   c               @   s   e Zd ZdZdd ZdS )(CaseInsensitiveUsernameFieldCreationFormz
    This form is the same as UserCreationForm, except that usernames are lowercased before they
    are saved. This is to disallow the existence of email address usernames which differ only in
    case.
    c             C   s   | j jtj}|r|j }|S )N)r=   r>   r*   r,   lower)r   r0   r   r   r   clean_USERNAME_FIELDt   s    z=CaseInsensitiveUsernameFieldCreationForm.clean_USERNAME_FIELDN)r   r    r!   r"   rG   r   r   r   r   rE   n   s   rE   Zclean_c                   sF   e Zd ZdZeededZG dd dZ fddZ	dd	 Z
  ZS )
r   z
    A form for updating users. Includes all the fields on
    the user, but replaces the password field with admin's
    password hash display field.
    r&   )r'   r(   c               @   s   e Zd ZeZedkrdZdS )zUserChangeForm.Meta      __all__N)rH   rI   )r   r    r!   r*   r+   DJANGO_VERSIONr.   r   r   r   r   r/      s   r/   c                s:   t t| j|| | jjdd }|d k	r6|jjd|_d S )NZuser_permissionscontent_type)r5   r   r6   r.   r>   ZquerysetZselect_related)r   r8   r9   f)r:   r   r   r6      s    zUserChangeForm.__init__c             C   s
   | j d S )Npassword)initial)r   r   r   r   clean_password   s    zUserChangeForm.clean_password)r   r    r!   r"   r   rC   r   rN   r/   r6   rP   rD   r   r   )r:   r   r      s   r   c                   s   e Zd Z fddZ  ZS )AdminUserChangeFormc                s6   t t| j|| | jd js2tjd j| jd _d S )NrN   )r5   rQ   r6   r.   r)   DjangoUserChangeFormZbase_fields)r   r8   r9   )r:   r   r   r6      s    zAdminUserChangeForm.__init__)r   r    r!   r6   rD   r   r   )r:   r   rQ      s   rQ   c                   s8   e Zd Zeeedi Zeded<  fddZ  Z	S )FriendlyPasswordResetFormr3   z[This email address doesn't have an associated user account. Are you sure you've registered?unknownc                s`   t tt| dd }t|r | S | jd }tjjd|d}dd |D }|s\tj	| j
d |S )Nclean_emailemailT)Z	is_activeZemail__iexactc             S   s   g | ]}|j  r|qS r   )Zhas_usable_password).0rB   r   r   r   
<listcomp>   s    z9FriendlyPasswordResetForm.clean_email.<locals>.<listcomp>rT   )getattrr5   rS   callabler=   r*   r1   filterr   r2   r3   )r   Zsuper_clean_emailrV   qsresults)r:   r   r   rU      s    
z%FriendlyPasswordResetForm.clean_email)
r   r    r!   dictrY   OldPasswordResetFormr3   rC   rU   rD   r   r   )r:   r   rS      s   rS   N)#
__future__r   Zdjangor   r   rK   Zdjango.contrib.auth.formsr   r   r   r_   r   rR   Zdjango.contrib.authr	   r   r
   Zdjango.utils.translationr   rC   r   Zdjango.utils.htmlr   r*   r   r   Z	ModelFormr#   rE   setattrr,   rG   Z$CaseInsensitiveEmailUserCreationFormrQ   rS   r   r   r   r   <module>   s&   6