§
    ÞaNj†
  ã            	       óÎ  — d dl m Z mZmZ d dlZd dlmZmZmZ d dl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 d d	lmZ d d
lmZ  e	d¬¦  «        Zdededefd„Zdedefd„Zddededz  defd„Zdedededej        dz  fd„Z  ee¦  «         ee¦  «        fdededej        fd„Z! ee!¦  «        fdej        dej        fd„Z" ee"¦  «        fdej        dej        fd„Z#dS )é    )ÚdatetimeÚ	timedeltaÚtimezoneN)ÚDependsÚHTTPExceptionÚstatus)ÚOAuth2PasswordBearer)ÚJWTErrorÚjwt)ÚSession)ÚcrudÚmodels)Úsettings)Úget_db)Ú	TokenDatazapi/auth/token)ÚtokenUrlÚplain_passwordÚhashed_passwordÚreturnc                 ót   — t          j        |                      ¦   «         |                     ¦   «         ¦  «        S ©N)ÚbcryptÚcheckpwÚencode)r   r   s     ú6/var/www/sinfronteras/news-app/backend/app/security.pyÚverify_passwordr      s,   € ÝŒ>˜.×/Ò/Ñ1Ô1°?×3IÒ3IÑ3KÔ3KÑLÔLÐLó    Úpasswordc                 ó–   — t          j        |                      ¦   «         t          j        ¦   «         ¦  «                             ¦   «         S r   )r   Úhashpwr   ÚgensaltÚdecode)r   s    r   Úget_password_hashr#      s2   € ÝŒ=˜ŸšÑ*Ô*­F¬NÑ,<Ô,<Ñ=Ô=×DÒDÑFÔFÐFr   ÚdataÚexpires_deltac                 ó$  — |                       ¦   «         }t          j        t          j        ¦  «        |pt          t          j        ¬¦  «        z   }|                     d|i¦  «         t          j
        |t          j        t          j        ¬¦  «        S )N)ÚminutesÚexp)Ú	algorithm)Úcopyr   Únowr   Úutcr   r   ÚACCESS_TOKEN_EXPIRE_MINUTESÚupdater   r   Ú
SECRET_KEYÚ	ALGORITHM)r$   r%   Ú	to_encodeÚexpires       r   Úcreate_access_tokenr3      sm   € Ø—	’	‘”€IÝŒ\�(œ,Ñ'Ô'¨=Ð+s½IÍhÔNrÐ<sÑ<sÔ<sÑt€FØ×Ò�e˜V�_Ñ%Ô%Ð%ÝŒ:�i¥Ô!4ÅÔ@RÐSÑSÔSÐSr   ÚdbÚusernamec                 ób   — t          j        | |¦  «        }|�t          ||j        ¦  «        sd S |S r   )r   Úget_user_by_usernamer   r   )r4   r5   r   Úusers       r   Úauthenticate_userr9      s4   € ÝÔ$ R¨Ñ2Ô2€DØ€|�?¨8°TÔ5IÑJÔJ€|ØˆtØ€Kr   Útokenc                 óÚ  — t          t          j        dddi¬¦  «        }	 t          j        | t
          j        t
          j        g¬¦  «        }|                     d¦  «        }|€|‚t          |¬¦  «        }n# t          $ r}||‚d }~ww xY w|                     t          j        ¦  «                             t          j        j        |j        k    ¦  «                             ¦   «         }|€|‚|S )NzCould not validate credentialszWWW-AuthenticateÚBearer)Ústatus_codeÚdetailÚheaders)Ú
algorithmsÚsub)r5   )r   r   ÚHTTP_401_UNAUTHORIZEDr   r"   r   r/   r0   Úgetr   r
   Úqueryr   ÚUserÚfilterr5   Úfirst)r:   r4   Úcredentials_exceptionÚpayloadr5   Ú
token_dataÚexcr8   s           r   Úget_current_userrL   #   sî   € Ý)ÝÔ0Ø/Ø# XÐ.ðñ ô Ðð
-Ý”*˜U¥HÔ$7ÅXÔEWÐDXÐYÑYÔYˆØ—;’;˜uÑ%Ô%ˆØÐØ'Ð'Ý¨Ð1Ñ1Ô1ˆ
ˆ
øÝð -ð -ð -Ø#¨Ð,øøøøð-øøøð �8Š8•F”KÑ Ô ×'Ò'­¬Ô(<À
Ô@SÒ(SÑTÔT×ZÒZÑ\Ô\€DØ€|Ø#Ð#Ø€Ks    AA6 Á6
BÂ BÂBÚcurrent_userc                 óJ   — | j         st          t          j        d¬¦  «        ‚| S )NzInactive user©r=   r>   )Ú	is_activer   r   ÚHTTP_400_BAD_REQUEST©rM   s    r   Úget_current_active_userrS   7   s*   € ØÔ!ð ]Ý­Ô(CÈOÐ\Ñ\Ô\Ð\ØÐr   c                 óJ   — | j         st          t          j        d¬¦  «        ‚| S )NzAdmin privileges requiredrO   )Úis_adminr   r   ÚHTTP_403_FORBIDDENrR   s    r   Úget_current_admin_userrW   <   s+   € ØÔ ð gÝ­Ô(AÐJeÐfÑfÔfÐfØÐr   r   )$r   r   r   r   Úfastapir   r   r   Úfastapi.securityr	   Újoser
   r   Úsqlalchemy.ormr   Úappr   r   Ú
app.configr   Úapp.databaser   Úapp.schemasr   Úoauth2_schemeÚstrÚboolr   r#   Údictr3   rE   r9   rL   rS   rW   © r   r   ú<module>re      s‚  ðØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !ð %Ð$Ð.>Ð?Ñ?Ô?€ðM 3ð M¸ð MÀð Mð Mð Mð MðG˜sð G sð Gð Gð Gð GðTð T˜Tð T°¸4±ð TÈ3ð Tð Tð Tð Tð˜ð ¨3ð ¸ð ÀÄÈtÑASð ð ð ð ð ") ¨Ñ!7Ô!7ÀgÀgÈfÁoÄoð ð ˜3ð ¸Gð ÐZ`ÔZeð ð ð ð ð( 8?°wÐ?OÑ7PÔ7Pð ð ¨¬ð ÐU[ÔU`ð ð ð ð ð
 7>°gÐ>UÑ6VÔ6Vð ð ¨¬ð Ð[aÔ[fð ð ð ð ð ð r   