o
    i                     @   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 suksesjohndoe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                   @       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 r;   8/var/www/html/mfile_papteng_new/webapp/api/auth/views.pypost,   s0   zLoginView.postN)	__name__
__module____qualname__r   AllowAnypermission_classesr   serializer_classr=   r;   r;   r;   r<   r       s    r    zRefresh tokenz[Gunakan refresh token (dari body, header, atau cookie) untuk mendapatkan access token baru.zRefresh suksesAccess token diperbarui.zRefresh gagalz!Token tidak valid atau kadaluarsac                   @   r   )RefreshViewc                 O   s   |j dp|jdp|jd}|stdditjdS ||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/   zX-Refresh-Tokenr.   r   zRefresh token tidak ditemukanr%   r!   Tr#   rD   r&   r'   r(   r)   )r"   getheadersCOOKIESr   r   HTTP_401_UNAUTHORIZEDr0   r1   r2   r3   r4   r   r5   )r6   r   r7   r8   r/   r9   r"   r:   r;   r;   r<   r=   g   s.   


zRefreshView.postN)	r>   r?   r@   r   IsAuthenticatedrB   r   rC   r=   r;   r;   r;   r<   rE   I       rE   zLogout userz-Blacklist refresh token dan hapus cookie JWT.zLogout suksesLogout berhasil.zLogout gagalzRefresh token tidak valid)   i  c                   @   r   )
LogoutViewc                 O   s:   | j i d}|jdd tdditjd}|j|d |S )Nr!   Tr#   r   rL   r%   )r:   )r0   r1   r   r   HTTP_205_RESET_CONTENTsave)r6   r   r7   r8   r9   r:   r;   r;   r<   r=      s
   zLogoutView.postN)	r>   r?   r@   r   rA   rB   r   rC   r=   r;   r;   r;   r<   rN      rK   rN   N)django.confr   rest_frameworkr   r   r   rest_framework.responser   drf_spectacular.utilsr   r   r	   serializersr   r   r   GenericAPIViewr    rE   rN   r;   r;   r;   r<   <module>   s   
!	+	