o
    dm>                     @   s8  d dl mZmZ d dlmZ d dlmZmZ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m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 d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%T 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/ d dl0m1Z1m2Z2 d dl
m3Z3m4Z4 d dlm5Z5m6Z6 d dl7m8Z8m9Z9 d dl7m:Z; d dl<m=Z> d dl?m@Z@ e9 ZAd d! ZBd"ZCG d#d$ d$ZDG d%d& d&eZEG d'd( d(eZFG d)d* d*eZGG d+d, d,eZHG d-d. d.eZIG d/d0 d0eZJG d1d2 d2eEeZKG d3d4 d4eDe)ZLd5d6 ZMd7S )8    )redirectrender)View)UserRegistrationFormUserLoginFormRecoverPasswordFormLockScreenForm)JsonResponseHttpResponse)render_to_string)	send_mail)User)auth)BadHeaderError)urlsafe_base64_encode)default_token_generator)force_bytes)Q)messages)csrf_exempt)method_decorator)get_company_data)*   )SetPasswordForm2)FormView)reverse_lazy)sensitive_post_parameters)never_cache)ImproperlyConfiguredValidationError)HttpResponseRedirect	QueryDict)url_has_allowed_host_and_schemeurlsafe_base64_decode)REDIRECT_FIELD_NAMEget_user_model)login)gettext_lazy)get_current_sitec                 C   s   t | }|j}|S )N)r)   domain)requestcurrent_siter*    r-   5/var/www/html/prime-uav/Admin/authentication/views.pyget_current_domain#   s   r/   _password_reset_tokenc                       s    e Zd ZdZ fddZ  ZS )PasswordContextMixinNc                    s2   t  jdi |}|| jd d| jpi  |S )N)titlesubtitler-   )superget_context_dataupdater2   extra_contextselfkwargscontext	__class__r-   r.   r5   .   s
   z%PasswordContextMixin.get_context_data)__name__
__module____qualname__r7   r5   __classcell__r-   r-   r<   r.   r1   +   s    r1   c                   @   s    e Zd Zg Zdd Zdd ZdS )	LoginViewc                 C   s,   d|j v r	tdS t t d}t|d|S )Nusername	dashboardformcompany_data$pages/authentication/auth-login.html)sessionr   r   r   r   )r9   r+   r;   r-   r-   r.   get7   s   
zLoginView.getc                 C   s   |j d}|j d}|r@|r@tj||d}|d ur6||jd< t|| |jd tj	| t
dS t|d t
dS t|d t
dS )	NrC   passwordrC   rK   i  rD   zInvalid credentials
auth-loginzSome fields are empty)POSTrJ   r   authenticaterI   r'   
set_expiryrB   rC   appendr   r   error)r9   r+   rC   rK   userr-   r-   r.   post>   s   
zLoginView.postN)r>   r?   r@   rC   rJ   rT   r-   r-   r-   r.   rB   4   s    rB   c                   @   s    e Zd ZdZdd Zdd ZdS )RecoverPasswordView(pages/authentication/auth-recoverpw.htmlc                 C   s(   d|j v r	tdS t|| jtt dS )NrC   rD   rE   )rI   r   r   template_namer   r   r9   r+   r-   r-   r.   rJ   \   s   
zRecoverPasswordView.getc                 C   s  |j dkr|jdd}tjj|d rtjj|dd}|D ]}d|d i}|d }q!t|j}|	 r|j
d }tjt|d}	|	 r|	D ]L}
d}d}|
j|
jt|dtt|
j|
t|
d	t d
	}t||}zt||d|
jgdd W n ty   t|d td Y   S w td  S t }t|d|t ddS |dkrt|d tdS t|d tdS t|| jtt dS )NrN   emailzdefault value)rY   rC   zPassword Reset Requestedzpages/authentication/email.txtWebsitehttp)	rC   rY   r*   	site_nameuidrS   tokenprotocolrG   zadmin@example.comF)fail_silentlyzEmail Doesn't Exists zpages-recoverpwpassword_reset_donerV   )password_reset_formrG   )r+   rW   r;    zPlease Enter Your Emailzauth-recoverpwzEmail doesn't  existrE   )methodrN   rJ   r   objectsfilterexistsvaluesr   is_validcleaned_datar   rC   rY   r/   r   r   pkr   
make_tokenr   r   r   r   r   infor   r   rW   )r9   r+   rY   objiuser_detailsrC   rb   dataassociated_usersrS   subjectemail_template_namecr-   r-   r.   rT   b   sV   





zRecoverPasswordView.postN)r>   r?   r@   rW   rJ   rT   r-   r-   r-   r.   rU   Y   s    rU   c                   @      e Zd Zdd ZdS )ConfirmmailViewc                 C      t |ddt iS )Nz+pages/authentication/auth-confirm-mail.htmlrG   r   r   rX   r-   r-   r.   rJ         zConfirmmailView.getNr>   r?   r@   rJ   r-   r-   r-   r.   rw          rw   c                   @   rv   )EmailVerificationViewc                 C   rx   )Nz1pages/authentication/auth-email-verification.htmlrG   ry   rX   r-   r-   r.   rJ      rz   zEmailVerificationView.getNr{   r-   r-   r-   r.   r}      r|   r}   c                   @   rv   )TwoStepVerificationViewc                 C   rx   )Nz4pages/authentication/auth-two-step-verification.htmlrG   ry   rX   r-   r-   r.   rJ      rz   zTwoStepVerificationView.getNr{   r-   r-   r-   r.   r~      r|   r~   c                   @      e Zd Zdd Zdd ZdS )PasswordChangeViewc                 C   s"   i }d|d< t  |d< t|d|S )NzChange Passwordr2   rG   z)pages/authentication/password-change.html)r   r   )r9   r+   greetingr-   r-   r.   rJ      s   
zPasswordChangeView.getc           
      C   s  |j dkr|jj}tjj|d}|jd}|jd}|jd}tjj|d	d}|r|r|rzo||d d kr||kr||d d krtjj|d}|
