
    j	                         d dl Z d dlZd dlmZmZ d dlmZ  ed            e j        dd          Z e j        dd	          Z	 e j        d
d          Z
dedefdZdedefdZdS )    N)RequestHTTPException)load_dotenvT)override
JWT_SECRETnihf38rn28rhf8nr3JWT_ALGORITHMHS256ORG_IDz$ae7aecba-e656-4577-b178-75db2938f040requestreturnc           
         | j                             d          }|r|                    d          st          dd          |                    d          d         }t          t          dt          j        d	d
          t          j        dd
          g                    }d}d}|D ]}|s	 t          j
        ||t          gddi          }t          d|dd          d            nE# t          j        $ r t          dd          t          $ r}t          |          }Y d}~d}~ww xY w|s#t          d|            t          dd          |                    d          p)|                    d          p|                    d          }|st          dd          |                    d          py|                    d          pd|                    d          pO|                    d          p:| j                             d          p | j                             d          pt           }	t          d | d!|	            t          |          t          |	          fS )"u-  
    Decode JWT and return (user_id, tenant_id)
    Supports multiple token payload formats:
      - { id, organization_id }   ← new Node.js token
      - { id, tenant_id }         ← alternative
      - { id, org_id }            ← alternative
    Fallback: X-Tenant-ID header → env ORG_ID
    AuthorizationzBearer i  zMissing Authorization header)status_codedetail    Nr    JWT_SECRET_NEW
verify_expT)
algorithmsoptionsu"   Auth — JWT decoded with secret:    z...zToken expiredu   Auth — JWT decode failed: zInvalid tokeniduser_idsubi  u)   Invalid token payload — missing user idorganization_id	tenant_idorg_idorgIdzX-Tenant-IDzX-Organization-IDu   Auth — user_id=z tenant_id=)headersget
startswithr   splitlistfilterosgetenvjwtdecoder	   printExpiredSignatureError	ExceptionstrDEFAULT_ORG_ID)
r   authorizationtokensecrets_to_trypayload
last_errorsecreter   r   s
             HC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\auth_tenant.pyget_user_and_tenantr8      s    O''88M T 8 8 C C T4RSSSS$$Q'E &
	,##
	"B''(    N
 GJ    		jv)?%t,  G
 FvbqbzFFFGGGE( 	I 	I 	ICHHHH 	 	 	QJHHHH	  E9Z99:::ODDDD 	D 	I	E 
  a4_```` 	%&& 	K  	H	 	G	 	M**		
 	/00	 	  

=g
=
=)
=
=>>>w<<Y''s   /;C,,)D.D))D.c                 *    t          |           \  }}|S )u,   Backward compatible — returns only user_id)r8   )r   r   _s      r7   get_user_from_tokenr;   R   s    $W--JGQN    )r'   r)   fastapir   r   dotenvr   r(   r   r	   r/   tupler8   r.   r;    r<   r7   <module>rA      s    				 



 * * * * * * * *       T    	,(;<<
	/7338%KLLB( B(U B( B( B( B(J S      r<   