
    ]i                        d dl mZmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ  ee
      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 d dlmZmZmZmZ d dlm Z   e       Z!ejD                  dz  Z#ejH                  dz  Z%dededdfdZ&e!jO                  d      ejQ                  d       ee      fdedededede)f
d              Z*e!jO                  d      ejQ                  d       ee      fdededede)fd              Z+e!jO                  d      dede)fd       Z,e!j[                  d e!       ee       ee      fd"ededefd#       Z.y)$    )	APIRouterDependsHTTPExceptionRequestResponsestatus)Limiter)get_remote_address)AsyncSession)settings)key_func)get_db)verify_token)get_current_user)User)user_repository)LoginRequestTokenResponseUserAssignmentWithPermissionsUserResponse)auth_service<   iQ responsetokensreturnNc                     | j                  d|j                  dt        j                  dt               | j                  d|j
                  dt        j                  dt               y )Naccess_tokenTlaxkeyvaluehttponlysecuresamesitemax_agerefresh_token)
set_cookier   r   is_productionCOOKIE_MAX_AGE_ACCESSr&   COOKIE_MAX_AGE_REFRESH)r   r   s     2/var/www/html/spbu.com/backend/app/routers/auth.py_set_auth_cookiesr,      sf    !!%%%   ""%%&      z/loginz	10/minuterequestdatadbc                   K   	 t        j                  ||j                  |j                         d {   }t        ||       t        |j                  d      xs i }ddt        |j                  dd	            d
S 7 J# t        $ rK}t        |      }|dk(  rt        t        j                  d      t        t        j                  |      d }~ww xY ww)N__MAINTENANCE__MAINTENANCE_MODEstatus_codedetailaccess)
token_typezLogin berhasilcookieis_superadminF)messager8   r:   )r   login
identifierpassword
ValueErrorstrr   r   HTTP_503_SERVICE_UNAVAILABLEHTTP_401_UNAUTHORIZEDr,   r   r   boolget)r.   r/   r   r0   r   emsgpayloads           r+   r<   r<   *   s     	R#))"doot}}MM h'6..8DJG#gkk/5AB  N R!f##"??)  (D(DSQQRs9   C.A? A=A? AC=A? ?	CACCCz/refreshz	20/minutec                   K   | j                   j                  d      }|st        t        j                  d      	 t        j                  ||       d {   }|j                  d|dt        j                  dt               dd	iS 7 1# t        $ r)}t        t        j                  t        |            d }~ww xY ww)
Nr&   zRefresh token tidak ditemukanr4   r   Tr   r   r;   zToken diperbarui)cookiesrD   r   r   rB   r   refresh_access_tokenr?   r@   r'   r   r(   r)   )r.   r   r0   r&   r   rE   s         r+   refreshrK   E   s      OO''8M442
 	
U)>>r=QQ %%%   )** R U(D(DSQRVTTUs:   9B>B	 BB	 -B>B	 		B;$B66B;;B>z/logoutc                 V   K   | j                  d       | j                  d       ddiS w)Nr   r&   r;   zLogout berhasil)delete_cookie)r   s    r+   logoutrN   a   s.     >*?+())s   ')z/me)response_modelcurrent_userc                   K   t        j                  || j                         d {   }g }|r|j                  ng D ]  }|j                  }|j
                  }|j                  t        |j                  |r|j                  nd|j                  |r|j                  nd|r|j                  nd|r|j                  ng D cg c]1  }|j                  j                   d|j                   j                   3 c}              t#        | j                  | j                  | j$                  | j&                  | j(                  |      S 7 c c}w w)N F:)spbu_id	spbu_namerole_id	role_namecan_be_scheduledpermissions)idnameemailr:   	is_activeassignments)r   get_with_permissionsrZ   r^   rolespbuappendr   rT   r[   rV   namarX   rY   modulr!   aksir   r\   r:   r]   )rP   r0   userr^   ar`   ra   ps           r+   meri   h   s#    
 !55b,//JJDK"&dB.vvvv8II#'diiRII#'diiR6:T22 /3$**::A 77==/166<<.1:

 
	 / ??  "00(( ! Ks#   $EEBE=6E3AEE)/fastapir   r   r   r   r   r   slowapir	   slowapi.utilr
   sqlalchemy.ext.asyncior   app.core.configr   limiterapp.core.databaser   app.core.securityr   app.dependenciesr   app.models.userr   app.repositoriesr   app.schemas.authr   r   r   r   app.servicesr   routerACCESS_TOKEN_EXPIRE_MINUTESr)   REFRESH_TOKEN_EXPIRE_DAYSr*   r,   postlimitdictr<   rK   rN   rD   ri    r-   r+   <module>r~      s   P P  + / $
-
. $ * -   , e e %	 <<rA !;;eC  - D & X{
 v	
  		
 
  2 Z{ v+++ 	+ 
	+  +4 Y*8 * * * E,/ !12v  0r-   