a
    m
d!+                     @   sJ  d dl Z d dl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m	Z	 d dl
mZmZmZ d dl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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l0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZB d dlCmDZDmEZE ddlFmGZG ddlHmIZI dd lJmKZK d d!lLmMZM e	 ZNejOPejQ eReSZTG d"d# d#e$e*ZUG d$d% d%ejVZWG d&d' d'ejVZXG d(d) d)ejVZYeWZ Z[eXZ Z\eYZ Z]dS )*    N)settings)get_user_model)F	CharFieldValue)LowerSubstrUpper)HttpResponseRedirect)ResetPasswordToken)openapi)swagger_auto_schema)Combine)statusviews)action)ValidationError)CreateModelMixin)AllowAny)Response)GenericViewSet)urlparse)CompanySerializerSocialSerializer)CompanyReviewSocialSourceSocial)FacebookCrawler)GoogleMapCrawler)ReviewSource)email_config_paramtoken_param)EmailVerificationSerializerResendEmailSerializer)UserRegistrationSerializer)send_activation_emailsend_welcome_email   )AdminUserViewSet)CurrentUserViewSet   )reminder)
send_emailc                       s   e Zd ZdZeZej Z	e
gZ fddZ fddZ fddZeegded	d
gdddd Zed
egded
gd	dddd Z  ZS )UserRegistrationViewSetuser_registrationc                    s   | j dkrtS t  S )NZchange_password)r   r$   superget_serializer_class)self	__class__ G/var/www/html/Ranjet/backend/verify_trusted/users/api/views/__init__.pyr1   ;   s    
z,UserRegistrationViewSet.get_serializer_classc                    s"   t  | |j}t|d  d S )Nemail)r0   perform_createdatar'   )r2   
serializeruserr3   r5   r6   r8   G   s    z&UserRegistrationViewSet.perform_createc                    s  dg}| j jd |v r0t j|g|R i |S tjj| j jd d }| j jd }|d }|d }t|t	 d}	t
jj|d }
|
d ur|
jd	urt j|g|R i |S |d u rt j|g|R i |S d
| j jd  d }td|dditjdS d S )Nz82.21.178.108ip)r<   companyr   url_display)output_field)Zurl_display__icontainsTz	Your IP (zw) created at least 1 company. Please contact info@VerifyTrusted to validate you have  permission to create this companyerrorZMSG018)messager<   r   )requestr9   r0   createUserobjectsfilterfirstr   r   r   is_verifiedr   r   HTTP_400_BAD_REQUEST)r2   rC   argskwargsZ
white_listZ
user_checkZcompany_arrayZcompany_requestcompany_urlZstring_valuer=   rA   r3   r5   r6   rD   M   s(    zUserRegistrationViewSet.createmanual_parametersFGETzresend-email)detailmethodsurl_pathc                 C   sl   | j jtjd }|s"tdditjj|d	 }|sDtddi|j
rVtddiS t|j tddiS )Nr7   ZMSG005r7   z$No such user, please register first!rA   zUser is already verifiedz$The verification email has been sent)rC   query_paramsgetr!   namer   rE   rF   rG   rH   	is_activer   r&   r7   )r2   rC   r7   r;   r5   r5   r6   resend_mailb   s    
z#UserRegistrationViewSet.resend_mail)methodrO   zcheck-register)rR   rQ   rS   c                 C   sh   | j j}|tjd }tjj|d }|d urV|j	j
}t|dk rVtdditjdS tdditjdS )N)keyr(   Zis_registerFrB   T)rC   rU   rV   r"   rW   r   rF   rG   rH   r;   passwordlenr   r   HTTP_200_OK)r2   rC   rU   Ztoken_filtertokenr\   r5   r5   r6   check_registerp   s    z&UserRegistrationViewSet.check_register)__name__
__module____qualname__Zthrottle_scoper%   serializer_classrE   rF   allquerysetr   permission_classesr1   r8   rD   r   r!   r   rY   r"   r`   __classcell__r5   r5   r3   r6   r.   3   s"   

