Files
cmhub/apps/licensing/admin.py
T

108 lines
2.9 KiB
Python
Raw Normal View History

2026-07-21 09:27:05 +08:00
from django.contrib import admin
from .models import ClientDevice, DeviceBindingAudit, DeviceSession
def _masked_fingerprint(value: str) -> str:
if not value:
return ""
return f"{value[:8]}...{value[-6:]}"
@admin.register(ClientDevice)
class ClientDeviceAdmin(admin.ModelAdmin):
list_display = (
"user",
"product_code",
"platform",
"client_version",
"status",
"last_seen_at",
"first_seen_at",
)
list_filter = ("product_code", "platform", "status", "last_seen_at")
search_fields = ("user__username", "user__email")
list_select_related = ("user",)
ordering = ("-last_seen_at", "-id")
readonly_fields = (
"user",
"product_code",
"device_id_version",
"device_fingerprint_masked",
"public_key_fingerprint_masked",
"platform",
"client_version",
"status",
"first_seen_at",
"last_seen_at",
"created_at",
"updated_at",
)
fields = readonly_fields
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
@admin.display(description="设备摘要")
def device_fingerprint_masked(self, obj):
return _masked_fingerprint(obj.device_fingerprint)
@admin.display(description="安装公钥摘要")
def public_key_fingerprint_masked(self, obj):
return _masked_fingerprint(obj.public_key_fingerprint)
@admin.register(DeviceSession)
class DeviceSessionAdmin(admin.ModelAdmin):
list_display = ("device", "expires_at", "last_used_at", "revoked_at", "created_at")
list_filter = ("revoked_at", "expires_at")
search_fields = ("device__user__username", "device__user__email")
list_select_related = ("device", "device__user")
readonly_fields = (
"device",
"expires_at",
"last_used_at",
"revoked_at",
"created_at",
)
fields = readonly_fields
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False
@admin.register(DeviceBindingAudit)
class DeviceBindingAuditAdmin(admin.ModelAdmin):
list_display = ("user", "device", "api_key", "action", "reason", "created_at")
list_filter = ("action", "created_at")
search_fields = ("user__username", "user__email", "api_key__key_prefix")
list_select_related = ("user", "device", "api_key")
readonly_fields = (
"user",
"device",
"api_key",
"action",
"reason",
"client_version",
"created_at",
)
fields = readonly_fields
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False