U
    9dD                     @   sp  d dl Z d dl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mZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZ d dlmZ ddlmZm Z m!Z! ddl"T d dl#T e$e%Z&dd Z'G dd deZ(G dd deeZ)G dd deZ*G dd deZ+G dd deZ,G dd deeZ-G dd  d eeZ.d!d" Z/d#d$ Z0dS )%    N)View)JsonResponseHttp404)renderredirect)timezone)gettext_lazy)messages)csrf_exempt)make_password)update_session_auth_hash)LoginRequiredMixin)authenticateloginlogout)get_current_site   )UserToken	TokenType)*c                 C   s   | j ddkS )NHTTP_X_REQUESTED_WITHXMLHttpRequest)METAget)request r   7/var/www/html/UseVoiceDocker/src/apps/accounts/views.pyis_ajax   s    r   c                   @   s   e Zd Zdd Zdd ZdS )	LoginViewc                 O   s$   |j jrtdS d}i }t|||S )Nlanding:indexzaccounts/signin.html)useris_authenticatedr   r   selfr   argskwargstemplatecontextr   r   r   r   "   s
    zLoginView.getc                 O   s   |j d}|j d}|j d}|r|rtjj|d }|r|jsd|jsdtdd| ddS |j	s~|js~tdd	dS |
|std
ddS t|||d}|d k	r|s|jd d|j_t|| tdddS ntd
ddS td
ddS )Nemailpasswordremember_mer)   infoz3Sorry, your account Not Verified, Check Your Email z) For Verification Link Or Contact SupportresultmessagezaSorry, your account is in-Active, Check Your Email For Activation Request Link Or Contact Supporterrorz=Password is incorrect. Kindly Try Again With A Valid Password)r)   r*   r   TsuccesszYou are logged in.:Email does not exist. Kindly Try Again With A Valid Email.z	go to 404)POSTr   r   objectsfilterfirstis_verifiedis_superuserr   	is_activecheck_passwordr   session
set_expirymodifiedr   )r$   r   r%   r&   r)   r*   r+   r!   r   r   r   post)   s*    

zLoginView.postN__name__
__module____qualname__r   r?   r   r   r   r   r   !   s   r   c                   @   s   e Zd Zdd ZdS )
LogoutViewc                 O   s   t | | jj  tdS )Nzaccounts:signin)r   r   r<   flushr   )r$   r   r%   r&   r   r   r   r   U   s    zLogoutView.getN)rA   rB   rC   r   r   r   r   r   rD   T   s   rD   c                   @   s   e Zd Zdd Zdd ZdS )RegistrationViewc           	      O   sr   |j jrtdS d }d }z|jd }tjj|d}W n" tp@tjk
rV   td Y S X ||d}d}t	|||S )Nr    planZplan_id__iexact)plan_objr0   zaccounts/signup.html)
r!   r"   r   r<   Planr5   r   KeyErrorDoesNotExistr   )	r$   r   r%   r&   rI   r0   plan_idr(   r'   r   r   r   r   [   s    
zRegistrationView.getc           	      O   s  d }d|j kr|j d|jkr|j d|jd< zFtjj|jd d rvddd}td|j d   t	|W S W n( tj
k
r   dd	d}t	| Y S X tjj|j d
d rddd}t	|S t }|j d|_|j d|_|j d|j |_|j d
|_t|j d|_d|_|  t|t| tjj|j d d}t }||_||_d|_d|_|  t }d|j kr|j d|_|j d|_||_|j d|_d|_|  dd|j dd}t	|S )NZ
membershiprG   rH   zFound SuccesszMembership ID Found Successr.   zID z	Not FoundzPlease Select Plan Correctlyr)   r,   r1   z8Email already used. Kindly Try Again With Another Email.
first_name	last_name r*   FZPlanID)rM   ZOrderIDZConversationIDZSubscriptionIDTr2   z$You are signed up. Check your email z to activate your account.) r4   r   r<   rJ   r5   r6   existsloggerr-   r   rL   r   r7   rN   rO   usernamer)   r   r*   r:   savesend_activation_emailr   SubscriptionrG   r!   paid_statusPaymenttransactionIDconversationIDsubscriptionsub_id)	r$   r   r%   r&   responsenew_userZplan_instanceZnew_subscriptionZnew_paymentr   r   r   r?   r   s^    

