
    zV
hi                         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                    [        S5         [        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)Nzverify token
verify_expT)
algorithmsoptionssubCould not validate credentialsstatus_codedetailz3Could not validate credentials or token has expiredr#   _ididzUser not found)printrB   decoderD   rE   getr   r   HTTP_401_UNAUTHORIZEDInvalidSignatureErrorCOLLECTION_NAMEfind_oner+   HTTP_404_NOT_FOUND)rJ   rK   payloadr#   users        r.   verify_tokenrb   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)rb   staterJ   current_user)rc   rK   ra   s      r.   get_current_userdetailsrh   G   s2    ++R0D!%MM==%%%r-   c                 .    U R                   R                  $ re   )rf   rg   )rc   s    r.   get_current_userdetails_oldrj   L   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   r[   rB   rY   rD   rE   rZ   )rJ   credentials_exceptionr`   r#   s       r.   get_current_userro   O   sl    )00/#X.
$,,uji[I[['=''  L$##s   5A A
account_idrg   c                 H    US   U :w  a  [        [        R                  SS9eU$ )Nrp   zNo access to this account datarS   )r   r   r[   )rp   rg   s     r.   get_current_user_within_accountrr   `   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   rZ   r   )rs   rg   	user_roles      r.   has_permissionrz   h   s.      +I 4Z[[r-   c                 L    SnU R                  SS5      nX!:w  a
  [        SSS9eU $ )Nr   ru   r   rv   rw   rS   rx   )rg   rs   ry   s      r.   has_superadmin_permissionr|   p   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	)
AuthMiddlewarex   rc   c                   ^ ^#    [        STR                  5        [        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 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TR                   l        U" T5      I S h  vN nU$  GN; N N7f)NzAUTH TEST ::: c              3   p   >#    U  H+  nTR                  TR                  R                  U5      v   M-     g 7fre   path_matches_routeurlpath.0routerc   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)rm   r   r   c              3   p   >#    U  H+  nTR                  TR                  R                  U5      v   M-     g 7fre   r   r   s     r.   r   r      s-     dQc4**7;;+;+;UCCQcr   c              3   p   >#    U  H+  nTR                  TR                  R                  U5      v   M-     g 7fre   r   r   s     r.   r   r      s-     bQa4**7;;+;+;UCCQar   AuthorizationToken not present in requestz Token is not thererS   Bearer    Access is denied)rX   cookiesanyr   methodrm   rZ   r   r   r   loggererrorr   r   r[   
startswithrf   rJ   )r   rc   	call_nextrm   responserJ   s   ``    r.   dispatchAuthMiddleware.dispatchy   s}    0 ^M]^^^~~* 4;??3F3Fx3P8>4U4Q	  00&w//H>Eoo>Q>QRZ>[H:;CIH?@6 - dQcddd!*7!33bQabbb  ++O<LL!?@'F4P4PYnooU--i88!!"IE'F4P4PYkll&+#&w//H; 0 4& 0s8   A:G >F9?A'G &F<'CG 2F>3G <G >G 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~   x   s8    -g -^ - -S -T - -r-   r~   c                   "    \ rS rSrS\4S jrSrg)AuthMiddleware_new   rc   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re   r   r   s     r.   r   2AuthMiddleware_new.dispatch_new.<locals>.<genexpr>   s-     `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re   r   r   s     r.   r   r      r   r   r   r   zToken is not thererS   r   r   r   )r   r   r   rm   rZ   r   r   r   r   r[   r   rb   r
   get_mongo_dbrf   rg   )r   rc   r   r   rJ   ra   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   re   )@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environrZ   rD   rE   r@   r]   oauth2_scheme	getLoggerr&   r   r!   r0   r6   dictrI   r+   MongoDBrb   r   rh   rj   ro   intrr   rz   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 4-' 4-l+ r-   