§
    jþ¬h5  ã                   ór  — d dl mZmZmZmZ d dlmZ d dlmZmZ d dl	m
Z
  ede¦  «        Ze                     ddg¬¦  «        d	„ ¦   «         Ze                     d
dg¬¦  «        d„ ¦   «         Ze                     ddg¬¦  «        d„ ¦   «         Ze                     ddg¬¦  «        d„ ¦   «         Zd„ Zd„ ZdS )é    )Ú	BlueprintÚrequestÚjsonifyÚsession)Údatetime)ÚdbÚUser)ÚCompanyÚauthz/loginÚPOST)Úmethodsc                  ó2  — 	 t          j        ¦   «         } | r*|                      d¦  «        r|                      d¦  «        st          ddi¦  «        dfS |                      d¦  «        }|                      d¦  «        }t          j                             t          j        |k    t          j        |k    z  ¦  «         	                    ¦   «         }|r| 
                    |¦  «        st          ddi¦  «        dfS |j        st          ddi¦  «        dfS t          j        ¦   «         |_        t          j                             ¦   «          |j        t           d	<   |j        t           d
<   |j        t           d<   d}|j        r:t*          j                             |j        ¦  «        }|r|                     ¦   «         }t          d|                     ¦   «         |dœ¦  «        dfS # t.          $ r-}t          ddt1          |¦  «        › �i¦  «        dfcY d}~S d}~ww xY w)u(   Endpoint para autenticaciÃ³n de usuariosÚusernameÚpasswordÚerrorz"Username y password son requeridosé�  u   Credenciales invÃ¡lidasé‘  zUsuario inactivoÚuser_idÚ	user_roleÚ
company_idNzLogin exitoso)ÚmessageÚuserÚcompanyéÈ   úError interno del servidor: éô  )r   Úget_jsonÚgetr   r	   ÚqueryÚfilterr   ÚemailÚfirstÚcheck_passwordÚ	is_activer   ÚutcnowÚ
last_loginr   r   ÚcommitÚidÚroler   r
   Úto_dictÚ	ExceptionÚstr)Údatar   r   r   Úcompany_infor   Úes          ú3/home/ubuntu/invoice-606-backend/src/routes/auth.pyÚloginr1      s6  € ð+PÝÔÑ!Ô!ˆàð 	Q˜4Ÿ8š8 JÑ/Ô/ð 	Q°t·x²xÀ
