o
    i'.                     @   s   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mZ d dl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mZ d dlmZ d dl mZ G dd dejZG dd dejZdd Z dS )    )viewsetsstatus)action)IsAuthenticatedAllowAny)Response)RefreshTokenAccessToken)check_passwordmake_password)timezone   )Usuario)LoginSerializerUsuarioSerializerTokenVerifySerializerUsuarioUpdateSerializerUsuarioDeleteSerializer)
RolUsuario)serializersc                   @   s   e Zd ZG dd dZdS )RolUsuarioSerializerc                   @   s   e Zd ZeZddgZdS )zRolUsuarioSerializer.Metaid
nombre_rolN)__name__
__module____qualname__r   modelfields r   r   ,/var/www/html/crm_dreinet/api_login/views.pyMeta   s    r    N)r   r   r   r    r   r   r   r   r      s    r   c                   @   s:  e Zd ZdZdd Zdd Zeddgdegd	d
d Zeddgde	gd	dd Z
eddgdegd	dd Zedddgdegd	dd Zeddgde	gd	dd Zeddgde	gd	dd Zeddgde	gd	dd Zeddgd e	gd	d!d" Zeddgd#e	gd	d$d% Zeddgd e	gd	d&d" Zd'S )(AuthViewSetu/   
    ViewSet de autenticación y usuarios.
    c                 C   s
   t j S )N)r   objectsnoneselfr   r   r   get_queryset   s   
zAuthViewSet.get_querysetc                 C   sJ   | j dkrtS | j dkrtS | j dkrtS | j dkrtS | j dkr#tS tS )Nlogincreate_usuariomodificar_usuarioeliminar_usuarioverify_token)r   r   r   r   r   r   r$   r   r   r   get_serializer_class   s   




z AuthViewSet.get_serializer_classFpostr'   )detailmethodsurl_pathpermission_classesc                 C   s   |   |jd}| rm|jd }|jd }z	tjj|d}W n tjy3   tdddt	j
d Y S w t||jrct|}|j|d< |jrM|jj|d	< t|j}td
d|t|jt|ddS tdddt	j
dS tdd|jdt	jdS )Ndataemailpassword)r4   u   Credenciales inválidasr   )mensajeestador   rolzLogin exitosor   )accessrefresh)r6   r7   usuariotokens   Datos inválidos)r6   r7   errores)r,   r3   is_validvalidated_datar   r"   getDoesNotExistr   r   HTTP_401_UNAUTHORIZEDr
   r5   r   for_userr4   rol_usuarior   r   straccess_tokenerrorsHTTP_400_BAD_REQUEST)r%   request
serializerr4   r5   userr;   	user_datar   r   r   r'   )   s>   








zAuthViewSet.loginrB   listarc                 C   s   t jjdd}|jd}|r| r|dd t| }t|dd}|j	D ]!}t jj|d d}|j
r9|j
jnd |d< |j
rD|j
jnd |d	< q't|j	S )
NTdeleted_at__isnulllimitz-fecha_creacionmanyr   r   r   rol_usuario_id)r   r"   filterquery_paramsrB   isdigitorder_byintr   r3   rF   r   r   r   )r%   rK   usuariosrR   rL   r<   usuario_objr   r   r   listar_usuariosP   s   

zAuthViewSet.listar_usuarioscreatec                 C   s   |j  }|d}|r2ztjj|d}|j|d< W n tjy1   tdd| ditj	d Y S w | 
 |d}| rS|jt|jd	 d
}td|jdtjdS td|jdtj	dS )Nr   r   rV   r6   El rol '' no exister8   r2   r5   )r5   zUsuario creador6   r   r>   r6   r?   )r3   copyrB   r   r"   r   rC   r   r   rJ   r,   r@   saver   rA   HTTP_201_CREATEDrI   )r%   rK   r3   r   r9   rL   r<   r   r   r   r(   c   s   

zAuthViewSet.create_usuariozverify-tokenc              
   C   s   |j dkr|jdn|jd}|stdditjdS zt|}t|j	}td|dW S  t
