U
    re
,                     @   sL  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 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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& G dd dZ'G dd deZ(G dd deZ)G dd de"Z*G dd dZ+dS )    N)
connection)
PermissionUser)r   )model_to_dict)JsonResponse)never_cache)BaseAuthentication)
exceptions)cachescache)date)settings)r   UserAddress)check_passwordmake_password)AuthResponseSerializer)BasePermission)GeoIP2)Countryc                   @   s   e Zd ZdS )AuthResponseN)__name__
__module____qualname__ r   r   3/var/www/html/services/Subscriber/Authentication.pyr      s   r   c                   @   s   e Zd Zdd ZdS )StartFitAuthenticationc                 C   s  d|krt jj|d d}t| t|dkrXtd i }d|d< d|d< d	|d
< |S t jj|d d}t| |d krtdddS d|krt|d |jrtd n(td i }d|d< d|d< d|d
< |S |j	rtd n0td i }d|d< d|d< d|d< d|d
< |S nXt jj|d}t|d |d krDtdddS |j	rVtd ntd tdddS t|j	 |j	rt
td }zt|}tjj|jddd}| rd}tjj|d}	tjj|d}	|jdks|jd kr*t jj|jd}
|	jdd  |
_|
  |
j|d< |D ]V}t|}|d dksV|d d kr.tjj|d d}|	j|_|  |	j|d< q.|d |d< nd}tjj|d}	|jdks|jd krt jj|jd}
|	jdd  |
_|
  |
j|d< |	rtjj|j|	jd }|  ntjj|jd!d }|  |j|d< t||d" t|}td# t| i }d|d< d$|d< d%|d
< ||d&< ||d'< W n   t  Y nX |S t }d|_ |  tdddS d S )(Nemail)r   r   12345   codeFalseresultzNo Such Mail Id FoundmessageFzinvalid credentialssuccessr"   passwordzLogin validated and succeededzInvalid PasswordzInactive user	is_activezInactive Userzsocial Request   )user_idcountryidIndia)name )r*      	phoneCodeuserCountry)r(   r)      i  zcache Subs Datar$   zUser logged in successfullysessiontokenuserDetails)!r   objectsfilterprintlengetr   r   r%   r&   hashlibsha1osurandom	hexdigestr   r   r*   valuesexistsr   r/   dialCodesavedictr)   creater   set	traceback	print_excr   r   )selfrequestZ	loginSubsZ
resposeArrZloginSubscriberZsession_tokenZsubscriberobjr0   r)   	countryIDZupdatesubscribervalvalObjZupdateaddressZsubsDataZauthresponser   r   r   authenticate   s    












z#StartFitAuthentication.authenticateN)r   r   r   rL   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdd ZdS )SessionAuthenticationzC
    Overriding Django's session framework for authentication.
    c                 C   s   |j }td t|j d}|jdd}td| |jdd }t|d |dkrr|dkrr|g krr|d }nd}td }z||d}W 5 td	 t| X |dkrt |||t	j
 |r|d
 sdS ||_|dfS )z
        Returns a `Subscriber` if the request session currently has a logged in user.
        Otherwise returns `None`.
        zHeader ValuesNHTTP_AUTHORIZATIONr-   zAuht value llr   defaultentered finallyr&   )_requestr6   METAr8   splitr
   r	   NotAuthenticatedrD   r   SESSION_VALIDITYuser)rG   rH   usernameZauth_header_valueauthkeyr   r   r   r   rL      s.    




z"SessionAuthentication.authenticateN)r   r   r   __doc__rL   r   r   r   r   rM      s   rM   c                   @   s   e Zd Zdd ZdS )IsAuthenticatedc                 C   s>   t  }||}t| |d kr.tdddS tddiS d S )NFzInvalid Sessionr#   r$   T)StartFitSessionUtilget_user_insessionr6   r   )rG   rH   viewZcontentSessionUtilrX   r   r   r   has_permission   s    
zIsAuthenticated.has_permissionN)r   r   r   r`   r   r   r   r   r\      s   r\   c                   @   s   e Zd Zdd ZdS )r]   c                 C   s   |j }|jdd krd S |jd }|d krL|dkrL|g krL|d }nd}td }z0||d }|d krvW d S ||d< |W S W 5 td X d S )NrN   r-   r   rP   rQ   r2   )rR   rS   r8   rT   r
   r6   )rG   rH   rY   rZ   r   rX   r   r   r   r^      s    
z&StartFitSessionUtil.get_user_insessionN)r   r   r   r^   r   r   r   r   r]      s   r]   ),jsonrE   	django.dbr   django.contrib.auth.modelsr   r   django.forms.modelsr   django.httpr   django.views.decorators.cacher   Zrest_framework.authenticationr   rest_frameworkr	   django.core.cacher
   r   datetimer   r9   r;   django.confr   Subscriber.modelsr   django.contrib.auth.hashersr   r   Subscriber.serializersr   Zrest_framework.permissionsr   django.contrib.gis.geoip2r   utility.modelsr   r   r   rM   r\   r]   r   r   r   r   <module>   s2    6