Ñ7KÔ7Kð 	QÝ˜GÐ%IÐJÑKÔKÈSÐPÐPà—8’8˜JÑ'Ô'ˆØ—8’8˜JÑ'Ô'ˆõ Œz× Ò ÝŒ]˜hÒ&­4¬:¸Ò+AÑBñ
ô 
ç
Š%‰'Œ'ð 	ð ð 	F˜4×.Ò.¨xÑ8Ô8ð 	FÝ˜GÐ%>Ð?Ñ@Ô@À#ÐEÐEàŒ~ð 	?Ý˜GÐ%7Ð8Ñ9Ô9¸3Ð>Ð>õ #œ/Ñ+Ô+ˆŒÝ
Œ
×ÒÑÔÐð "œW��	ÑØ#œy��ÑØ $¤��Ñð ˆØŒ?ð 	1Ý”m×'Ò'¨¬Ñ8Ô8ˆGØð 1Ø&ŸšÑ0Ô0�åØ&Ø—L’L‘N”NØ#ð
ð 
ñ ô ð ð	ð 	øõ ð Pð Pð PÝ˜Ð!HÅÀAÁÄÐ!HÐ!HÐIÑJÔJÈCÐOÐOÐOÐOÐOÐOÐOøøøøðPøøøs2   ‚AG ÁB#G Ã8G ÄCG Ç
HÇ)"HÈHÈHz/logoutc                  óÄ   — 	 t          j        ¦   «          t          ddi¦  «        dfS # t          $ r-} t          ddt	          | ¦  «        › �i¦  «        dfcY d} ~ S d} ~ ww xY w)u   Endpoint para cerrar sesiÃ³nr   zLogout exitosor   r   r   r   N)r   Úclearr   r+   r,   )r/   s    r0   Úlogoutr4   8   s…   € ðPÝŒ‰ŒˆÝ˜	Ð#3Ð4Ñ5Ô5°sÐ:Ð:øÝð Pð Pð PÝ˜Ð!HÅÀAÁÄÐ!HÐ!HÐIÑJÔJÈCÐOÐOÐOÐOÐOÐOÐOøøøøðPøøøs   ‚%( ¨
A²"AÁAÁAz/meÚGETc                  ó  — 	 t          j        d¦  «        } | st          ddi¦  «        dfS t          j                             | ¦  «        }|st          ddi¦  «        dfS d}|j        r:t          j                             |j        ¦  «        }|r|                     ¦   «         }t          |                     ¦   «         |dœ¦  «        d	fS # t          $ r-}t          dd
t          |¦  «        › �i¦  «        dfcY d}~S d}~ww xY w)u'   Obtener informaciÃ³n del usuario actualr   r   zNo autenticador   zUsuario no encontradoi”  N)r   r   r   r   r   )
r   r   r   r	   r   r   r
   r*   r+   r,   )r   r   r.   r   r/   s        r0   Úget_current_userr7   A   s;  € ðPÝ”+˜iÑ(Ô(ˆàð 	=Ý˜GÐ%5Ð6Ñ7Ô7¸Ð<Ð<åŒz�~Š~˜gÑ&Ô&ˆØð 	DÝ˜GÐ%<Ð=Ñ>Ô>ÀÐCÐCð ˆØŒ?ð 	1Ý”m×'Ò'¨¬Ñ8Ô8ˆGØð 1Ø&ŸšÑ0Ô0�åØ—L’L‘N”NØ#ð
ð 
ñ ô ð ðð 	øõ
 ð Pð Pð PÝ˜Ð!HÅÀAÁÄÐ!HÐ!HÐIÑJÔJÈCÐOÐOÐOÐOÐOÐOÐOøøøøðPøøøs)   ‚(C «3C ÁA(C Ã
C?Ã"C:Ã4C?Ã:C?z	/registerc                  óŒ  — 	 t          j        d¦  «        } | dk    rt          ddi¦  «        dfS t          j        ¦   «         }g d¢}|D ]0}|                     |¦  «        st          dd|› d�i¦  «        d	fc S Œ1g d
¢}|                     d¦  «        |vr)t          ddd                     |¦  «        › �i¦  «        d	fS t          j                             t          j	        |                     d¦  «        k    t          j
        |                     d¦  «        k    z  ¦  «                             ¦   «         }|rt          ddi¦  «        dfS t          |                     d¦  «        |                     d¦  «        |                     d¦  «        |                     d¦  «        |                     d¦  «        |                     d¦  «        |                     d¦  «        ¬¦  «        }|                     |                     d¦  «        ¦  «         t          j                              |¦  «         t          j                              ¦   «          t          d|                     ¦   «         dœ¦  «        dfS # t"          $ rK}t          j                              ¦   «          t          ddt'          |¦  «        › �i¦  «        dfcY d}~S d}~ww xY w)zQEndpoint para registro de nuevos usuarios (solo super_admin puede crear usuarios)r   Úsuper_adminr   z?No autorizado. Solo super administradores pueden crear usuariosé“  )r   r!   r   Ú
