
    g,                        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 d dl	m
Z
mZmZ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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-m.Z.m/Z/ d dl0m1Z1  e j2        e3          Z4 e            Z5d Z6 G d d          Z7d Z8 G d de          Z9 G d de          Z:d Z;dS )    N)datetime)renderredirect)FormView)PasswordChangeForm)authenticateloginlogoutupdate_session_auth_hashget_user_model)default_token_generator)messages)loader)validate_email)ValidationError)	send_mail)force_bytes)urlsafe_base64_encodeurlsafe_base64_decode)Q)EMAIL_HOST_USER)	AesCrypto)LOGIN_REDIRECTUserTypeEnum)validate_passwordvalidate_role)CaptchaFormPasswordResetRequestFormSetPasswordForm)Usersc                    d}d}t                      }||d}| j        dk    rWd| j        v rMt          | j                  }|                                r| j        d         }| j        d         }t	          | j        d                   }t	          | j        d	                   }| j        d
         }	| j        d         }
t          |	|
          }|                    |          }|                    |          }|d |         }|d |         }t          | ||          x}r-|j        t          j
        j        k    s|j        t          j        j        k    rt          | |           t          d          S t          | |           t          j                    j        }t          j                    j        dk    r"|dz
   d|dz
   }|dz
   d| }| d|dz    }n!|dz
   d| }| d|dz    }|dz    d|dz    }|| j        d<   || j        d<   || j        d<   || j        d<   t)          j        |j                  x}rt          |          S n,d}t,                              |           ||d<   n
|j        |d<   t3          | ||          S )NzBRDWT | Loginzusers/login.html)
page_titler   POST
submitFormnewUsernamenewPasswordulplkeyiv)usernamepasswordz
/dashboard      -   previous_fin_yearcurrent_fin_yearnext_fin_yearr+   zInvalid username or password!errormessageerrorCap)r   methodr#   is_validintr   decryptr   	user_typer   ADMINvalueOPERATORr	   r   r   nowyearmonthsessionr   getloggererrorerrorsr   )requestr"   templateCaptchaFormscontextr+   r,   usernameLengthpasswordLengthr)   r*   aesdecryptedUsernamedecryptedPasswordusercurrent_yearr1   r2   r3   destinationmsgs                        4D:\Project\DJANGO\BRDWT Project\brdwt\users\views.pyLoginrT      s    J!H==L'EEG~LGL$@$@"7<00  "" (	6|M2H|M2H d!344N d!344N,u%Cd#BC$$C #H 5 5 #H 5 5 1/>/ B 1/>/ B#G6GRcddddt .>\%7%===S_ShSnAnAn'4(((#L111'4((('|~~2<>>'1,,+7!+;(P(PlQ>N(P(P%*6*:'K'K\'K'K$'3$H$HlQ6F$H$HMM+7!+;(L(Ll(L(L%*6'K'K9I'K'K$'3a'7$L$L,:J$L$LM7H 346F 233@0.6
+"0"4T^"D"DD; 1#K0001 6S!!!*-''"."5GJ'8W---    c                   *    e Zd Zd Zed             ZdS )UserManagementc                     || _         d S )N)r:   )selfr:   s     rS   __init__zUserManagement.__init__R   s    "rU   c                    d}d}d|dd}|j         dk    r^|j                            d          }|j                            d          }|j                            d	          }|j                            d
          }d|j        v r|j                            d          }	t          ||          }
|
d         s|
d         |d<   nt          j                            |                                          rd|d<   nut          j                            |	|||dd          	                                 d|d<   n7d|j        v r|j                            d          }t          j                            |          
                    |                                          rd|d<   nt          j                            |                                          }||_        |	                                 d|d<   nud|j        v rl|j                            d          }t          j                            |                                          }d|_        |	                                 d|d<   t          j                            d                                                              d          |d<   t!          |||          S ) Nzusers/user_management.htmlzBRDWT | User Managementnav-expanded
nav-active)master_expandr"   user_managementr#   r+   districtr,   Confirm_passwordcreate_userr:   statusmessagerD   r+   zSame username already exist!T)r:   r+   district_idr,   is_staff	is_activezSuccessfully Created.successupdate_usercode)idSuccessfully Updated.deleteFzSuccessfully Deleted.)rh   rl   	user_list)r6   r#   rB   r   r    objectsfilterexistsrb   saveexcludefirstr+   rh   allorder_byr   )rY   rF   rG   r"   rI   namerf   r,   confirm_passwordr:   check_passwordrk   get_datas                rS   userManagementzUserManagement.userManagementU   s   /.
$2*amnn>V##<##J//D!,**:66K|''
33H&|//0BCC ,,#L,,[99	!28=M!N!N%h/ E'5i'@GG$$}++T+::AACC E+I((11IPTbm  yA  LP  \`1  a  a  f  f  h  h  h-D	**',..|''//='''66>>$>GGNNPP A'EGG$$$}33t3<<BBDDH(,H%MMOOO)@GI&&W\))|''// =//4/88>>@@%*"%<	"$}33d3CCGGIIRRSWXXgx111rU   N)__name__
__module____qualname__rZ   r   r|    rU   rS   rW   rW   P   s>        # # # )2 )2 ])2 )2 )2rU   rW   c                    d}d}t          | j                  }d|d|d}| j        dk    r| j                            d          }| j                            d          }t          ||          }|d         s|d	         |d
<   |d         |d<   n]t          | j        | j                  }|                                r*|                                }t          | |           d|d
<   n||d<   t          | ||          S )Nzusers/user_profile.htmlzBRDWT | User Profiler\   r]   )r^   r"   r_   formr#   new_password1rc   rd   rR   error_statusrm   errormsg)
r   rO   r6   r#   rB   r   r7   rs   r   r   )	rF   rG   r"   r   rI   new_passwordr   rz   rO   s	            rS   userProfiler      s   (H'Jgl++D .j]iswxxG~|''88((99*<GGh' 
	++I6GEN&4X&>GN##%glGLAAD}} +yy{{($777!8&*
