40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""
|
|
OpenAPI Schema Extensions for drf-spectacular
|
|
Custom extensions for JWT authentication and unified response format
|
|
"""
|
|
from drf_spectacular.extensions import OpenApiAuthenticationExtension
|
|
from drf_spectacular.plumbing import build_bearer_security_scheme_object
|
|
from drf_spectacular.utils import extend_schema, OpenApiResponse
|
|
from rest_framework import status
|
|
|
|
|
|
class JWTAuthenticationExtension(OpenApiAuthenticationExtension):
|
|
"""
|
|
OpenAPI extension for JWT Bearer Token authentication
|
|
"""
|
|
target_class = 'igny8_core.api.authentication.JWTAuthentication'
|
|
name = 'JWTAuthentication'
|
|
|
|
def get_security_definition(self, auto_schema):
|
|
return build_bearer_security_scheme_object(
|
|
header_name='Authorization',
|
|
token_prefix='Bearer',
|
|
bearer_format='JWT'
|
|
)
|
|
|
|
|
|
class CSRFExemptSessionAuthenticationExtension(OpenApiAuthenticationExtension):
|
|
"""
|
|
OpenAPI extension for CSRF-exempt session authentication
|
|
"""
|
|
target_class = 'igny8_core.api.authentication.CSRFExemptSessionAuthentication'
|
|
name = 'SessionAuthentication'
|
|
|
|
def get_security_definition(self, auto_schema):
|
|
return {
|
|
'type': 'apiKey',
|
|
'in': 'cookie',
|
|
'name': 'sessionid'
|
|
}
|
|
|