Skip to content

Commit 78ba4b5

Browse files
committed
feat: add admin interface for TokenFamily and BlacklistedTokenFamily models
1 parent 1746db0 commit 78ba4b5

File tree

1 file changed

+101
-0
lines changed
  • rest_framework_simplejwt/token_family

1 file changed

+101
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
from datetime import datetime
2+
from typing import Any, Optional, TypeVar
3+
4+
from django.contrib import admin
5+
from django.contrib.auth.models import AbstractBaseUser
6+
from django.db.models import QuerySet
7+
from django.utils.translation import gettext_lazy as _
8+
from rest_framework.request import Request
9+
10+
from ..models import TokenUser
11+
from .models import TokenFamily, BlacklistedTokenFamily
12+
13+
AuthUser = TypeVar("AuthUser", AbstractBaseUser, TokenUser)
14+
15+
16+
class TokenFamilyAdmin(admin.ModelAdmin):
17+
list_display = (
18+
"family_id",
19+
"user",
20+
"created_at",
21+
"expires_at",
22+
)
23+
search_fields = (
24+
"user__id",
25+
"family_id",
26+
)
27+
ordering = ("user",)
28+
29+
def get_queryset(self, *args, **kwargs) -> QuerySet:
30+
qs = super().get_queryset(*args, **kwargs)
31+
32+
return qs.select_related("user")
33+
34+
# Read-only behavior defined below
35+
actions = None
36+
37+
def get_readonly_fields(self, *args, **kwargs) -> list[Any]:
38+
return [f.name for f in self.model._meta.fields]
39+
40+
def has_add_permission(self, *args, **kwargs) -> bool:
41+
return False
42+
43+
def has_delete_permission(self, *args, **kwargs) -> bool:
44+
return False
45+
46+
def has_change_permission(
47+
self, request: Request, obj: Optional[object] = None
48+
) -> bool:
49+
return request.method in ["GET", "HEAD"] and super().has_change_permission(
50+
request, obj
51+
)
52+
53+
54+
admin.site.register(TokenFamily, TokenFamilyAdmin)
55+
56+
57+
class BlacklistedTokenFamilyAdmin(admin.ModelAdmin):
58+
list_display = (
59+
"family_id",
60+
"family_user",
61+
"family_created_at",
62+
"family_expires_at",
63+
"blacklisted_at",
64+
)
65+
search_fields = (
66+
"family__user__id",
67+
"family__family_id",
68+
)
69+
ordering = ("family__user",)
70+
71+
def get_queryset(self, *args, **kwargs) -> QuerySet:
72+
qs = super().get_queryset(*args, **kwargs)
73+
74+
return qs.select_related("family__user")
75+
76+
def family_id(self, obj: BlacklistedTokenFamily) -> str:
77+
return obj.family.family_id
78+
79+
family_id.short_description = _("family id") # type: ignore
80+
family_id.admin_order_field = "family__family_id" # type: ignore
81+
82+
def family_user(self, obj: BlacklistedTokenFamily) -> AuthUser:
83+
return obj.family.user
84+
85+
family_user.short_description = _("user") # type: ignore
86+
family_user.admin_order_field = "family__user" # type: ignore
87+
88+
def family_created_at(self, obj: BlacklistedTokenFamily) -> datetime:
89+
return obj.family.created_at
90+
91+
family_created_at.short_description = _("created at") # type: ignore
92+
family_created_at.admin_order_field = "family__created_at" # type: ignore
93+
94+
def family_expires_at(self, obj: BlacklistedTokenFamily) -> datetime:
95+
return obj.family.expires_at
96+
97+
family_expires_at.short_description = _("expires at") # type: ignore
98+
family_expires_at.admin_order_field = "family__expires_at" # type: ignore
99+
100+
101+
admin.site.register(BlacklistedTokenFamily, BlacklistedTokenFamilyAdmin)

0 commit comments

Comments
 (0)