from django.contrib import admin from rest_framework_simplejwt.token_blacklist.admin import OutstandingTokenAdmin from rest_framework_simplejwt.token_blacklist.models import OutstandingToken from rest_framework_simplejwt.tokens import SlidingToken, RefreshToken class CustomOutstandingTokenAdmin(OutstandingTokenAdmin): """ Custom admin view for OutstandingToken model\n allows bulk deletion, blacklisting and sliding token creation """ def blacklist_selected_tokens(modeladmin, request, queryset): for obj in queryset: try: SlidingToken(str(obj.token)).blacklist() except Exception: RefreshToken(str(obj.token)).blacklist() except Exception: pass actions = [blacklist_selected_tokens] __fieldsets_custom = [ ( "Sliding Token", { "fields": ("user",), "description": """

Token will be generated on save.

""", }, ), ] def add_view(self, request, extra_content=None): self.fieldsets = self.__fieldsets_custom return super(CustomOutstandingTokenAdmin, self).add_view(request) def get_readonly_fields(self, *args, **kwargs): fields = [f.name for f in self.model._meta.fields] # only user field is writeable fields.remove("user") return fields def has_delete_permission(self, *args, **kwargs): return True def has_add_permission(self, *args, **kwargs): return True def has_change_permission(self, *args, **kwargs): return False def save_model(self, request, obj, form, change): if obj.user: SlidingToken.for_user(obj.user) # Unregister the default admin view admin.site.unregister(OutstandingToken) # Register our custom admin view admin.site.register(OutstandingToken, CustomOutstandingTokenAdmin)