a
    'iT4                     @   s  d dl mZmZmZ d dlmZ d dlmZ d dlZ	d dl
Z
d dlZd dlZeeZededdZejdd	gd
dd Zejdd	gd
dd Zejddgd
edd Zejdddgd
edd Zejdd	gd
edd Zejdd	gd
dd ZdS )    )	Blueprintrequestjsonify)db)token_requiredNusuariosz/v1/usuarios)
url_prefixz	/registroPOST)methodsc               
   C   s  t  } g d}|D ],}| |stdd| dddf  S q| d }| d }| d	 }| d
 }| d }| dd}| dd}	t }
|
stddddfS zRz|
jdd}|d||f | rtddddfW W |	  |
	  S t
|  }|d||||||f |j}dd l}|d}|d|||	f |
  tdd|||||ddfW W |	  |
	  S  tjjy } zH|
  td|  tddddfW  Y d }~W |	  |
	  S d }~0 0 W |	  |
	  n|	  |
	  0 d S )N)nombreapellidousernamemailpassworderrorzCampo z es obligatoriostatusmessage  r   r   r   r   r   
privacidadr   tokenFCM %   Error de conexión a la base de datos  T
dictionaryzHSELECT id FROM Xalarrazabal025_usuarios WHERE username = %s OR mail = %szEl usuario o correo ya existezINSERT INTO Xalarrazabal025_usuarios 
            (nombre, apellido, username, mail, contrasenia, privacidad) 
            VALUES (%s, %s, %s, %s, %s, %s)    _INSERT INTO Xalarrazabal025_user_app 
            (idUser, token, tokenFCM) VALUES (%s, %s, %s)successzRegistro exitoso)r   r   tokenr   r   r   r      Database error: zError al registrar usuario)r   get_jsongetr   r   get_connectioncursorexecutefetchoneclosehashlibmd5encode	hexdigestZ	lastrowidsecrets	token_hexcommitmysql	connectorErrorrollbackloggerr   )dataZrequired_fieldsfieldr   r   r   r   r   r   r   
connectionr%   hashed_passworduser_idr-   r   e r;   /app/usuarios/routes.pyregistro   s    


1


r=   z/loginc               
   C   s  t  } | d}| d}| dd}|r0|sBtddddfS t }|s`tdd	dd
fS zz |jdd}|d|f | }|stddddfW W |	  |	  S t
|  }||d krtddddfW W |	  |	  S dd l}|d}	|d|d |	|f |  d }
|d rJt|d d}
td|	d|d |d |d |d |
dW W |	  |	  S  tjjy } zH|  td|  tdd dd
fW  Y d }~W |	  |	  S d }~0 0 W |	  |	  n|	  |	  0 d S )!Nr   r   r   r   r   u&   Usuario y contraseña son obligatoriosr   r   r   r   Tr   z}SELECT id, nombre, apellido, username, mail, contrasenia, foto 
            FROM Xalarrazabal025_usuarios WHERE username = %sUsuario no encontrado  Zcontraseniau   Contraseña incorrecta  r   r   r   idfotozutf-8r   u   Inicio de sesión exitosor   r   r   )r   r   Zmensajer   r   r   r   rB   r!   zError en el servidor)r   r"   r#   r   r   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   base64	b64encodedecoder0   r1   r2   r3   r4   r   )r5   r   r   r   r7   r%   userZhashed_inputr-   r   	foto_datar:   r;   r;   r<   logine   s    

2*



rH   z/perfilPUTc               
   C   s`  t  } | d}| d}| d}| d}tdd ||||fD r\tddd	d
fS t }|sztddd	dfS z̐zN|jdd}|r|d|t j	f |
 rtddd	d