first_nameÚ	last_namer)   zCampo z es requeridor   )r9   Ú
accountantÚemployeer)   u    Rol invÃ¡lido. Debe ser uno de: z, r   r!   zUsername o email ya existei™  r;   r<   Úphoner   )r   r!   r;   r<   r?   r)   r   r   zUsuario creado exitosamente)r   r   éÉ   r   r   N)r   r   r   r   r   Újoinr	   r   r    r   r!   r"   Úset_passwordr   Úaddr'   r*   r+   Úrollbackr,   )Úcurrent_user_roler-   Úrequired_fieldsÚfieldÚvalid_rolesÚexisting_userÚnew_userr/   s           r0   ÚregisterrK   ]   sî  € ð2På#œK¨Ñ4Ô4ÐØ Ò-ð 	nÝ˜GÐ%fÐgÑhÔhÐjmÐmÐmåÔÑ!Ô!ˆð _Ð^Ð^ˆØ$ð 	Nð 	NˆEØ—8’8˜E‘?”?ð NÝ Ð)F°%Ð)FÐ)FÐ)FÐGÑHÔHÈ#ÐMÐMÐMÐMðNð @Ð?Ð?ˆØ�8Š8�FÑÔ ;Ð.ð 	hÝ˜GÐ%`ÈÏ	Ê	ÐR]ÑH^ÔH^Ð%`Ð%`ÐaÑbÔbÐdgÐgÐgõ œ
×)Ò)ÝŒ]˜dŸhšh zÑ2Ô2Ò2µt´zÀTÇXÂXÈgÑEVÔEVÒ7VÑWñ
ô 
ç
Š%‰'Œ'ð 	ð ð 	IÝ˜GÐ%AÐBÑCÔCÀSÐHÐHõ Ø—X’X˜jÑ)Ô)Ø—(’(˜7Ñ#Ô#Ø—x’x Ñ-Ô-Ø—h’h˜{Ñ+Ô+Ø—(’(˜7Ñ#Ô#Ø—’˜&Ñ!Ô!Ø—x’x Ñ-Ô-ð
ñ 
ô 
ˆð 	×Ò˜dŸhšh zÑ2Ô2Ñ3Ô3Ð3å
Œ
�Š�xÑ Ô Ð Ý
Œ
×ÒÑÔÐåØ4Ø×$Ò$Ñ&Ô&ð
ð 
ñ ô ð ðð 	øõ
 ð Pð Pð PÝ
Œ
×ÒÑÔÐÝ˜Ð!HÅÀAÁÄÐ!HÐ!HÐIÑJÔJÈCÐOÐOÐOÐOÐOÐOÐOøøøøðPøøøs9   ‚,I. ¯AI. Á8AI. Â=B
I. ÅD%I. É.
KÉ8A J>Ê8KÊ>Kc                 ó@   ‡ — ddl m}  |‰ ¦  «        ˆ fd„¦   «         }|S )u&   Decorador para requerir autenticaciÃ³nr   ©Úwrapsc                  óÜ   •— t          j        d¦  «        }|st          ddi¦  «        dfS t          j                             |¦  «        }|r|j        st          ddi¦  «        dfS  ‰| i |¤ŽS )Nr   r   u   AutenticaciÃ³n requeridar   u   Usuario no vÃ¡lido o inactivo)r   r   r   r	   r   r$   )ÚargsÚkwargsr   r   Úfs       €r0   Údecorated_functionz(require_auth.<locals>.decorated_function˜   sˆ   ø€ å”+˜iÑ(Ô(ˆØð 	GÝ˜GÐ%?Ð@ÑAÔAÀ3ÐFÐFåŒz�~Š~˜gÑ&Ô&ˆØð 	L˜4œ>ð 	LÝ˜GÐ%DÐEÑFÔFÈÐKÐKàˆq�$Ð!˜&Ð!Ð!Ð!ó    ©Ú	functoolsrN   )rR   rN   rS   s   `  r0   Úrequire_authrW   ”   sH   ø€ àÐÐÐÐÐà
€Uˆ1�X„Xð	"ð 	"ð 	"ð 	"ñ „Xð	"ð ÐrT   c                 ó   ‡ — ˆ fd„}|S )u*   Decorador para requerir un rol especÃ­ficoc                 óD   •‡ — ddl m}  |‰ ¦  «        ˆ ˆfd„¦   «         }|S )Nr   rM   c                  óv   •— t          j        d¦  «        }|‰k    rt          dd‰› d�i¦  «        dfS  ‰| i |¤ŽS )Nr   r   zRol z
 requeridor:   )r   r   r   )rP   rQ   r   rR   Úrequired_roles      €€r0   rS   z;require_role.<locals>.decorator.<locals>.decorated_function«   sY   ø€ åœ KÑ0Ô0ˆIØ˜MÒ)ð QÝ Ð)I°Ð)IÐ)IÐ)IÐJÑKÔKÈSÐPÐPà�1�dÐ%˜fÐ%Ð%Ð%rT   rU   )rR   rN   rS   r[   s   `  €r0   Ú	decoratorzrequire_role.<locals>.decorator¨   sN   øø€ Ø#Ð#Ð#Ð#Ð#Ð#à	ˆˆq‰Œð	&ð 	&ð 	&ð 	&ð 	&ñ 
Œð	&ð "Ð!rT   © )r[   r\   s   ` r0   Úrequire_roler^   ¦   s$   ø€ ð"ð "ð "ð "ð "ð ÐrT   N)Úflaskr   r   r   r   r   Úsrc.models.userr   r	   Úsrc.models.companyr
   Ú__name__Úauth_bpÚrouter1   r4   r7   rK   rW   r^   r]   rT   r0   ú<module>re      sb  ðØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø &Ð &Ð &Ð &Ð &Ð &à
ˆ)�F˜HÑ
%Ô
%€à‡‚ˆx & €Ñ*Ô*ð-Pð -Pñ +Ô*ð-Pð^ 	‡‚ˆy 6 (€Ñ+Ô+ðPð Pñ ,Ô+ðPð 	‡‚ˆu˜u˜g€Ñ&Ô&ðPð Pñ 'Ô&ðPð6 	‡‚ˆ{ V H€Ñ-Ô-ð4Pð 4Pñ .Ô-ð4Pðlð ð ð$ð ð ð ð rT   