from jwt_auth.models import JWTSettings, LSAPIToken, TruncatedLSAPIToken from rest_framework import serializers from rest_framework_simplejwt.serializers import TokenBlacklistSerializer from rest_framework_simplejwt.tokens import RefreshToken # Recommended implementation from JWT to support auto API documentation class TokenRefreshResponseSerializer(serializers.Serializer): access = serializers.CharField() class JWTSettingsSerializer(serializers.ModelSerializer): class Meta: model = JWTSettings fields = ('api_tokens_enabled', 'legacy_api_tokens_enabled') class LSAPITokenCreateSerializer(serializers.Serializer): token = serializers.SerializerMethodField() def get_token(self, obj): return obj.get_full_jwt() class Meta: model = LSAPIToken fields = ['token'] class LSAPITokenListSerializer(LSAPITokenCreateSerializer): def get_token(self, obj): # only return header/payload portion of token, using LSTokenBackend return str(obj) class LSAPITokenBlacklistSerializer(TokenBlacklistSerializer): token_class = TruncatedLSAPIToken class LSAPITokenRotateSerializer(serializers.Serializer): refresh = serializers.CharField() def validate(self, data): refresh = data.get('refresh') try: token = RefreshToken(refresh) except Exception: raise serializers.ValidationError('Invalid refresh token') data['refresh'] = token return data class TokenRotateResponseSerializer(serializers.Serializer): refresh = serializers.CharField()