fW W |  |  S g }g }|d ur|d || |d ur|d || |d ur2|d || |d urbt|  }	|d ||	 |t j	 dd| d}
||
| |dt j	f |
 }|  tdd|dW W |  |  S  tjjy4 } zH|  td|  tddd	dfW  Y d }~W |  |  S d }~0 0 W |  |  n|  |  0 d S )Nr   r   r   r   c                 s   s   | ]}|d u V  qd S )Nr;   ).0r6   r;   r;   r<   	<genexpr>       z$actualizar_perfil.<locals>.<genexpr>r   z3Debe proporcionar al menos un campo para actualizarr   r   r   r   Tr   zDSELECT id FROM Xalarrazabal025_usuarios WHERE mail = %s AND id != %su7   El correo electrónico ya está en uso por otro usuarioznombre = %szapellido = %sz	mail = %szcontrasenia = %sz$UPDATE Xalarrazabal025_usuarios SET z, z WHERE id = %szSSELECT nombre, apellido, username, mail FROM Xalarrazabal025_usuarios WHERE id = %sr   z Datos actualizados correctamente)r   r   rF   r!   zError al actualizar los datos)r   r"   r#   allr   r   r$   r%   r&   r9   r'   r(   appendr)   r*   r+   r,   joinr/   r0   r1   r2   r3   r4   r   )r5   r   r   r   r   r7   r%   Zupdatesparamsr8   queryrF   r:   r;   r;   r<   actualizar_perfil   s    



6












rR   z/fotoGETc               
   C   s  t  } | stddddfS zz| jdd}tjdkr|dtjf | }|stdd	d d
dfW W |	  | 	  S |d }tdd|d
W W |	  | 	  S tjdkr2t
 }|d}|stddddfW W |	  | 	  S |d|tjf |   tdd|dW W |	  | 	  S W nf tjjy } zH|   td|  tddddfW  Y d }~W |	  | 	  S d }~0 0 W |	  | 	  n|	  | 	  0 d S )Nr   r   r   r   Tr   rS   z7SELECT foto FROM Xalarrazabal025_usuarios WHERE id = %sr>   )r   r   rB   r?   rB   r   zFoto obtenida correctamenterI   imgzImagen no proporcionadar   z;UPDATE Xalarrazabal025_usuarios SET foto = %s WHERE id = %sz Imagen actualizada correctamente)r   r   rT   r!   Error de base de datos)r   r$   r   r%   r   methodr&   r9   r'   r(   r"   r#   r/   r0   r1   r2   r3   r4   r   )r7   r%   resultrG   r5   rT   r:   r;   r;   r<   gestionar_foto  s    
,
%


rX   z/logoutc               
   C   s*  t  } | stddddfS  zzv|  }|dtjf |   |jdkrptdddW W |	  | 	  S tdd	dd
fW W |	  | 	  S W nf t
jj y } zH|   td|  tddddfW  Y d }~W |	  | 	  S d }~0 0 W |	  | 	  n|	  | 	  0 d S )Nr   r   r   r   z5DELETE FROM Xalarrazabal025_user_app WHERE token = %sr   r   u   Sesión cerrada correctamentezToken no encontrador?   r!   u   Error al cerrar sesión)r   r$   r   r%   r&   r   r   r/   Zrowcountr(   r0   r1   r2   r3   r4   r   )r7   r%   r:   r;   r;   r<   logoutY  s`    


rY   z/verificar-tokenc               
   C   s  t  } | d}| d}|s2tddddfS |sHtddddfS t }|sftdddd	fS z"z|jd
d}|d|f | }|r|d||f |	  tdd|d |d r|d 
 nd dW W |  |  S tddddfW W |  |  S W nf tjjyv } zH|  td|  tdddd	fW  Y d }~W |  |  S d }~0 0 W |  |  n|  |  0 d S )Nr   r   r   z!Token de usuario no proporcionador   r   zToken FCM no proporcionador   r   Tr   zCSELECT idUser, fecha FROM Xalarrazabal025_user_app WHERE token = %szBUPDATE Xalarrazabal025_user_app SET tokenFCM = %s WHERE token = %sr   u   Token válido y FCM actualizadoidUserfecha)r   r   rZ   r[   invalidu   Token no válido o expirador@   r!   rU   )r   r"   r#   r   r   r$   r%   r&   r'   r/   	isoformatr(   r0   r1   r2   r3   r4   r   )r5   r   r   r7   r%   rW   r:   r;   r;   r<   verificar_token  s    



r^   )flaskr   r   r   Zdatabaser   authr   Zmysql.connectorr0   r)   rC   logging	getLogger__name__r4   usuarios_bprouter=   rH   rR   rX   rY   r^   r;   r;   r;   r<   <module>   s.   

W
TYB'