53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
from django.contrib import admin
|
|
|
|
from common.models import Address, Comment, CommentFiles, SessionToken, User
|
|
|
|
# Register your models here.
|
|
|
|
admin.site.register(User)
|
|
admin.site.register(Address)
|
|
admin.site.register(Comment)
|
|
admin.site.register(CommentFiles)
|
|
|
|
|
|
@admin.register(SessionToken)
|
|
class SessionTokenAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
"user",
|
|
"token_jti_short",
|
|
"is_active",
|
|
"expires_at",
|
|
"last_used_at",
|
|
"created_at",
|
|
)
|
|
list_filter = ("is_active", "expires_at", "created_at")
|
|
search_fields = ("user__email", "token_jti", "ip_address")
|
|
raw_id_fields = ("user",)
|
|
readonly_fields = (
|
|
"token_jti",
|
|
"refresh_token_jti",
|
|
"created_at",
|
|
"last_used_at",
|
|
"revoked_at",
|
|
)
|
|
date_hierarchy = "created_at"
|
|
ordering = ("-created_at",)
|
|
actions = ["revoke_tokens", "cleanup_expired"]
|
|
|
|
def token_jti_short(self, obj):
|
|
return f"{obj.token_jti[:16]}..."
|
|
|
|
token_jti_short.short_description = "Token JTI"
|
|
|
|
def revoke_tokens(self, request, queryset):
|
|
for token in queryset:
|
|
token.revoke()
|
|
self.message_user(request, f"{queryset.count()} tokens revoked successfully.")
|
|
|
|
revoke_tokens.short_description = "Revoke selected tokens"
|
|
|
|
def cleanup_expired(self, request, queryset):
|
|
count, _ = SessionToken.cleanup_expired()
|
|
self.message_user(request, f"{count} expired tokens cleaned up.")
|
|
|
|
cleanup_expired.short_description = "Cleanup expired tokens"
|