U
    g23                     @   s  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lmZ d dlZd dlZd dlZd dlZd dlmZ d dlZG dd d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ZG dd deZG dd deZdS )    )APIView)Responsestatus   )*)settings)User)RefreshToken)django_pbkdf2_sha256)render_to_string)mailNc                   @   s   e Zd Zdd ZdS )Registerc              
   C   s  z>|j }|d}|d}| }t| |d}|rD|rD|sXtdditjdW S t|}t	j
j|d }|rtdditjdW S td	d
d}t	j
j||||d}||_|  d}	tdd|i}
|
}tj}|}ztj|	|||g|
d W n< tk
r2 } ztdditjd W Y W S d }~X Y nX tddiW S  tk
r~ } ztdt|itjd W Y S d }~X Y nX d S )N	full_nameemailpasswordmessagez$All required fields must be providedr   r   zThe email is already registered  '     )r   r   r   otpzVerify Accountzemail_verification.htmlr   html_messagezYour account has been created, but we encountered an issue sending the verification email. Please contact support for assistance.zHYou have been successfully registered with us. Please verify your email.)datagetlowerprintr   r   HTTP_400_BAD_REQUESThandlerhashr	   objectsfilterfirstZHTTP_409_CONFLICTrandom	randrangecreater   saver   r   EMAIL_HOST_USERr   	send_mail	ExceptionHTTP_500_INTERNAL_SERVER_ERRORstr)selfrequestr   r   r   r   new_passwordapp_user_objthe_otpsubjectr   plain_message
from_emailtoemail_errore r8   A/home/esfera/Desktop/paybag-backend-master/Kolis/userapi/views.pypost1   sD    




*zRegister.postN__name__
__module____qualname__r:   r8   r8   r8   r9   r   0   s   r   c                   @   s   e Zd Zdd ZdS )SocialLoginc              
   C   s  zD|j }|d}|d}|d}|d}|d}|d}|rN|sbtdditjd	W S |sztdd
itjd	W S |stdditjd	W S |stdditjd	W S |stdditjd	W S |stdditjd	W S tjj|d }	|	s
tjj	||||||d}	t
|	}
|	j|	j|	j|	jt|
t|
jd}td|dW S  tk
r } ztdt|itjd	 W Y S d }~X Y nX d S )Nprovider_idr   r   	social_iddevice_type	fcm_tokenr   z$Provider and social_id are required.r   zfull_name is requiredemail is requiredzdevice_type is requiredzfcm_token is required)rA   )r   rA   r@   r   rB   rC   idr   r   is_profile_completedZrefreshaccessSuccessr   r   )r   r   r   r   r   r	   r!   r"   r#   r&   r
   for_userrF   r   r   rG   r,   access_tokenr*   r+   )r-   r.   r   r@   r   r   rA   rB   rC   r0   refresh_tokenallDatar7   r8   r8   r9   r:   k   sN    






   
zSocialLogin.postNr;   r8   r8   r8   r9   r?   j   s   r?   c                   @   s   e Zd Zdd ZdS )OtpVerificationc           
   
   C   sF  z |j }|d}|d}|s6tdditjdW S |sNtdditjdW S ztjj||d}W n< tk
r } ztdi d	tjd W Y W S d }~X Y nX d
t_	tj
j|j|jd}|d |_d|_|  t|}|j|j|j|jt|t|jd}	W n> tk
r@ } ztdt|itjd W Y S d }~X Y nX d S )Nr   r   r   rD   r   otp is requiredr   r   Invalid otprJ   Z sk_test_ui9wRiY8QFwIw8q5M5xhubGP)namer   rF   TrE   )r   r   r   r   r   r	   r!   r*   stripeZapi_keyZCustomerr&   r   r   	stripe_idemail_verifiedr'   r
   rK   rF   rG   r,   rL   r+   )
r-   r.   r   r   r   r0   r7   Zcreate_datarM   rN   r8   r8   r9   r:      s<    