r.   c                   @   s@   e Zd ZeZegZejdej	dej
dZeegddd ZdS )VerifyEmailr_   Description)in_descriptiontyperN   c              
   C   s$  |j d}ztj|dtjd}ttj}t	j	
t|d |}|t	j	j|dk rhtdditjdW S tjj|d	 d
}|jrtdtj dW S d|_|  tdtj dW S  tjy } ztdtj dW  Y d }~S d }~0  tjjy } ztdtj dW  Y d }~S d }~0 0 d S )Nr_   HS256)Z
algorithmsr[   exp)tzr7   zToken is expiredrB   user_id)idz
https://%s)redirect_toT)rP   rV   jwtdecoder   
SECRET_KEYpytztimezone	TIME_ZONEdatetimefromtimestampintnowr   r   r^   rE   rF   rX   r
   ADMIN_CLIENT_NAMEsaveZADMIN_CLIENTNAMEZExpiredSignatureError
exceptionsDecodeError)r2   rC   r_   payloadZlocal_tzro   r;   
identifierr5   r5   r6   rV      s6    
zVerifyEmail.getN)ra   rb   rc   r#   rd   r   rg   r   	ParameterIN_QUERYTYPE_STRINGZtoken_param_configr   rV   r5   r5   r5   r6   ri      s   
ri   c                   @   s   e Zd ZeZegZdd ZdS )TestWelcomeEmailc                 C   s   t d g d}tjjddj|  }t|ddd t|dd	 t|d
d t|dd t|dd t|dd t|ddd ttj	dS )Nz
send email)rW   r7   rW   znhuyentrang.test001@gmail.comrT   zusers/email/day1_tpl.htmlzWelcome to VerifyTrusted!rW   zusers/email/day2_tpl.htmlz1Your VerifyTrusted page is live and ready for youzusers/email/day3_tpl.htmlz How to attract customer eyeballszusers/email/day4_tpl.htmlz(How to gain customer trust in 27 secondszusers/email/day5_tpl.htmlz&How to get more clicks on your reviewszusers/email/day6_tpl.htmlu   How’s it going?zusers/email/day7_tpl.htmlzyour 7 day trial has gone fast!company_namerB   )
printrE   rF   rG   values_listdistinctr-   r   r   r^   )r2   rC   fieldsemail_1_daysr5   r5   r6   rV      s    #zTestWelcomeEmail.getN)ra   rb   rc   r#   rd   r   rg   rV   r5   r5   r5   r6   r      s   r   c                   @   s   e Zd ZegZdd ZdS )SendReminderEmailc                 C   s   t   ttjdS )NrB   )r,   r   r   r^   )r2   rC   r5   r5   r6   rV      s    zSendReminderEmail.getN)ra   rb   rc   r   rg   rV   r5   r5   r5   r6   r      s   r   )^rz   jsonloggingrt   rw   
tldextractdjango.confr   django.contrib.authr   django.db.modelsr   r   r   django.db.models.functionsr   r   r	   django.httpr
   Z django_rest_passwordreset.modelsr   drf_yasgr   Zdrf_yasg.utilsr   	pyparsingr   rest_frameworkr   r   rest_framework.decoratorsr   rest_framework.exceptionsr   rest_framework.mixinsr   rest_framework.permissionsr   rest_framework.responser   rest_framework.viewsetsr   urllib.parser   (verify_trusted.companies.api.serializersr   r   Zverify_trusted.companies.modelsr   r   r   r   Z(verify_trusted.crawlers.facebook.crawlerr   Z)verify_trusted.crawlers.googlemap.crawlerr   verify_trusted.reviews.modelsr    verify_trusted.users.api.paramsr!   r"   Z$verify_trusted.users.api.serializersr#   r$   Z1verify_trusted.users.api.serializers.registrationr%   Zverify_trusted.utilsr&   r'   adminr)   mer*   tasksr,   verify_trusted.users.tasksr-   rE   config
dictConfigLOGGING	getLoggerra   loggerr.   APIViewri   r   r   as_viewuser_verify_emailtest_welcome_emailsend_reminderr5   r5   r5   r6   <module>   sZ   
M;6
