U
    4h                     @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlmZmZm	Z	m
Z
mZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlm  mZ d dlmZ dejkrejd rd	Znd
Zejed dddZe ZedddZ edddZ!dZ"edddZ#e$de_%e Z&e&'e de&_(e&j)dd Z*ee Z+e&j,dd Z-e.ddd Z/e.dd d! Z0d"d# Z1e.d$ed%d& Z2e.d'ed(d) Z3d*d+ Z4dS ),    N)	timedelta)Flaskredirectrequesturl_forsession)LoginManagercurrent_userlogin_required
login_userlogout_user)WebApplicationClient)User)appZLOCALz./FlaskApp/z/home/gary/users_db/zusers.sqlite3F   )Zcheck_same_threadtimeoutZglobal_parametersZgoogle_client_idZgoogle_client_secretz<https://accounts.google.com/.well-known/openid-configurationZcustomer_parametersZaemeryZdashboard_auth   strongc                   C   s   t jtd< ttdt jdS )Nnext_urllogin)next)r   pathr   r   r   endpoint r   r   2/var/www/FlaskApp/FlaskApp/app/auth_real_python.pyunauthorized?   s    
r   c                 C   s
   t | S N)r   get)user_idr   r   r   	load_userS   s    r   /loginc                  C   s2   t  } | d }tj|tjd dddgd}t|S )Nauthorization_endpointz	/callbackZopenidemailZprofile)Zredirect_uriscope)get_google_provider_cfgclientZprepare_request_urir   base_urlr   )google_provider_cfgr!   request_urir   r   r   r   g   s    	r   z/login/callbackc                  C   sb  t jd} t }|d }tj|t jt j| d\}}}tj	|||t
tfd}tt|  |d }t|\}}}tj|||d}	|	 dr|	 d }
|	 d	 }|	 d
 }|	 d }|tt krdS ndS t|
|||d}t|
st|
||| t|dtddd dtkrVtd rVtd }d td< |dkrVt|S ttdS )Ncodetoken_endpoint)Zauthorization_responseredirect_urlr)   )headersdataauthuserinfo_endpoint)r,   r-   Zemail_verifiedsubr"   pictureZ
given_name)zUser not authorised  )z3User email not available or not verified by Google.r2   )id_namer"   Zprofile_picT   )days)rememberdurationr   r    z/dashboard/)r   argsr   r$   r%   Zprepare_token_requesturlr&   requestspostGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETZparse_request_body_responsejsondumpsZ	add_tokenlistvalid_usersvaluesr   creater   r   r   r   redirect_destr   )r)   r'   r*   Z	token_urlr,   bodyZtoken_responser/   uriZuserinfo_responseZ	unique_idZusers_emailr1   Z
users_nameuserr:   r   r   r   callback|   sV       


rI   c                 C   s6   t jd}zt|}W n   t|  Y S X t|S )Nr   )r   r9   r   r   r   )fallbackdestZdest_urlr   r   r   rE      s    rE   z/logoutc                   C   s
   t   dS )NzULogged out<br><br><a class="button" href="/login">Please feel free to Login again</a>)r   r   r   r   r   logout   s    rL   z/userc                   C   s   d tjS )NzYou are logged in as {0})formatr	   r"   r   r   r   r   rH      s    rH   c                   C   s   t t S r   )r;   r   GOOGLE_DISCOVERY_URLr?   r   r   r   r   r$      s    r$   )5r?   osZsqlite3datetimer   r;   flaskr   r   r   r   r   flask_loginr   r	   r
   r   r   Zoauthlib.oauth2r   ZFlaskApp.app.userr   ZFlaskApp.app.commonr   commonFlaskApp.appconfigZfile_prefixconnectconnZcursorZaccess_secret_versionr=   r>   rN   rB   urandom
secret_keylogin_managerinit_appsession_protectionunauthorized_handlerr   r%   user_loaderr   router   rI   rE   rL   rH   r$   r   r   r   r   <module>   sR   




H