#'8W---rU   c                   6    e Zd ZdZdZeZed             Zd Z	dS )ResetPasswordRequestViewz#users/forgot_password_template.htmlz/reset_password/c                 H    	 t          |            dS # t          $ r Y dS w xY w)NTF)r   r   emails    rS   validate_email_addressz/ResetPasswordRequestView.validate_email_address   s<    	5!!!4 	 	 	55	s    
!!c           	         |                      |j                  }|                                r|j        d         }|                     |          du r?t
          j                            t          |          t          |          z            }n t
          j                            |          }|	                                rd}d}|D ]}	|	j
        |j        d         dt          t          |	j                            |	t          j        |	          d	d
}
t#          j        ||
          }d                    |                                          }t#          j        ||
          }t+          ||t,          |	j
        gd           |                     |          }t1          j        |d           |S |                     |          }t1          j        |d           |S )Nemail_or_usernameTr   re   z users/password_reset_subject.txtzusers/password_reset_email.html	HTTP_HOSTBRDWThttp)r   domain	site_nameuidrO   tokenprotocol F)fail_silentlyzOYour password reset is in progress, please check your email for further details)
form_classr#   r7   cleaned_datar   Userrp   rq   r   rr   r   METAr   r   pkr   
make_tokenr   render_to_stringjoin
splitlinesr   r   
form_validr   ri   form_invalidrD   )rY   rF   argskwargsr   dataassociated_userssubject_template_nameemail_template_namerO   csubjectr   results                 rS   postzResetPasswordRequestView.post   s   w|,,==?? 	:$%89D&&t,,44  $|2214===1dCSCSCS3STT  $|22D2AA""$$ 	$F!"C( ^ ^!Z%l;7!(0TW1E1EFF 4?EE &  !12GKK'''"4"4"6"677/0CQGG'5/DJ<W\]]]]]__T**FW&wxxxM""4((w qrrrrU   N)
r}   r~   r   template_namesuccess_urlr   r   staticmethodr   r   r   rU   rS   r   r      sK        9M$K)J  \% % % % %rU   r   c                   "    e Zd ZdZdZeZddZdS )PasswordResetConfirmViewzusers/reset_password.htmlz/login/Nc                    t                      }|                     |j                  }||J 	 t          |          }|j                            |          }	n%# t          t          t          |j	        f$ r d }	Y nw xY w|	t          j        |	|          r|                                r`|j        d         }
|	                    |
           |	                                 t!          j        |d           |                     |          S t!          j        |d           |                     |          S t!          j        |d           |                     |          S )N)r   new_password2zPassword has been reset.z'Password reset has not been successful.z+The reset password link is no longer valid.)r   r   r#   r   _default_managerrB   	TypeError
ValueErrorOverflowErrorDoesNotExistr   check_tokenr7   r   set_passwordrs   r   ri   r   rD   r   )rY   rF   uidb64r   argr   	UserModelr   r   rO   r   s              rS   r   zPasswordResetConfirmView.post   s]    #$$	w|,,!e&7&7&7	'//C-11S199DD:}i6LM 	 	 	DDD	  7 CD% P P}} /#0A!!,///		 *DEEEt,,,w(QRRR((...N7$QRRR$$T***s   *A A=<A=)NN)r}   r~   r   r   r   r   r   r   r   rU   rS   r   r      s7        /MK J+ + + + + +rU   r   c                 >    t          |            t          d          S )Nr	   )r
   r   )rF   s    rS   Logoutr      s    
7OOOGrU   )<loggingr   django.shortcutsr   r   django.views.genericr   django.contrib.auth.formsr   django.contrib.authr   r	   r
   r   r   django.contrib.auth.tokensr   django.contribr   django.templater   django.core.validatorsr   django.core.exceptionsr   django.core.mailr   django.utils.encodingr   django.utils.httpr   r   django.db.models.query_utilsr   brdwt.settingsr   utils.cryptor   utils.enumsr   r   utils.validationsr   r   users.formsr   r   r   users.modelsr    	getLoggerr}   rC   r   rT   rW   r   r   r   r   r   rU   rS   <module>r      s          - - - - - - - - ) ) ) ) ) ) 8 8 8 8 8 8 e e e e e e e e e e e e e e > > > > > > # # # # # # " " " " " " 1 1 1 1 1 1 2 2 2 2 2 2 & & & & & & - - - - - - J J J J J J J J * * * * * * * * * * * * " " " " " " 4 4 4 4 4 4 4 4 > > > > > > > > N N N N N N N N N N      		8	$	$~0. 0. 0.f/2 /2 /2 /2 /2 /2 /2 /2d. . .03 3 3 3 3x 3 3 3l+ + + + +x + + +@    rU   