
    Xjm                     
   U d dl mZ d dlZd dlmZmZmZ d dlmZ d dl	m
Z
  e
e          Z edd          Zeedz           ed<    G d	 d
e          Zddededz  fdZdedz  fdZdedz  fdZdedz  fdZd Zd ZdS )    )
ContextVarN)HTTPExceptionRequeststatus)BaseHTTPMiddleware)
get_loggertenant_context)default_tenant_contextc                       e Zd ZdefdZdS )TenantContextMiddlewarerequestc                 @  K   g d}|j         j        |v s|j         j                            d          r ||           d {V S |j                            d          }|r	|                    d          r|                    dd          }	 ddlm} t          j	        ||j
        dgd	d
i          }|                    d          p|                    d          }|                    d          }	|rddlm}
 ddlm}  |
            }	 |                    |                              |j        t%          |          k    |j                                                   }|st*                              d|            nOt/          t%          |          |	rt%          |	          nd            t*                              d| d|	            |                                 n# |                                 w xY wnh# t          j        $ r'}t*                              d|            Y d }~n7d }~wt6          $ r'}t*                              d|            Y d }~nd }~ww xY w	  ||           d {V }|t;                       S # t;                       w xY w)N)/z/healthz/docsz/openapi.jsonz/redocz/api/v1/auth/loginz/api/v1/auth/registerz/staticAuthorizationzBearer  r   )settingsHS256
verify_expT)
algorithmsoptions	tenant_idsub)SessionLocal)Tenantz%Invalid or deleted tenant_id in JWT: r   user_idz'Tenant context set from JWT: tenant_id=z
, user_id=zInvalid JWT token: z*Error extracting tenant context from JWT: )urlpath
startswithheadersgetreplace
app.configr   jwtdecode
SECRET_KEYapp.db.sessionr   app.models.tenantr   queryfilteridint
is_deletedfirstloggerwarningset_tenant_contextdebugcloseInvalidTokenError	Exceptionerrorclear_tenant_context)selfr   	call_nextpublic_pathsauth_headertokenr   payloadr   r   r   r   dbtenanteresponses                   ?/lsinfo/ai/hellotax_ai/base_platform/app/core/tenant_context.pydispatchz TenantContextMiddleware.dispatch   s%     
 
 
 ;|++w{/?/J/J9/U/U+"7+++++++++o))/:: #	O;11)<< #	O''	266E!O//////*8.G9|]aNb   $KK44PK8P8P	!++e,, #;;;;;;888888%B#HHV,,#VFIY$?VEVAVWW"UWW 
  & "NN+^S\+^+^____.*-i..RYBc#g,,,_c    #LL h) h h_f h h   







( : : :8Q8899999999 O O OM!MMNNNNNNNNO	#&Yw////////H """" """"sJ   A>H CG) H )G??H I(H44I(I##I(,J JN)__name__
__module____qualname__r   rD        rC   r   r      s/        5#g 5# 5# 5# 5# 5# 5#rI   r   r   r   c                     | |d|}t                               |           t                              d| |           d S )Nr   zTenant context set)r   setr0   info)r   r   kwargscontexts       rC   r2   r2   G   sG    %'DDVDG   
KK%GKLLLLLrI   returnc                  4    t                                           S Nr   r"   rH   rI   rC   get_tenant_contextrS   M   s       rI   c                  f    t                                           } | r|                     d          nd S )Nr   rR   rN   s    rC   get_current_tenant_idrV   Q   s/    !!##G'.87;;{###D8rI   c                  f    t                                           } | r|                     d          nd S )Nr   rR   rU   s    rC   get_current_user_idrX   V   s/    !!##G%,67;;y!!!$6rI   c                  n    t                               d            t                              d           d S )NzTenant context cleared)r   rK   r0   r3   rH   rI   rC   r8   r8   [   s/    
LL)*****rI   c                      t                                           } | r|                     d          st          t          j        d          | S )Nr   z,Tenant context not set. Please authenticate.)status_codedetail)r   r"   r   r   HTTP_401_UNAUTHORIZEDrU   s    rC   require_tenant_contextr^   `   sU    !!##G 
'++k22 
4A
 
 
 	
 NrI   rQ   )contextvarsr   r%   fastapir   r   r   starlette.middleware.baser   common_loggingr   rE   r0   r   dict__annotations__r   r-   r2   rS   rV   rX   r8   r^   rH   rI   rC   <module>re      s   " " " " " " " 



 2 2 2 2 2 2 2 2 2 2 8 8 8 8 8 8 % % % % % %	H		+5:6FPT+U+U+UD4K( U U U7# 7# 7# 7# 7#0 7# 7# 7#tM M# Md
 M M M M!D4K ! ! ! !9sTz 9 9 9 9
7S4Z 7 7 7 7
+ + +
    rI   