§
    ÞaNjO  ã            	       óÎ  — d dl mZmZmZ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ddg¬¦  «        Ze                     d	ej        ej        ¬
¦  «         ee¦  «        fdej        dedej        fd„¦   «         Ze                     dej        ¬¦  «         e¦   «          ee¦  «        fdededej        fd„¦   «         Ze                     dej        ¬¦  «         eej        ¦  «        fdej        dej        fd„¦   «         Ze                     deej                 ¬¦  «         ee¦  «         eej        ¦  «        fdedej        deej                 fd„¦   «         ZdS )é    )Ú	APIRouterÚDependsÚHTTPExceptionÚstatus)ÚOAuth2PasswordRequestForm)ÚSession)ÚcrudÚmodelsÚschemasÚsecurity)Úget_dbz/authÚauth)ÚprefixÚtagsz	/register)Úresponse_modelÚstatus_codeÚuser_inÚdbÚreturnc                 óF  — t          j        || j        ¦  «        rt          t          j        d¬¦  «        ‚t          j        || j        ¦  «        rt          t          j        d¬¦  «        ‚t          j        || j        | j        t          j
        | j        ¦  «        ¦  «        S )zRegister a new user.zUsername already registered)r   ÚdetailzEmail already registered)r	   Úget_user_by_usernameÚusernamer   r   ÚHTTP_400_BAD_REQUESTÚget_user_by_emailÚemailÚcreate_userr   Úget_password_hashÚpassword)r   r   s     ú:/var/www/sinfronteras/news-app/backend/app/routers/auth.pyÚregisterr!      sŽ   € õ Ô   WÔ%5Ñ6Ô6ð kÝ­Ô(CÐLiÐjÑjÔjÐjÝÔ˜b '¤-Ñ0Ô0ð hÝ­Ô(CÐLfÐgÑgÔgÐgÝÔ˜B Ô 0°'´-ÅÔA[Ð\cÔ\lÑAmÔAmÑnÔnÐnó    z/token)r   Ú	form_datac                 óä   — t          j        || j        | j        ¦  «        }|€t	          t
          j        dddi¬¦  «        ‚t          j        d|j        i¬¦  «        }t          j	        |¬¦  «        S )	z2Authenticate a user and return a JWT access token.NzIncorrect username or passwordzWWW-AuthenticateÚBearer)r   r   ÚheadersÚsub)Údata)Úaccess_token)
r   Úauthenticate_userr   r   r   r   ÚHTTP_401_UNAUTHORIZEDÚcreate_access_tokenr   ÚToken)r#   r   Úuserr)   s       r    Úlogin_for_access_tokenr/      sz   € õ Ô% b¨)Ô*<¸iÔ>PÑQÔQ€DØ€|ÝÝÔ4Ø3Ø'¨Ð2ð
ñ 
ô 
ð 	
õ
 Ô/°e¸T¼]Ð5KÐLÑLÔL€LÝŒ= lÐ3Ñ3Ô3Ð3r"   z/meÚcurrent_userc                 ó   — | S )z(Return the currently authenticated user.© )r0   s    r    Úread_users_mer3   #   s
   € ð Ðr"   z/usersÚ_current_userc                 ó*   — t          j        | ¦  «        S )z(Return all registered users. Admin-only.)r	   Ú	get_users)r   r4   s     r    Ú
list_usersr7   )   s   € õ Œ>˜"ÑÔÐr"   N)Úfastapir   r   r   r   Úfastapi.securityr   Úsqlalchemy.ormr   Úappr	   r
   r   r   Úapp.databaser   ÚrouterÚpostÚUserReadÚHTTP_201_CREATEDÚ
UserCreateÚUserr!   r-   r/   ÚgetÚget_current_active_userr3   ÚlistÚget_current_admin_userr7   r2   r"   r    ú<module>rG      sT  ðØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø "Ð "Ð "Ð "Ð "Ð "Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð ð 
ˆ˜'¨¨Ð	1Ñ	1Ô	1€ð ‡‚ˆ[¨Ô)9ÀvÔG^€Ñ_Ô_Ø6=°g¸f±o´oð oð o�WÔ'ð o¨Gð oÈ&Ì+ð oð oð oñ `Ô_ðoð ‡‚ˆX g¤m€Ñ4Ô4ØAHÀÁÄÐY`ÐY`ÐagÑYhÔYhð 
4ð 
4Ð%>ð 
4Èwð 
4ÐmtÔmzð 
4ð 
4ð 
4ñ 5Ô4ð
4ð ‡‚ˆE 'Ô"2€Ñ3Ô3Ø-4¨W°XÔ5UÑ-VÔ-Vð ð ˜vœ{ð Ð[aÔ[fð ð ð ñ 4Ô3ðð
 ‡‚ˆH T¨'Ô*:Ô%;€Ñ<Ô<à�˜‘”Ø ' ¨Ô(GÑ HÔ Hðð Øðà”+ðð 
ˆfŒkÔ	ðð ð ñ =Ô<ðð ð r"   