
    Ti              	       &   d dl mZ d dlmZmZmZ d dlZd dlmZ d dlZd dl	m
Z
 dZdZdZd	Zd
ZdZdefdZdefdZdeez  defdZdefdZdedefdZdddededee   dz  defdZdededeeef   fdZdedeeef   fdZdededz  fdZ y)    )urlsafe_b64encode)datetime	timedeltatimezoneN)	urlencode)get_settingsz,https://accounts.google.com/o/oauth2/v2/authz#https://oauth2.googleapis.com/tokenz0https://openidconnect.googleapis.com/v1/userinfozhttps://docs.googleapis.com/v1z https://sheets.googleapis.com/v4z#https://www.googleapis.com/drive/v3returnc                  H    t        j                  t        j                        S N)r   nowr   utc     F/var/www/html/apps/backend-hub/app/services/google_workspace_client.pyutc_nowr      s    <<%%r   c                  2    t               j                         S r   )r   	isoformatr   r   r   utc_now_isoformatr      s    9  r   
expires_inc                 ^    t               t        t        |             z   j                         S )N)seconds)r   r   floatr   )r   s    r   expires_at_from_secondsr      s"    I	%
*;<<GGIIr   c                  \    t               } t        | j                  xr | j                        S r   )r   boolgoogle_workspace_client_idgoogle_workspace_client_secret)settingss    r   is_google_workspace_configuredr      s%    ~H33_8_8_``r   code_verifierc                     t        j                  | j                  d            j                         }t	        |      j                  d      j                  d      S )Nzutf-8=)hashlibsha256encodedigestr   decoderstrip)r    r&   s     r   build_google_code_challenger)   $   sE    ^^M009:AACFV$++G4;;C@@r   )scopesstatecode_challenger*   c                     t               }|j                  |j                  ddj                  |xs |j                        ddd| |dd
}t
         dt        |       S )	Ncode offlinetrueconsentS256)
	client_idredirect_uriresponse_typescopeaccess_typeinclude_granted_scopespromptr+   r,   code_challenge_method?)r   r   google_workspace_redirect_urijoingoogle_workspace_scopes_listGOOGLE_AUTHORIZATION_ENDPOINTr   )r+   r,   r*   r   paramss        r   build_google_authorization_urlrB   )   sh    ~H88 >>&IH$I$IJ "((!'F ,,Ai.?-@AAr   r.   c                   K   t               }t        j                  |j                        4 d {   }|j	                  t
        |j                  |j                  |j                  d| |d       d {   }|j                          |j                         cd d d       d {    S 7 y7 77 	# 1 d {  7  sw Y   y xY ww)Ntimeoutauthorization_code)r4   client_secretr5   
grant_typer.   r    data)r   httpxAsyncClient(google_workspace_request_timeout_secondspostGOOGLE_TOKEN_ENDPOINTr   r   r=   raise_for_statusjson)r.   r    r   clientresponses        r   exchange_google_code_for_tokensrT   :   s     ~H  )Z)Z[  _e!%@@!)!H!H ( F F2!. % 

 

 	!!#}}  

   sW   /CB+CA B15B-6#B1C%B/&C-B1/C1C7B:8C?Crefresh_tokenc           	      x  K   t               }t        j                  |j                        4 d {   }|j	                  t
        |j                  |j                  d| d       d {   }|j                          |j                         cd d d       d {    S 7 m7 77 	# 1 d {  7  sw Y   y xY ww)NrD   rU   )r4   rG   rH   rU   rI   )
r   rK   rL   rM   rN   rO   r   r   rP   rQ   )rU   r   rR   rS   s       r   refresh_google_access_tokenrW   L   s     ~H  )Z)Z[  _e!%@@!)!H!H-!.	 % 
 
 	!!#}}  
   sV   /B:BB:4B%)B!*#B%B:B#B:!B%#B:%B7+B.,B73B:access_tokenc                   K   t               }t        j                  |j                        4 d {   }|j	                  t
        dd|  i       d {   }|j                          |j                         }|j	                  d      }|rt        |      nd cd d d       d {    S 7 y7 W7 	# 1 d {  7  sw Y   y xY ww)NrD   AuthorizationzBearer )headersemail)	r   rK   rL   rM   getGOOGLE_USERINFO_ENDPOINTrP   rQ   str)rX   r   rR   rS   payloadr\   s         r   fetch_google_account_emailra   \   s     ~H  )Z)Z[ - -_e$$~&>? $ 
 
 	!!#--/G$"s5z- - -
- - - -sW   /CB+C B1B-AB1C%B/&C-B1/C1C7B:8C?C)!base64r   r   r   r   r#   urllib.parser   rK   app.core.configr   r@   rO   r^   GOOGLE_DOCS_ENDPOINTGOOGLE_SHEETS_ENDPOINTGOOGLE_DRIVE_ENDPOINTr   r_   r   intr   r   r   r   r)   listrB   dictobjectrT   rW   ra   r   r   r   <module>rl      s)   $ 2 2  "  ( !O = M 7 ; = & &!3 !Je J Ja a
As As A
 cg BS B# BtTWy[_O_ Bkn B"3 s tTWY_T_O` $S T#v+=N  
-3 
-3: 
-r   