o
    ]&d+                     @   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   C:\Users\DELL\Desktop\soubhikg1894-stratfit-d75d91182fa3\soubhikg1894-stratfit-d75d91182fa3\services\Subscriber\Authentication.pyr      s    r   c                   @      e Zd Zdd ZdS )StartFitAuthenticationc                 C   s  d|v rt jj|d d}t| t|dkr+td i }d|d< d|d< d	|d
< |S t jj|d d}t| |d u rCtdddS d|v rht|d |jrTtd ntd i }d|d< d|d< d|d
< |S |j	rptd nBtd i }d|d< d|d< d|d< d|d
< |S t jj|d}t|d |d u rtdddS |j	rtd ntd tdddS t|j	 |j	rt
td }z	 t|}tjj|jddd}| rEd}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 ]+}t|}|d dks&|d d kr<tjj|d d}|	j|_|  |	j|d< q|d |d< nRd}tjj|d}	|jdksZ|jd krst jj|jd}
|	jdd  |
_|
  |
j|d< |	rt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 |S    t  Y |S t }d|_ |  tdd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   r0   dialCodesavedictr*   creater   set	traceback	print_excr   r    )selfrequestZ	loginSubsZ
resposeArrZloginSubscriberZsession_tokenZsubscriberobjr1   r*   	countryIDZupdatesubscribervalvalObjZupdateaddressZsubsDataZauthresponser   r   r   authenticate   s   













z#StartFitAuthentication.authenticateN)r   r   r   rM   r   r   r   r   r          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|j d}|jd}td| |jd }t|d |dkr3|dkr3|g kr3|d }nd}td }z||d}W td t| n	td t| w |du r[t |||t	j
 |ri|d	 skdS ||_|dfS )
z
        Returns a `Subscriber` if the request session currently has a logged in user.
        Otherwise returns `None`.
        NHTTP_AUTHORIZATIONzAuht value llr.   r   defaultentered finallyr'   )_requestr7   METAr9   splitr
   r	   NotAuthenticatedrE   r   SESSION_VALIDITYuser)rH   rI   usernameZauth_header_valueauthkeyr   r   r   r   rM      s0   





z"SessionAuthentication.authenticateN)r   r   r   __doc__rM   r   r   r   r   rO      s    rO   c                   @   r   )IsAuthenticatedc                 C   s:   t  }||}t| |d u rtdddS tddiS )NFzInvalid Sessionr$   r%   T)StartFitSessionUtilget_user_insessionr7   r   )rH   rI   viewZcontentSessionUtilrZ   r   r   r   has_permission   s   
zIsAuthenticated.has_permissionN)r   r   r   rb   r   r   r   r   r^      rN   r^   c                   @   r   )r_   c                 C   s   |j }|jdd u rd S |jd }|d kr&|dkr&|g kr&|d }nd}td }z||d }|d u r>W td d S ||d< |W td S td w )NrP   r.   r   rR   rS   r3   )rT   rU   r9   rV   r
   r7   )rH   rI   r[   r\   r   rZ   r   r   r   r`      s    
z&StartFitSessionUtil.get_user_insessionN)r   r   r   r`   r   r   r   r   r_      rN   r_   ),jsonrF   	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   r:   r<   django.confr   Subscriber.modelsr   django.contrib.auth.hashersr   r   Subscriber.serializersr   Zrest_framework.permissionsr   django.contrib.gis.geoip2r   utility.modelsr   r   r   rO   r^   r_   r   r   r   r   <module>   s4     5