,


	zOtpVerification.postNr;   r8   r8   r8   r9   rO      s   rO   c                   @   s   e Zd Zdd ZdS )	LoginUserc              
   C   sD   z|j }|d}| }|d}|s>tdditjdW S |sVtdditjdW S tjj|d	 }|dkrtdd	itj
dW S tjj|d
d
d }|stdditjdW S |j}t||}t|}	|j|j|j|jt|	t|	jd}
td|
dW S  tk
r> } ztdt|itjd W Y S d }~X Y nX d S )Nr   r   r   rD   r   zpassword is requiredr   r   z:This email does not exist in our database, please registerT)r   r   Zend_date__isnullz=Your account has not been activated, Please contact to admin.rE   zLogin SuccessfullyrJ   )r   r   r   r   r   r   r	   r!   r"   countHTTP_404_NOT_FOUNDr#   ZHTTP_401_UNAUTHORIZEDr   r   verifyr
   rK   rF   r   r   rG   r,   rL   r*   r+   )r-   r.   r   r   r   userr0   check_passwordcheckrM   rN   r7   r8   r8   r9   r:      s8    


zLoginUser.postNr;   r8   r8   r8   r9   rW      s   rW   c                   @   s   e Zd Zdd ZdS )ForgetPasswordc              
   C   sj  z|j }|d}|s&tddiW S tjj|d }|dkrTtdditjdW S tjj|d	 }|rt
dd	d
}||_|  d}tdd|i}|}	tj}
|}ztj||	|
|g|d W n< tk
 r } ztdditjd W Y W S d }~X Y nX tddiW S tddiW S W nF tk
rd } z&t| tdt|itjd W Y S d }~X Y nX d S )Nr   r   zEmail is requiredr   r   zPThis email does not exist in our database, please enter the valid email address.r   r   r   r   zForgot Passwordzforget_password_email.htmlr   r   z>Failed to send the verification email. Please try again later.z7Reset password otp has been sent to your email address.zEmail not exists)r   r   r   r	   r!   r"   rX   r   rY   r#   r$   r%   r   r'   r   r   r(   r   r)   r*   r+   r   r,   )r-   r.   r   r   r[   r0   r1   r2   r   r3   r4   r5   r6   r7   r8   r8   r9   r:      s6    
*zForgetPassword.postNr;   r8   r8   r8   r9   r^      s   r^   c                   @   s   e Zd Zdd ZdS )ForgetPasswordVerificationc              
   C   s   z|j }|d}|d}|s4tdditjdW S |sLtdditjdW S tjj||d }|sztdi d	tjdW S tdd
iW S  t	k
r } ztdt
|itjd W Y S d }~X Y nX d S )Nr   r   r   rD   r   rP   rQ   rR   rJ   rI   )r   r   r   r   r   r	   r!   r"   r#   r*   r,   r+   )r-   r.   r   r   r   r0   r7   r8   r8   r9   r:      s    

zForgetPasswordVerification.postNr;   r8   r8   r8   r9   r_     s   r_   c                   @   s   e Zd Zdd ZdS )SetForgetPasswordc           	   
   C   s  z|j }|d}|d}|d}|s>tdditjdW S |sVtdditjdW S |sntdditjdW S tjj||d	 }t	
|}|r||_d |_|  tdd
iW S tdditjdW S W n> tk
r } ztdt|itjd W Y S d }~X Y nX d S )Nr   r/   r   r   znew_password is requiredr   rD   rP   rQ   rI   zSomething went wrong)r   r   r   r   r   r	   r!   r"   r#   r   r    r   r   r'   r*   r,   r+   )	r-   r.   r   r   r/   r   r0   encrypt_passwordr7   r8   r8   r9   r:   3  s*    



zSetForgetPassword.postNr;   r8   r8   r8   r9   r`   2  s   r`   )Zrest_framework.viewsr   Zrest_framework.responser   rest_frameworkr   modelsdjango.confr   r	   Zrest_framework_simplejwt.tokensr
   Zpasslib.hashr   r   django.template.loaderr   Zdjango.corer   mathr$   pytzstringrT   r   r?   rO   rW   r^   r_   r`   r8   r8   r8   r9   <module>   s&    :0%;%