55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
from drf_yasg.utils import swagger_auto_schema
|
|
from drf_yasg import openapi
|
|
|
|
|
|
def jwt_required_swagger_schema(**kwargs):
|
|
"""
|
|
Decorador para endpoints que requieren autenticación JWT
|
|
"""
|
|
security_requirement = [{'Bearer': []}]
|
|
|
|
# Obtener las respuestas existentes o crear un diccionario vacío
|
|
responses = kwargs.get('responses', {})
|
|
|
|
# Agregar respuesta 401 para endpoints autenticados
|
|
responses[401] = openapi.Response(
|
|
description="No autorizado - Token JWT requerido",
|
|
examples={
|
|
'application/json': {
|
|
'detail': 'Given token not valid for any token type',
|
|
'code': 'token_not_valid',
|
|
'messages': [
|
|
{
|
|
'token_class': 'AccessToken',
|
|
'token_type': 'access',
|
|
'message': 'Token is invalid or expired'
|
|
}
|
|
]
|
|
}
|
|
}
|
|
)
|
|
|
|
# Agregar respuesta 403 para problemas de permisos
|
|
responses[403] = openapi.Response(
|
|
description="Acceso denegado - Permisos insuficientes",
|
|
examples={
|
|
'application/json': {
|
|
'detail': 'No tiene permisos para realizar esta acción.'
|
|
}
|
|
}
|
|
)
|
|
|
|
kwargs['responses'] = responses
|
|
kwargs['security'] = security_requirement
|
|
|
|
return swagger_auto_schema(**kwargs)
|
|
|
|
|
|
# Headers comunes para autenticación
|
|
JWT_AUTH_HEADER = openapi.Parameter(
|
|
'Authorization',
|
|
openapi.IN_HEADER,
|
|
description="JWT Token - Formato: Bearer {token}",
|
|
type=openapi.TYPE_STRING,
|
|
required=True
|
|
) |