
    ^i*                         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Zd dl	m
Z
 d dlmZ d dlmZmZmZ de fd	Zdefd
Z G d d      Zedefd       Zy)    )datetime	timedeltatimezone)	lru_cacheN)Path)Lock)get_settings)GoogleWorkspaceConnection#GoogleWorkspacePendingAuthorizationGoogleWorkspaceStatereturnc                  H    t        j                  t        j                        S N)r   nowr   utc     E/var/www/html/apps/backend-hub/app/services/google_workspace_store.pyutc_nowr      s    <<%%r   c                  2    t               j                         S r   )r   	isoformatr   r   r   utc_now_isoformatr      s    9  r   c                       e Zd ZdeddfdZddZdefdZdeddfdZdedefd	Z	d
ddede
dedz  fdZdededdfdZdeddfdZdee   fdZdededefdZdededz  fdZy)GoogleWorkspaceStore
state_filer   Nc                 B    t        |      | _        t               | _        y r   )r   _pathr   _lock)selfr   s     r   __init__zGoogleWorkspaceStore.__init__   s    *%
V
r   c                 R    | j                   j                  j                  dd       y )NT)parentsexist_ok)r   parentmkdir)r   s    r   _ensure_parentz#GoogleWorkspaceStore._ensure_parent   s    

t<r   c                     | j                   j                         s
t               S t        j                  | j                   j                  d            }t        j                  |      S )Nutf-8encoding)r   existsr   jsonloads	read_textmodel_validate)r   payloads     r   _read_statez GoogleWorkspaceStore._read_state    sL    zz  "'))**TZZ1171CD#227;;r   statec                 ~    | j                          | j                  j                  |j                  d      d       y )N   )indentr(   r)   )r&   r   
write_textmodel_dump_jsonr   r2   s     r   _write_statez!GoogleWorkspaceStore._write_state'   s3    

e3313=Pr   c                     t               t        d      z
  }|j                  D cg c]&  }t        j                  |j
                        |k\  r|( c}|_        |S c c}w )N   )minutes)r   r   pending_authorizationsr   fromisoformat
created_at)r   r2   	thresholditems       r   _prune_pendingz#GoogleWorkspaceStore._prune_pending+   sY    I	" 55	 44(
%%doo6)C (
$
 (
s   +AF)adopt_legacy_if_needed	tenant_idrC   c                   | j                   5  | j                  | j                               }|j                  j	                  |      }|U|rS|j
                  G|j                  s;|j
                  |j                  |<   d |_        |j                  j	                  |      }| j                  |       |cd d d        S # 1 sw Y   y xY wr   )r   rB   r1   tenant_connectionsgetlegacy_connectionr9   )r   rD   rC   r2   
connections        r   get_connectionz#GoogleWorkspaceStore.get_connection4   s    ZZ 	''(8(8(:;E1155i@J!&<AXAXAdmr  nF  nF6;6M6M((3*.'"5599)D
e$	 	 	s   B$B;;CrI   c                     | j                   5  | j                  | j                               }||j                  |<   | j	                  |       d d d        y # 1 sw Y   y xY wr   )r   rB   r1   rF   r9   )r   rD   rI   r2   s       r   set_connectionz#GoogleWorkspaceStore.set_connection?   sU    ZZ 	%''(8(8(:;E2<E$$Y/e$	% 	% 	%s   A AAc                     | j                   5  | j                  | j                               }|j                  j	                  |d        | j                  |       d d d        y # 1 sw Y   y xY wr   )r   rB   r1   rF   popr9   )r   rD   r2   s      r   clear_connectionz%GoogleWorkspaceStore.clear_connectionE   s[    ZZ 	%''(8(8(:;E$$((D9e$	% 	% 	%s   AA##A,c                     | j                   5  | j                  | j                               }| j                  |       t	        |j
                  j                               cd d d        S # 1 sw Y   y xY wr   )r   rB   r1   r9   sortedrF   keysr8   s     r   list_connected_tenant_idsz.GoogleWorkspaceStore.list_connected_tenant_idsK   s\    ZZ 	;''(8(8(:;Ee$%22779:	; 	; 	;s   AA**A3	return_toc           	      \   | j                   5  | j                  | j                               }t        t	        j
                  d      t	        j
                  d      ||t                     }|j                  j                  |       | j                  |       |cd d d        S # 1 sw Y   y xY w)N    H   )r2   code_verifierrD   rT   r?   )
r   rB   r1   r   secretstoken_urlsafer   r=   appendr9   )r   rD   rT   r2   pendings        r   create_pending_authorizationz1GoogleWorkspaceStore.create_pending_authorizationQ   s    ZZ 	''(8(8(:;E9++B/%33B7##,.G ((//8e$	 	 	s   BB""B+state_tokenc                 ,   | j                   5  | j                  | j                               }d }g }|j                  D ]'  }|j                  |k(  r||}|j                  |       ) ||_        | j                  |       |cd d d        S # 1 sw Y   y xY wr   )r   rB   r1   r=   r2   r[   r9   )r   r^   r2   match	remainingrA   s         r   consume_pending_authorizationz2GoogleWorkspaceStore.consume_pending_authorization_   s    ZZ 	''(8(8(:;E@DECEI44 '::, E  &	' ,5E(e$	 	 	s   A3B

B)r   N)__name__
__module____qualname__strr    r&   r   r1   r9   rB   boolr
   rJ   rL   rO   listrS   r   r]   rb   r   r   r   r   r      s    3 4 =<1 <Q"6 Q4 Q$8 =Q  PU 	 	 	YruyYy 	% %9R %W[ %%# %$ %;49 ;c c Nq  AdgkAk r   r   c                  @    t               } t        | j                        S r   )r	   r   google_workspace_state_file)settingss    r   get_google_workspace_storerl   p   s    ~H D DEEr   )r   r   r   	functoolsr   r,   pathlibr   rY   	threadingr   app.core.configr	   app.models.google_workspacer
   r   r   r   rf   r   r   rl   r   r   r   <module>rr      sk    2 2      ( & &!3 !U Up F$8 F Fr   