zRegistrationView.postNr@   r   r   r   r   rF   Z   s   rF   c                   @   s   e Zd Zdd Zdd ZdS )PasswordResetViewc                 O   s   d}ddi}t |||S )Nzaccounts/reset_password.htmlr0    )r   r#   r   r   r   r      s    zPasswordResetView.getc                 O   sh   t |rd|jjsdtjj|jdd }|rRt	|t
| dd|j dd}n
ddd}t|S d S )	Nr)   r,   r2   zCheck your email z to Reset Your Password.r.   r1   r3   )r   r!   r"   r   r5   r6   r4   r   r7   send_password_reset_emailr   r)   r   )r$   r   r%   r&   r!   r]   r   r   r   r?      s    
zPasswordResetView.postNr@   r   r   r   r   r_      s   r_   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )PasswordChangeViewc           	      O   s^   |  |\}}|sFt||d  d|kr:|d r:tdS t|d d}ddi}t|||S )Nr0   expiredlanding:password_resetzaccounts/password_change.htmlr`   )validate_tokenr	   r1   r   r   r   )	r$   r   tokenr%   r&   validate_obj	token_objr'   r(   r   r   r   r      s    zPasswordChangeView.getc                 O   s   t |r| |\}}|d sRt||d  d|krF|d rFtdS t|d t|jd|j	_
|j	  |  ddd}t|S d S )	Nstatusr0   rc   rd   r*   r2   zYour password has been changed.r.   )r   re   r	   r1   r   r   r   r4   r   r!   r*   rT   deleter   )r$   r   rf   r%   r&   rg   rh   r]   r   r   r   r?      s    

zPasswordChangeView.postc                 C   s"  zt jj|d}|jtjkr,ddddfW S |jt k rJddddfW S t	j
||jdgd}|d	|jjkrddddfW S |d
tjkrddddfW S ddd|fW S  t	jk
r   dddddf Y S  t	jk
 r   ddddf Y S  t jk
r   ddddf Y S X dS )a  
        Validate the given token and return a dictionary with a message, status and the token object if valid.
        :param token: The token to be validated
        :return: A dictionary containing the validation message, status and the token object if valid.
        rf   Invalid TokenFr0   ri   NToken has expiredHS256
algorithmsuser_id
token_typezValid TokenT)r0   ri   rc   )r   r5   r   rs   r   PasswordReset
expires_atr   nowjwtdecode
secret_keyr!   r)   ExpiredSignatureErrorDecodeErrorrL   )r$   rf   rh   decoded_tokenr   r   r   re      s$    z!PasswordChangeView.validate_tokenN)rA   rB   rC   r   r?   re   r   r   r   r   rb      s   rb   c                   @   s   e Zd Zdd ZdS )UpdateEmailViewc                 O   s   t |r|jjr|jd}|jd}|r|r|j|rt|jrTtdddS tj	j
|dj|jjd rtdddS |jj|krtdd	dS |j| td
ddS tdddS ntdddS d S )N	new_emailr*   r1   zEmail change limit reachedri   r0   r,   )pkzEmail already in usez(This Email is your current Account Emailr2   zEmail updated successfullyIncorrect passwordz"New email Or password not provided)r   r!   r"   r4   r   r;   email_change_limit_reachedr   r   r5   r6   excluder   rQ   r)   update_email)r$   r   r%   r&   r~   r*   r   r   r   r?     s     
zUpdateEmailView.postNrA   rB   rC   r?   r   r   r   r   r}     s   r}   c                   @   s   e Zd Zdd ZdS )UpdatePasswordViewc                 O   s   t |r|jjr|jd}|jd}|r|r|j|rzt|jrTtdddS |j| t	||j tdddS tdddS ntdd	dS d S )
Nnew_passwordr*   r1   zPassword change limit reachedr   r2   zPassword updated successfullyr   z)New password or Old password not provided)
r   r!   r"   r4   r   r;   password_change_limit_reachedr   update_passwordr   )r$   r   r%   r&   r   r*   r   r   r   r?     s    
zUpdatePasswordView.postNr   r   r   r   r   r     s   r   c              
   C   s  zt jj|d}|jtjkr$td|jt	 k r:tdt
j||jdgd}|d|jjkrhtd|dtjkrtd|j}|jrt| d td	W S d
|_d
|_|  |  t| d td	W S W n t
jk
r   t| d td	 Y S  t
jk
r,   t| d td	 Y S  t jk
rV   t| d td	 Y S  tk
r } z"t| d|  td	 W Y S d}~X Y nX dS )z
        Verify the user's account using the provided token.
        :param request: The request object
        :param token: The verification token
        :return: A redirect to the home page
    rk   rl   rn   ro   rp   rr   rs   zYour account is already active.homeTzYour account has been verified.zAn error occurred: N)r   r5   r   rs   r   EmailVerification
ValueErrorru   r   rv   rw   rx   ry   r!   r)   r:   r	   r-   r   r8   rT   rj   r2   rz   r1   r{   rL   	Exception)r   rf   rh   r|   r!   er   r   r   activate2  sB    
r   c                 C   sJ   t | rF| jdkrF| j}d|_|  t|  | j  tdddS dS )zt
    Disable the user's account
    :param request: The request object
    :return: A redirect to the home page
    r4   Fz"Your account has been deactivated.r2   rm   N)	r   methodr!   r:   rT   r   r<   rE   r   )r   r!   r   r   r   deactivate_accountf  s    
r   )1rw   loggingdjango.viewsr   django.httpr   r   django.shortcutsr   r   django.utilsr   django.utils.translationr   _django.contribr	   django.views.decorators.csrfr
   django.contrib.auth.hashersr   django.contrib.authr   Zdjango.contrib.auth.mixinsr   r   r   r   django.contrib.sites.shortcutsr   modelsr   r   r   utilsZapps.subscriptions.models	getLogger__file__rR   r   r   rD   rF   r_   rb   r}   r   r   r   r   r   r   r   <module>   s6   
3[>4