yK } ztdt|d	tjdW  Y d }~S d }~ww )
NPOSTtokenr6   zToken no proporcionador8   u   Token válido)r6   payloadu   Token inválido)r6   error)methodr3   rB   GETr   r   rJ   r	   dictrj   	ExceptionrG   )r%   rK   ri   	token_objrj   er   r   r   r+   x   s   "
$zAuthViewSet.verify_tokenz
debug-authc                 C   s   |j dd}d|jj||dd}t|jdr|jj|d< t|jdr+|jj|d< t|jd	rC|jjrC|jjj|d
< |jjj	|d< t
|S )NHTTP_AUTHORIZATION u   Información de autenticaciónzBearer )r6   esta_autenticadoauth_headerauth_header_starts_with_bearerr   
usuario_idr4   rF   rol_id
rol_nombre)METArB   rM   is_authenticated
startswithhasattrr   r4   rF   r   r   )r%   rK   ru   response_datar   r   r   
debug_auth   s   zAuthViewSet.debug_authpatchr)   c                 C   s(  |j d}|stdditjdS z	tjj|d}W n tjy-   tdditjd Y S w |j 	 }|d}|r`zt
jj|d}|j|d	< W n t
jy_   tdd
| ditjd Y S w t||dd}| rd|jv rzt|jd |jd< |  td|jdtjdS td|jdtjdS )Nr   r6   ID de usuario requeridor8   rU   Usuario no encontrador   r`   rV   ra   rb   T)r3   partialr5   zUsuario modificadorc   r>   rd   )r3   rB   r   r   rJ   r   r"   rC   HTTP_404_NOT_FOUNDre   r   r   r   r@   rA   r   rf   HTTP_200_OKrI   )r%   rK   rw   r<   r3   r   r9   rL   r   r   r   r)      s0   


zAuthViewSet.modificar_usuarioresponsable_usuarioc                 C   sX   t jjdd}t|dd}|jD ]}t jj|d d}|jr"|jjnd|d< qt|jS )zF
        Devuelve todos los usuarios cuyo rol_usuario_id = 2.
        TrP   rS   r   rU   Nr   )	r   r"   rW   r   r3   rB   rF   r   r   )r%   rK   responsablesrL   r<   r]   r   r   r   r      s   

zAuthViewSet.responsable_usuarior*   c                 C      |j d}|stdditjdS z	tjj|d}W n tjy-   tdditjd Y S w t	
 |_|jdgd td	|jd
tjdS Nr   r6   r   r8   rU   r   
deleted_at)update_fieldszUsuario eliminado (soft delete)rc   r3   rB   r   r   rJ   r   r"   rC   r   r   nowr   rf   r   r   r%   rK   rw   r<   r   r   r   r*         
zAuthViewSet.eliminar_usuario
show_rolesc                 C   s    t j }t|dd}t|jS )z6
        Devuelve todos los roles de usuario.
        TrS   )r   r"   allr   r   r3   )r%   rK   rolesrL   r   r   r   r      s   

zAuthViewSet.show_rolesc                 C   r   r   r   r   r   r   r   r*      r   N)r   r   r   __doc__r&   r,   r   r   r'   r   r^   r(   r+   r   r)   r   r*   r   r   r   r   r   r!      s0    
&




#


r!   c                 C   sD   t | }| j|d< t| dr| jr| jj|d< t|t|jdS )Nr4   rF   r9   )r;   r:   )r   rE   r4   r}   rF   r   rG   rH   )rM   r;   r   r   r   get_tokens_for_custom_user   s
   

r   N)!rest_frameworkr   r   rest_framework.decoratorsr   rest_framework.permissionsr   r   rest_framework.responser   rest_framework_simplejwt.tokensr   r	   django.contrib.auth.hashersr
   r   django.utilsr   modelsr   r   r   r   r   r   r   Models.RolUsuarior   ModelSerializerr   GenericViewSetr!   r   r   r   r   r   <module>   s     a