
    ]iN                         d 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mZ ddlmZ ddlmZmZ ddlmZmZ d	ed
ededefdZd	ededefdZd	ededefdZdedefdZy)uC   Auth service — login, token refresh, and current-user resolution.    )select)AsyncSession)create_access_tokencreate_refresh_tokenverify_passwordverify_token)RoleUserSpbuAssignment)User)system_repositoryuser_repository)TokenResponseUserResponsedb
identifierpasswordreturnc                   K   t        j                  | |       d{   }|st        j                  | |       d{   }|rt        ||j                        st        d      |j                  st        d      |j                  st        j                  |        d{   }|rt        d      | j                  t        t              j                  t        t        j                  t        j                   k(        j#                  t        j$                  |j                   k(  t        j&                  j)                  d            j+                  d             d{   }|j-                         st        d      t/        |j                         |j                  d}t1        |      }t3        |      }t5        ||	      S 7 7 7 (7 mw)
zAuthenticate a user by email or username and return access + refresh tokens.

    Raises ValueError for invalid credentials, inactive accounts, or maintenance mode.
    Nz"Email/username atau password salahzAkun tidak aktif__MAINTENANCE__T   z9Akses web tidak diizinkan untuk role Anda. Hubungi admin.subis_superadmin)access_tokenrefresh_token)r   get_by_emailget_by_usernamer   password_hash
ValueError	is_activer   r   is_maintenance_modeexecuter   r	   joinr
   role_ididwhereuser_idcan_login_webis_limitscalar_one_or_nonestrr   r   r   )	r   r   r   usermaintenanceresult
token_datar   r   s	            ;/var/www/html/spbu.com/backend/app/services/auth_service.pyloginr2      sj    
 !--b*==D$44RDDx1C1CD=>>>>+,,-AA"EE.// zz4LT$&8&@&@DGG&KLU%--8$:L:L:P:PQU:VWU1X	
 
 ((*XYYTWW8J8JKJ&z2L(4Ml-PP7 >D F

sF   GGGGA"GG B<GG
A%GGG
Gr   c                 &  K   t        |d      }|st        d      t        |d         }t        j                  | |       d{   }|r|j
                  st        d      t        |j                        |j                  d}t        |      S 7 Jw)z6Exchange a valid refresh token for a new access token.refresh
token_typezRefresh token tidak validr   N%User tidak ditemukan atau tidak aktifr   )
r   r   intr   	get_by_idr    r,   r%   r   r   )r   r   payloadr'   r-   r0   s         r1   refresh_access_tokenr;   5   s     =Y?G455'%.!G **2w77Dt~~@AATWW8J8JKJz**	 8s   ABBABtokenc                    K   t        |d      }|st        d      t        |d         }t        j                  | |       d{   }|r|j
                  st        d      |S 7 w)z8Resolve and return the active user from an access token.accessr5   zToken tidak validr   Nr7   )r   r   r8   r   r9   r    )r   r<   r:   r'   r-   s        r1   get_current_userr?   B   sc     5X6G,--'%.!G **2w77Dt~~@AAK 8s   AA&A$ A&r-   c                     t        | j                  | j                  | j                  | j                  | j
                        S )z2Convert a User ORM model to a UserResponse schema.)r%   nameemailr   r    )r   r%   rA   rB   r   r    )r-   s    r1   user_to_responserC   N   s4    77YYjj((..     N)__doc__
sqlalchemyr   sqlalchemy.ext.asyncior   app.core.securityr   r   r   r   app.models.roler	   r
   app.models.userr   app.repositoriesr   r   app.schemas.authr   r   r,   r2   r;   r?   rC    rD   r1   <module>rN      s    I  /  5   ? 8 QL  Qc  QS  Q]  QF
+< 
+ 
+ 
+	| 	C 	D 	4 L rD   