o
    Ci#                     @   s   d dl mZ d dlmZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
 d dlZd dlmZ d dlmZ d d	lmZ d d
lmZ 	dddZdd Zdd Zdd Zdd Zdd Zd dlZdd ZdS )    )render)settingsN)Application)AccessTokenRefreshTokenr   )UserProfile)utc)HTTPBasicAuth)timezone)	timedelta
read writec                 C   s   z
t jjtjd}W n t jy   tdw t t	tj
d d }tjj| |td||d}tjj| |td|d d|jd	tj
d |d
S )z?
    Internal OAuth token generator (NO HTTP, NO password)
    )	client_idzInvalid OAuth clientACCESS_TOKEN_EXPIRE_SECONDS)seconds    )userapplicationtokenexpiresscope)r   r   r   access_token   Bearer)statusr   
token_type
expires_inr   )r   objectsgetr   	CLIENT_IDDoesNotExist
ValueErrorr
   nowr   OAUTH2_PROVIDERr   createsecretstoken_urlsafer   r   )r   r   r   r   r    r&   +/var/www/Datamplify/authentication/utils.pyget_access_token/   s6   		r(   c                 C   s  t j D ]\}}|d}|dkrd}qt j}qt j}t j}d| |||| d}ddi}	z
tj|||	d}
W n   d}tj|||	d}
Y |
j	d	krSd	|

 d
}|S d| |t jd}ddi}	tj|||	tt jt jd}
|
j	d	kr{d	|

 d
}|S |
j	|
d
}|S )NENGINEzdjango.db.backends.sqlite3z&http://127.0.0.1:8000/v1/oauth2/token/password)
grant_typeusernamer*   r   client_secretr   Content-Type!application/x-www-form-urlencodeddataheadersr   r   r1   )r+   r,   r*   r   )r1   r2   auth)r   	DATABASESitemsr   	TOKEN_URLr   CLIENT_SECRETrequestspoststatus_codejsonr	   )r,   r*   nameconfigengine	token_urlr   r-   r1   r2   responser&   r&   r'   get_access_token_updatedx   s`   
	

	rB   c                 C   s^   d| |d}ddi}zt j}tj|||d}W n   d}tj|||d}Y |jdkr-dS dS )	Nclient_credentials)r+   r   r-   r.   r/   r0   z5http://127.0.0.1:8000/v1/authentication/oauth2/token/r   i  )r   r7   r9   r:   r;   )r   r-   r1   r2   r@   rA   r&   r&   r'   app_login_check   s   
rD   c                 C   s^   t j}t j}t j}| }d|||d}tj||d}|jdkr'd| d}|S |j|d}|S )Nrefresh_token)r+   rE   r   r-   )r1   r   r3   )r   r7   r   r8   r9   r:   r;   r<   )rE   r7   r   r-   REFRESH_TOKENr1   rA   r&   r&   r'   generate_access_from_refresh   s&   
	rG   c                 C   sH   t jj| dd rt jj| d}d| ||j|jd}|S ddd}|S )	NT)id	is_activerH   r   )r   user_id	usertabler,   email  z/User Not Activated, Please activate the accountr   message)r   r   filterexistsr   r,   rM   )r   rL   r1   r&   r&   r'   tok_user_check   s   rS   c              
   C   sv  | j dd}d }|dr|dd }z	tjj|d}W n ty7 } zddd}|W  Y d }~S d }~ww |j}|jt	j	
tk rtjj|jd	}|jd
krSd S ztjj|j|d}W n   ddd}| Y S t|j}	|	d dkrtjj|jd	  tjj|jd	  d S tjj|jd	  tjj|jd	  ddd}|S zt|}
|
W S    ddd}| Y S )NHTTP_AUTHORIZATION zBearer    )r   zInvalid Access TokenrN   )rP   r   rJ   rC   )access_token_idrK   z#Session Expired, Please login againi  r   r   i  z0Admin not exists/Not assssigned/Role Not createdrO   )METAr   
startswithsplitr   r   	ExceptionrK   r   datetimer!   r   r   application_idauthorization_grant_typer   rH   rG   r   rQ   deleterS   )requestauth_headerr   token1er1   r   ap_tbrf_tokenrE   fn_datar&   r&   r'   token_function   sX   


rg   c              	   C   s8   t d}t d}tjj| |||tj||d}||fS )Nr   @   )r=   r   r-   redirect_urisclient_typer^   rK   )r$   r%   r   r   r#   CLIENT_CONFIDENTIAL)r=   ri   r   typer   r-   appr&   r&   r'   
app_create'  s   


rn   )r   )django.shortcutsr   
Datamplifyr   r9   oauth2_provider.modelsr   r   r   authentication.modelsr   r\   pytzr   requests.authr	   django.utilsr
   r   r(   rB   rD   rG   rS   rg   r$   rn   r&   r&   r&   r'   <module>   s(    "
I<-