U
    -h                     @   sj  d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	m
Z
mZ ddlmZmZmZ e	dgdd	ee
d
eddddddddgde
dedddidgdddG dd dejZe	dgddee
dedddidgde
deddd idgdddG d!d" d"ejZe	dgd#d$ee
d%eddd&idgde
d'eddd(idgdd)dG d*d+ d+ejZd,S )-    )settings)genericsstatuspermissions)Response)extend_schemaOpenApiResponseOpenApiExample   )LoginSerializerCustomTokenRefreshSerializerLogoutSerializerz	User Authz
Login userzOAutentikasi dengan username & password. Token akan disimpan di HttpOnly cookie.zLogin sukseszContoh suksesZjohndoeZAdmin)idusernamerole)Login berhasil, token disimpan di cookie.userdetail)value)descriptionexampleszLogin gagalzContoh gagalr   zInvalid username or password)   i  )tagssummaryr   request	responsesc                   @   s    e Zd ZejgZeZdd ZdS )	LoginViewc                 O   st   | j |jd}|jdd |j}t|d ddtjd}|jd|d	 dtj	 d
d |jd|d dtj	 d
d |S )NdataTraise_exceptionr   r   r   r   access_tokenaccessLaxkeyr   httponlysecuresamesiterefresh_tokenrefresh)
get_serializerr   is_validvalidated_datar   r   HTTP_200_OK
set_cookier   DEBUG)selfr   argskwargs
serializerr   response r8   :D:\Project\agus\mfile_papteng_new\webapp\api\auth\views.pypost,   s0    zLoginView.postN)	__name__
__module____qualname__r   AllowAnypermission_classesr   serializer_classr:   r8   r8   r8   r9   r      s   r   zRefresh tokenzHGunakan refresh token (dari cookie) untuk mendapatkan access token baru.zRefresh suksesAccess token diperbarui.zRefresh gagalz!Token tidak valid atau kadaluarsac                   @   s    e Zd ZejgZeZdd ZdS )RefreshViewc                 O   sv   d|j kr$|jd}|r$||j d< | j|j d}|jdd |j}tdditjd}|j	d	|d
 dt
j dd |S )Nr,   r+   r   Tr    r   rA   r"   r#   r$   r%   r&   )r   COOKIESgetr-   r.   r/   r   r   r0   r1   r   r2   )r3   r   r4   r5   Zrefresh_cookier6   r   r7   r8   r8   r9   r:   g   s     

zRefreshView.postN)	r;   r<   r=   r   IsAuthenticatedr?   r   r@   r:   r8   r8   r8   r9   rB   I   s   rB   zLogout userz-Blacklist refresh token dan hapus cookie JWT.zLogout suksesLogout berhasil.zLogout gagalzRefresh token tidak valid)   i  c                   @   s    e Zd ZejgZeZdd ZdS )
LogoutViewc                 O   s:   | j i d}|jdd tdditjd}|j|d |S )Nr   Tr    r   rF   r"   )r7   )r-   r.   r   r   HTTP_205_RESET_CONTENTsave)r3   r   r4   r5   r6   r7   r8   r8   r9   r:      s
    zLogoutView.postN)	r;   r<   r=   r   r>   r?   r   r@   r:   r8   r8   r8   r9   rH   ~   s   rH   N)django.confr   rest_frameworkr   r   r   rest_framework.responser   drf_spectacular.utilsr   r   r	   serializersr   r   r   GenericAPIViewr   rB   rH   r8   r8   r8   r9   <module>   s   
!		