| |  z	tjj|d}	W n tjyq   tjj|d}	Y nw ||	_||	_|	  td	W S t|d
 tdW S t|d tdW S t|d tdW S  tjy   t|d td Y S w t|d tdS d S )NrN   )idoldpasswordnewpassword1newpassword2)rS   rK   r   rM   z1Old password and new password should be differentchange_passwordz3New password and confirm new password do not match.zOld password does not match.zUser not found.zSome field is empty.)rd   rS   r   r   re   rJ   rN   UserInforf   rh   set_passwordsaveDoesNotExistcreaterK   
updated_byr   r   rR   )
r9   r+   useriduserid2r   rK   	password1crt_passwordrS   userxr-   r-   r.   rT      sJ   





zPasswordChangeView.postNr>   r?   r@   rJ   rT   r-   r-   r-   r.   r      s    r   c                   @   r   )LockScreenViewc                 C   sN   d|j v r	tdS i }| jd }||d< t|d< t |d< t|d< t|d|S )NrC   rD   r   headingrF   rG   rH   )rI   r   rC   r   r   r   r   )r9   r+   r   rC   r-   r-   r.   rJ      s   


zLockScreenView.getc                 C   s   |j dkrl|jd }| jr`| jd }t|}|dk rTtj||d}|d urH||jd< t|| |jd t	j
| i }d|d	< t|d
dS i }d|d< t|d
dS i }d|d< t|d
dS i }d|d< t|d
dS tdS )NrN   rK   r      rL   rC   r   zSuccessfully unlock-screensuccess_messageF)safezinvalid creditionalerror_messagez&Password must be at least 6 characterszTime-out Please Loginsession_timeoutzauth-lock-screen)rd   rN   rC   lenr   rO   rI   r'   rP   rB   rQ   r	   r   )r9   r+   rK   rC   p_lenrS   rq   r-   r-   r.   rT      s6   



zLockScreenView.postNr   r-   r-   r-   r.   r      s    r   c                       s   e Zd ZeZdZdZdZedZ	dZ
edZeZee ee fddZd	d
 Z fddZ fddZ fddZ  ZS )PasswordResetConfirmView2FNzset-passwordrM   z(registration/password_reset_confirm.htmlzEnter new passwordc                    s   d|vsd|vrt dd| _| |d | _| jd ur\|d }|| jkrA| jjt}| j	
| j|r@d| _t j|i |S n| j	
| j|r\|| jjt< | jj|| j}t|S | |  S )Nuidb64r^   z:The URL path must contain 'uidb64' and 'token' parameters.FT)r   	validlinkget_userrS   reset_url_tokenr+   rI   rJ   INTERNAL_RESET_SESSION_TOKENtoken_generatorcheck_tokenr4   dispatchpathreplacer!   render_to_responser5   )r9   argsr:   r^   session_tokenredirect_urlr<   r-   r.   r     s*   

z"PasswordResetConfirmView2.dispatchc                 C   sF   zt | }tjj|d}W |S  ttttjt	fy"   d }Y |S w )N)rk   )
r$   decode	UserModel_default_managerrJ   	TypeError
ValueErrorOverflowErrorr   r    )r9   r   r]   rS   r-   r-   r.   r   @  s   	
z"PasswordResetConfirmView2.get_userc                    s   t   }| j|d< |S )NrS   )r4   get_form_kwargsrS   )r9   r:   r<   r-   r.   r   O  s   

z)PasswordResetConfirmView2.get_form_kwargsc                    sF   |  }| jjt= | jrt| j|| j t| jt	d t
 |S )Nz,Your password has been successfully changed.)r   r+   rI   r   post_reset_login
auth_loginpost_reset_login_backendr   success_r4   
form_valid)r9   rF   rS   r<   r-   r.   r   T  s   
z$PasswordResetConfirmView2.form_validc                    s>   t  jdi |}| jrd|d< |S |d tddd |S )NTr   zPassword reset unsuccessfulF)rF   r2   r   r-   )r4   r5   r   r6   r   r8   r<   r-   r.   r5   `  s   	z*PasswordResetConfirmView2.get_context_data)r>   r?   r@   r   
form_classr   r   r   r   success_urlrW   r   r2   r   r   r   r   r   r   r   r   r   r5   rA   r-   r-   r<   r.   r     s      r   c                 C   s   t |  tdS )NrM   )r   logoutr   )r+   r-   r-   r.   r   p  s   
r   N)Ndjango.shortcutsr   r   django.viewsr   authentication.formsr   r   r   r   django.httpr	   r
   django.template.loaderr   django.core.mailr   django.contrib.auth.modelsr   django.contribr   r   django.utils.httpr   django.contrib.auth.tokensr   django.utils.encodingr   django.db.models.query_utilsr   r   django.views.decorators.csrfr   django.utils.decoratorsr   settings.viewsr   users.modelsformsr   django.views.generic.editr   django.urlsr   django.views.decorators.debugr   django.views.decorators.cacher   django.core.exceptionsr   r    r!   r"   r#   r$   django.contrib.authr%   r&   r'   r   django.utils.translationr(   r   django.contrib.sites.shortcutsr)   r   r/   r   r1   rB   rU   rw   r}   r~   r   r   r   r   r-   r-   r-   r.   <module>   sV    	%:=1\