
    h)                        S SK JrJrJrJrJr  S SKJrJr  S SK	J
r
  S SKJr  S SKJrJr  S SKJr  S SKrS SKrS SKJr  S S	KJr  S S
KJr  S SKrS SKrS SKJr  SSKJrJ r J!r!  \" 5         \" 5       r"\" S/SS9r#\RH                  RK                  S5      r&Sr'Sr(Sr)\" SS9r*\RV                  " \,5      r- " S S\5      r. " S S\5      r/ " S S\5      r0S2S\1S\4S jjr2S \3S!\
Rh                  S"\14S# jr5\" \
Rl                  5      4S$\S!\
Rh                  4S% jjr7S$\4S& jr8\" \*5      4S \34S' jjr9\" \95      4S(\:S)\14S* jjr;S\" \95      4S+\:S)\14S, jjr<\" \95      4S)\14S- jjr= " S. S/\5      r> " S0 S1\5      r?g)3    )DependsHTTPExceptionstatusRequest	APIRouter)	BaseModelEmailStr)database)get_database)datetime	timedelta)CryptContextN)OAuth2PasswordBearer)BaseHTTPMiddleware)Response)load_dotenv   )PROTECTED_ROUTESUNPROTECTED_ROUTESOPEN_CORS_ROUTESbcryptauto)schemes
deprecatedJWT_SECRET_KEYHS256   usersz/auth/login)tokenUrlc                   *    \ rS rSr% \\S'   \\S'   Srg)	UserLogin   emailpassword N)__name__
__module____qualname____firstlineno__r	   __annotations__str__static_attributes__r%       FC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\dependencies\auth.pyr!   r!      s    OMr-   r!   c                   *    \ rS rSr% \\S'   \\S'   Srg)Token"   access_token
token_typer%   Nr&   r'   r(   r)   r+   r*   r,   r%   r-   r.   r0   r0   "   s    Or-   r0   c                        \ rS rSr% \\S'   Srg)	TokenData&   r#   r%   Nr4   r%   r-   r.   r6   r6   &   s    Jr-   r6   dataexpires_deltac                    U R                  5       nU(       a  [        R                  " 5       U-   nO#[        R                  " 5       [        [        S9-   nUR                  SU05        [        R                  " U[        [        S9nU$ )N)hoursexp)	algorithm)
copyr   utcnowr   TOKEN_EXPIRE_HOURSupdatepyjwtencode
SECRET_KEY	ALGORITHM)r8   r9   	to_encodeexpireencoded_jwts        r.   create_access_tokenrI   *   sb    		I"]2"Y5G%HHeV_%,,y*	JKr-   tokendbreturnc                     [         R                  " U [        [        /SS0S9nUR	                  S5      nUc  [        [        R                  SS9e U[           R                  SU05      n[        US	   5      US
'   Uc  [        [        R                  SS9eU$ ! [         R                   a    [        [        R                  SS9ef = f)N
verify_expT)
algorithmsoptionssubCould not validate credentialsstatus_codedetailz3Could not validate credentials or token has expiredr#   _ididzUser not found)rB   decoderD   rE   getr   r   HTTP_401_UNAUTHORIZEDInvalidSignatureErrorCOLLECTION_NAMEfind_oner+   HTTP_404_NOT_FOUND)rJ   rK   payloadr#   users        r.   verify_tokenra   5   s    D,,uji[S_aeRfg[['=F,H,HQqrr 
 o''%(89DT%[!DJ|(A(AJZ[[K && D(D(D  NC  D  	DDs   AB -Crequestc                     [        U R                  R                  U5      nX R                  l        U R                  R                  $ N)ra   staterJ   current_user)rb   rK   r`   s      r.   get_current_userdetailsrg   F   s2    ++R0D!%MM==%%%r-   c                 .    U R                   R                  $ rd   )re   rf   )rb   s    r.   get_current_userdetails_oldri   K   s    ==%%%r-   c                     [        [        R                  SSS0S9n [        R                  " U [
        [        /S9nUR                  S5      nUc  Ue U$ !   Ue= f)NrR   zWWW-AuthenticateBearer)rT   rU   headers)rO   rQ   )r   r   rZ   rB   rX   rD   rE   rY   )rJ   credentials_exceptionr_   r#   s       r.   get_current_userrn   N   sl    )00/#X.
$,,uji[I[['=''  L$##s   5A A
account_idrf   c                 H    US   U :w  a  [        [        R                  SS9eU$ )Nro   zNo access to this account datarS   )r   r   rZ   )ro   rf   s     r.   get_current_user_within_accountrq   _   s)    L!Z/(D(DMmnnr-   required_rolec                 H    UR                  SS5      nX :  a
  [        SSS9eU$ )Nroler     $Access forbidden. Insufficient role.rS   rY   r   )rr   rf   	user_roles      r.   has_permissionry   g   s.      +I 4Z[[r-   c                 L    SnU R                  SS5      nX!:w  a
  [        SSS9eU $ )Nr   rt   r   ru   rv   rS   rw   )rf   rr   rx   s      r.   has_superadmin_permissionr{   o   s3    M  +I!4Z[[r-   c                   B    \ rS rSrS\4S jr\S\S\S\4S j5       r	Sr
g	)
AuthMiddleware   rb   c                   ^ ^#    [        STR                  5        TR                  R                  R	                  S5      (       a  U" T5      I S h  vN $ [        UU 4S j[         5       5      (       a  TR                  S:X  a)  TR                  R                  S5      SSSS	.n[        US
9$ U" T5      I S h  vN nTR                  R                  S5      UR                  S'   SUR                  S'   U$ [        UU 4S j[         5       5      (       a  U" T5      I S h  vN $ [        UU 4S j[         5       5      (       a  TR                  R                  S5      nU(       d-  [        R                  S5        [        [         R"                  SS9eUR	                  S5      (       a  USS  nO[        [         R"                  SS9eUTR$                  l        U" T5      I S h  vN nU$  GN GN5 N N7f)NzAUTH TEST ::: z /v1/subscriptions/stripe-webhookc              3   p   >#    U  H+  nTR                  TR                  R                  U5      v   M-     g 7frd   path_matches_routeurlpath.0routerb   selfs     r.   	<genexpr>*AuthMiddleware.dispatch.<locals>.<genexpr>   -     ^M]Et&&w{{'7'7??M]   36OPTIONSOrigintruezPOST, GET, DELETE, PUT, OPTIONSzAuthorization, Content-Type)Access-Control-Allow-Origin Access-Control-Allow-CredentialszAccess-Control-Allow-MethodszAccess-Control-Allow-Headers)rl   r   r   c              3   p   >#    U  H+  nTR                  TR                  R                  U5      v   M-     g 7frd   r   r   s     r.   r   r      -     `M_Et&&w{{'7'7??M_r   c              3   p   >#    U  H+  nTR                  TR                  R                  U5      v   M-     g 7frd   r   r   s     r.   r   r      r   r   AuthorizationToken not present in requestz Token is not thererS   Bearer    Access is denied)printcookiesr   r   
startswithanyr   methodrl   rY   r   r   r   loggererrorr   r   rZ   re   rJ   )r   rb   	call_nextrl   responserJ   s   ``    r.   dispatchAuthMiddleware.dispatch   s    0 ;;&&'IJJ"7+++ ^M]^^^~~*3:??3F3Fx3P8>4U4Q	  00&w//H>Eoo>Q>QRZ>[H:;CIH?@O `M_```"7+++ ^M]^^^OO''8E;<#0L0LUjkk	**ab	#0L0LUghh"'GMM #7++O , 0 ,$ ,sK   AG4G*A'G48G-9A'G4 G0!CG4#G2$G4-G40G42G4r   route_patternrL   c                 j    UR                  SS5      S-   n[        [        R                  " X 5      5      $ )N*z.*$)replaceboolrematch)r   r   patterns      r.   r   !AuthMiddleware.path_matches_route   s-    ''T2S8BHHW+,,r-   r%   N)r&   r'   r(   r)   r   r   staticmethodr+   r   r   r,   r%   r-   r.   r}   r}      s8    ,g ,\ - -S -T - -r-   r}   c                   "    \ rS rSrS\4S jrSrg)AuthMiddleware_new   rb   c                   ^ ^#    [        UU 4S j[         5       5      (       a  U" T5      I S h  vN nU$ [        UU 4S j[         5       5      (       a  TR                  R	                  S5      nU(       d-  [
        R                  S5        [        [        R                  SS9eU(       a  UR                  S5      (       a  USS  nO[        [        R                  S	S9e [        U[        R                  " 5       5      nUTR                  l        U" T5      I S h  vN nU$  N! [         a    [        [        R                  S	S9ef = f N.7f)
Nc              3   p   >#    U  H+  nTR                  TR                  R                  U5      v   M-     g 7frd   r   r   s     r.   r   2AuthMiddleware_new.dispatch_new.<locals>.<genexpr>   r   r   c              3   p   >#    U  H+  nTR                  TR                  R                  U5      v   M-     g 7frd   r   r   s     r.   r   r      r   r   r   r   zToken is not thererS   r   r   r   )r   r   r   rl   rY   r   r   r   r   rZ   r   ra   r
   get_mongo_dbre   rf   )r   rb   r   r   rJ   r`   s   ``    r.   dispatch_newAuthMiddleware_new.dispatch_new   s    `M_```&w//HO ^M]^^^OO''8E;<#0L0LUijj)))44ab	#0L0LUghhi#E8+@+@+BC-1* #7++- 0$ ! i#0L0LUghhi ,s4   +ED"B/E 0D$ EE
E$#EEr%   N)r&   r'   r(   r)   r   r   r,   r%   r-   r.   r   r      s    ' r-   r   rd   )@fastapir   r   r   r   r   pydanticr   r	   app.dbr
   app.db.database_staticr   r   r   passlib.contextr   r   jwtrB   fastapi.securityr   starlette.middleware.baser   starlette.responsesr   loggingosdotenvr   routesr   r   r   routerpwd_contextenvironrY   rD   rE   r@   r\   oauth2_scheme	getLoggerr&   r   r!   r0   r6   dictrI   r+   MongoDBra   r   rg   ri   rn   intrq   ry   r{   r}   r   r%   r-   r.   <module>r      s   F F (  / ( ( 	  1 8 (  	  J J  
H:&AZZ^^,-
	 $m<			8	$	 I 	 d 9  !1!1 d " FMXMbMbEc &W &(2B2B &
& & #*-"8 C " KRRbJc  4  )*HX@Y #   4;;K3L D |2-' 2-j+ r-   