
    'j                         d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZ ddlmZmZmZmZ  G d	 d
e          Z G d de          Zdede	fdZdede	fdZdede	fdZdede	fdZdS )z{Authentication API endpoints for Enterprise Brain.

Provides login and token verification endpoints as Starlette handlers.
    )	BaseModelValidationError)Optional)Request)JSONResponse)logger)get_user_by_usernameupsert_user)verify_passwordhash_passwordcreate_access_tokendecode_access_tokenc                   (    e Zd ZU dZeed<   eed<   dS )LoginRequestzLogin request payload.usernamepasswordN)__name__
__module____qualname____doc__str__annotations__     A/var/www/html/ai-enterprise-brain/backend/chanakya/auth/router.pyr   r      s(           MMMMMMMMr   r   c                   2    e Zd ZU dZeed<   eed<   eed<   dS )UpsertUserRequestzUpsert user request payload.idr   r   N)r   r   r   r   intr   r   r   r   r   r   r      s1         &&GGGMMMMMMMMr   r   requestreturnc           	        K   	 |                                   d{V }	 t          di |}n=# t          $ r0}t          d|                                dd          cY d}~S d}~ww xY wt          |j                   d{V }|st          ddid          S |                    d	          st          dd
id          S t          |j	        |d                   st          ddid          S t          |d         t          |d                   d          }t          |d|d         t          |d                   d          S # t          $ r2}t          j        d|           t          ddid          cY d}~S d}~ww xY w)u7   POST /auth/login — authenticate and return JWT token.NInvalid request bodydetailerrors  status_coder%   zInvalid username or password  	is_activezAccount is deactivatedi  hashed_passwordr   r   )subuser_id)databearer)access_token
token_typer   r.   zLogin error: {}zLogin failed  r   )jsonr   r   r   r&   r	   r   getr   r   r   r   	Exceptionr   error)r    bodycredentialseuserr1   excs          r   loginr=   *   sI     4
\\^^######	&....KK 	 	 	1QXXZZHH        	 *+*>???????? 	9:    xx$$ 	34    {3T:K5LMM 	9:    +j)c$t*ooFF
 
 
 ("Z(4:	
 
   	  
 
 
&,,,~&
 
 
 	
 	
 	
 	
 	
 	

s[   E , E 
A&%A!A&E !A&&1E 'E  -E .AE 
F'E>8F>Fc                 l  K   	 | j                             dd          }|                    d          st          ddi          S |                    dd          }t          |          }|st          ddi          S |                    d          }|                    d          }|r?t          |           d{V }|r(|                    d	          rt          d
||d          S t          ddi          S # t          $ r0}t          j	        d|           t          ddi          cY d}~S d}~ww xY w)u6   POST /auth/verify-token — verify JWT token validity.authorization Bearer validFr-   r.   Nr+   T)rB   r   r.   zToken verify error: {})
headersr5   
startswithr   replacer   r	   r6   r   r7   )r    auth_headertokenpayloadr   r.   r;   r<   s           r   verify_tokenrI   c   s|     .o))/2>>%%i00 	2% 0111##Ir22%e,, 	2% 0111;;u%%++i((  	-h77777777D -- #! (&% %    We,--- . . .-s333We,--------.s1   A C9 7C9 =A*C9 (C9 9
D3%D.(D3.D3c                   K   	 | j                             dd          }|                    d          st          ddid          S |                    dd          }t          |          }|st          ddid          S |                    d	          }t          |           d
{V }|r|                    d          st          ddid          S t          |          }|                    dd
           |                    dd
           t          |          S # t          $ r2}t          j        d|           t          ddid          cY d
}~S d
}~ww xY w)u.   GET /auth/me — get current user information.r?   r@   rA   r%   zMissing authorization headerr*   r(   zInvalid or expired tokenr-   Nr+   zUser not found or inactiver,   
deleted_atzGet user error: {}zFailed to get userr3   )rC   r5   rD   r   rE   r   r	   dictpopr6   r   r7   )r    rF   rG   rH   r   r;   	user_datar<   s           r   get_current_userrO      s     &
o))/2>>%%i00 	9:   
 ##Ir22%e,, 	56   
 ;;u%%)(33333333 	488K00 	78    JJ	'...lD)))I&&& 
 
 
)3///+,
 
 
 	
 	
 	
 	
 	
 	

s2   AD 9D AD A	D 
E)'EEEc                   K   	 |                                   d{V }	 t          di |}n8# t          $ r+}t          dt	          |          dd          cY d}~S d}~ww xY wt          |j                  }t          |j        |j	        |           d{V }t          |j        |j	        |dd          S # t          $ r2}t          j        d|           t          d	d
id          cY d}~S d}~ww xY w)uJ   POST /auth/upsert-user — insert or update a user with a hashed password.Nr#   r$   r'   r(   )r   r   action   zUpsert user error: {}r%   zFailed to upsert userr3   r   )r4   r   r6   r   r   r   r   db_upsert_userr   r   r   r7   )r    r8   rH   r:   hashedrQ   r<   s          r   r
   r
      s}     
\\^^######	'//$//GG 	 	 	1SVVDD        	 w/00%gj'2BFKKKKKKKK:7+;vNN
 
 
 	

  
 
 
,c222./
 
 
 	
 	
 	
 	
 	
 	

sI   B8 , B8 
A! AA!B8 A!!AB8 8
C4'C/)C4/C4N)r   pydanticr   r   typingr   starlette.requestsr   starlette.responsesr   logurur   backend.chanakya.auth.databaser	   r
   rS   backend.chanakya.auth.utilsr   r   r   r   r   r   r=   rI   rO   r   r   r   <module>r\      s   
 0 / / / / / / /       & & & & & & , , , , , ,       ^ ^ ^ ^ ^ ^ ^ ^               9       	   6
 6
\ 6
 6
 6
 6
r. .L . . . .B(
G (
 (
 (
 (
 (
V
w 
< 
 
 
 
 
 
r   