Ë
    Œå_j¯  ã                   ó¶  — 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 d dlmZ d dlmZmZ d dlmZmZmZmZ d dlmZ  ed	d
g¬«      Z ee«      fdede	fd„Zej5                  ddd¬«       ee«      fdedede	fd„«       Zej5                  ddd¬«      d„ «       Zej;                  ddd¬«       ee«       ee«      fdede	fd„«       Zd"de	fd„Zd e fd!„Z!y)#é    )Ú	APIRouterÚRequestÚDependsÚHTTPException)ÚJSONResponseÚRedirectResponse)ÚSession)Úget_db)ÚUser)ÚRoleÚ
Permission)Úhash_passwordÚverify_passwordÚcreate_access_tokenÚdecode_access_token)ÚLoginRequestz/authÚauth)ÚprefixÚtagsÚrequestÚdbc                 óH  — | j                   j                  d«      }|st        dd¬«      ‚t        |«      }|st        dd¬«      ‚|j	                  t
        «      j                  t
        j                  |j                  d«      k(  t
        j                  dk(  «      j                  «       }|sw|j	                  t
        «      j                  t
        j                  |j                  d«      k(  t
        j                  dk(  «      j                  «       }|rd	nd
}t        d|¬«      ‚|S )NÚaccess_tokené‘  zNot authenticated©Ústatus_codeÚdetailzInvalid tokenÚuser_idTFzCuenta desactivadazUser not found)
ÚcookiesÚgetr   r   Úqueryr   ÚfilterÚidÚactiveÚfirst)r   r   ÚtokenÚpayloadÚuserÚinactiver   s          ú3/var/www/html/metafoliadorv2/app/api/routes/auth.pyÚget_current_userr+      sß   € Ø�O‰O×Ñ Ó/€EÙÜ¨Ð4GÔHÐHÜ! %Ó(€GÙÜ¨°OÔDÐDØ�8‰8”D‹>× Ñ ¤§¡¨G¯K©K¸	Ó,BÑ!BÄDÇKÁKÐSWÑDWÓX×^Ñ^Ó`€DÙà—8‘8œD“>×(Ñ(¬¯©°G·K±KÀ	Ó4JÑ)JÌDÏKÉKÐ[`ÑL`Óa×gÑgÓiˆÙ)1Ñ%Ð7GˆÜ¨°FÔ;Ð;Ø€Kó    z/loginu   Iniciar sesiÃ³num   Autentica al usuario por email y contraseÃ±a. Devuelve token JWT en cookie HttpOnly con duraciÃ³n de 8 horas.)ÚsummaryÚdescriptionÚbodyc              ƒ   ó  K  — | j                   }| j                  }|j                  t        «      j	                  t        j                   |k(  t        j
                  dk(  «      j                  «       }|rt        ||j                  «      st        ddid¬«      S t        |j                  |j                   |j                  dœ«      }t        d|j                  |j                   |j                  dœdœ«      }|j                  d	|ddd
d¬«       |S ­w)NTÚerrorzCredenciales invalidasr   )r   )r   ÚemailÚrole)Únamer2   r3   )Úokr(   r   Úlaxi€p  )ÚkeyÚvalueÚhttponlyÚsecureÚsamesiteÚmax_age)r2   Úpasswordr!   r   r"   r$   r%   r   Úpassword_hashr   r   r#   r3   r4   Ú
set_cookie)r/   r   r   r2   r=   r(   r&   Úresponses           r*   ÚloginrA      sã   è ø€ à�J‰J€EØ�}‰}€Hà�8‰8”D‹>× Ñ ¤§¡¨uÑ!4´d·k±kÀTÑ6IÓJ×PÑPÓR€DÙ” x°×1CÑ1CÔDÜ˜WÐ&>Ð?ÈSÔQÐQä¨D¯G©G¸d¿j¹jÐRV×R[ÑR[Ñ \Ó]€EÜ 4¸$¿)¹)ÈdÏjÉjÐbf×bkÑbkÑ1lÑmÓn€HØ×ÑØØØØØØð ô ð €Oùs   ‚DDz/logoutu   Cerrar sesiÃ³nu/   Elimina la cookie de sesiÃ³n JWT del navegador.c               ƒ   óJ   K  — t        ddi«      } | j                  d«       | S ­w)Nr5   Tr   )r   Údelete_cookie)r@   s    r*   ÚlogoutrD   4   s'   è ø€ ä˜T 4˜LÓ)€HØ×Ñ˜>Ô*Ø€Oùs   ‚!#z/mezPerfil del usuario autenticadouK   Devuelve los datos del usuario actual y la lista de permisos segÃºn su rol.Úcurrent_userc              ƒ   ó¢   K  — | j                   | j                  | j                  | j                  t	        t        t        | |«      «      «      dœS ­w)N)r#   r4   r2   r3   Úpermissions)r#   r4   r2   r3   ÚsortedÚlistÚget_user_permissions)rE   r   s     r*   ÚmerK   ;   sI   è ø€ ð �o‰oØ×!Ñ!Ø×#Ñ#Ø×!Ñ!ÜœdÔ#7¸ÀbÓ#IÓJÓKñð ùs   ‚AANc                 ó  — |sddl m}  |«       }d}nd}	 |j                  t        «      j	                  t        j
                  | j                  k(  «      j                  «       }|st        «       |r|j                  «        S S |j                  r$|j                  t        «      j                  «       }n|j                  }|D �ch c]  }|j                  ’Œ }}||r|j                  «        S S c c}w # |r|j                  «        w w xY w)z;Retorna set de codigos de permiso del usuario segun su rol.r   )Úget_tenant_sessionTF)Úapp.models.databaserM   r!   r   r"   r4   r3   r%   ÚsetÚcloseÚall_permissionsr   ÚallrG   Úcode)r(   r   rM   Úlocal_dbr3   ÚpermsÚpÚcodess           r*   rJ   rJ   F   sÚ   € áÝ:ÙÓ!ˆØ‰àˆðØ�x‰xœ‹~×$Ñ$¤T§Y¡Y°$·)±)Ñ%;Ó<×BÑBÓDˆÙÜ“5ñ Ø�H‰H�Jð ð ×ÒØ—H‘HœZÓ(×,Ñ,Ó.‰Eà×$Ñ$ˆEØ!&Ö'˜A�—“Ð'ˆÐ'ØáØ�H‰H�Jð ùò (øñ Ø�H‰H�Jð ús%   –AC1 ÂA C1 ÃC,ÃC1 Ã,C1 Ã1DÚ	perm_codec                 óf   ‡ — t        t        «      t        t        «      fdt        dt        fˆ fd„}|S )z9Decorador/dependencia que verifica un permiso especifico.rE   r   c              “   óP   •K  — t        | |«      }‰|vrt        dd‰› �¬«      ‚| S ­w)Ni“  zPermiso denegado: r   )rJ   r   )rE   r   rU   rX   s      €r*   Úcheckerz#require_permission.<locals>.checker^   s6   øè ø€ Ü$ \°2Ó6ˆØ˜EÑ!Ü¨CÐ:LÈYÈKÐ8XÔYÐYØÐùs   ƒ#&)r   r+   r
   r   r	   )rX   r[   s   ` r*   Úrequire_permissionr\   \   s/   ø€ ä+2Ô3CÓ+DÔT[Ô\bÓTcñ ¤Dð Ì'õ ð
 €Nr,   )N)"Úfastapir   r   r   r   Úfastapi.responsesr   r   Úsqlalchemy.ormr	   rN   r
   Úapp.models.userr   Úapp.models.role_permissionr   r   Úapp.services.auth_servicer   r   r   r   Úapp.schemasr   Úrouterr+   ÚpostrA   rD   r    rK   rJ   Ústrr\   © r,   r*   ú<module>rh      s  ðß >Ó >ß <Ý "å &Ý  ß 7ß nÓ nÝ $á	˜'¨¨Ô	1€ñ 6=¸V³_ñ ˜gð ¨7ó ð  ‡�ˆXÐ0ð  ?n€ó  oÙDKÈFÃOñ �lð ¨Wð ¸'ò ó oðð* ‡�ˆYÐ 0Ð>o€Ópñó qðð ‡�ˆEÐ;ð  JW€ó  XÙ")Ð*:Ó";É7ÐSYË?ñ ˜4ð Àò ó Xðñ 7ó ð, #ô r,   